Post on 25-Jun-2022
Estruturas Condicionais
Algoritmos e Técnicas de
Programação
Prof. Kleber Rezende
Considerações Iniciais
Nos capítulos anteriores foram apresentados
alguns conceitos básicos sobre as estruturas
e comandos que são utilizados para construir
um algoritmo simples.
Como visto, podemos solicitar valores de
ENTRADA aos usuários do sistema utilizando
o comando LEIA, e podemos ainda enviar
valores de saída do sistema por meio do
comando ESCREVA.
Considerações Iniciais
Entretanto, as possibilidades de
construção de algoritmos que temos até
o presente momento são bastante
limitadas, pois ainda não estamos aptos
a tomar decisões durante o tempo de
execução do algoritmo, ou até mesmo
de classificar determinados valores de
variáveis.
Considerações Iniciais
Por exemplo, considere que precisamos desenvolver um algoritmo que classifique uma determinada pessoa entre MAIOR DE IDADE ou MENOR DE IDADE.
Para esse problema sabemos que precisamos avaliar a IDADE da pessoa, e que SE essa idade for maior (ou igual) que 18 anos a pessoa é considerada MAIOR DE IDADE.
Para resolver esse tipo de situação, onde um determi-nado valor é avaliado para, a partir do resultado dessa avaliação, executarmos alguma ação, utilizamos as ESTRUTURAS DE CONDIÇÃO.
Estrutura de condição SE ENTAO
A principal estrutura de condição utiliza-
da é a SE ENTAO;
Ela é utilizada da seguinte forma:
SE <EXPRESSÃO LÓGICA> ENTAO
COMANDO
FIMSE
Estrutura de condição SE ENTAO
Onde,
1) A EXPRESSÃO LÓGICA é uma expressão que deverá retornar um valor VERDADEIRO ou FALSO, e caso o resultado dessa EXPRESSÃO seja VERDADEIRO, será executado o COMANDO que está dentro da ESTRUTURA.
Alguns exemplos de expressões lógicas já foram vistos anteriormente, a seguir temos mais alguns exemplos:
18 > 20, cujo resultado será FALSO
45 = 45, cujo resultado será VERDADEIRO
MEDIA > 7, cujo resultado dependerá do valor da variável MEDIA
Estrutura de condição SE ENTAO
Onde,
2) O COMANDO é uma linha (ou sequência) de
código que será executado somente quando o
resultado da EXPRESSÃO LÓGICA for
VERDADEIRO
3) FIMSE indica que a ESTRUTRA SE ENTAO
chegou ao final.
Estrutura de condição SE ENTAO
Em C, teríamos:
if (<EXPRESSÃO LÓGICA>)
{
COMANDO
}
Estrutura de condição SE ENTAO
Voltando ao nosso problema de classificar uma pessoa como MAIOR ou MENOR de IDADE, podemos utilizar a estrutura de condição SE ENTAO da seguinte maneira:
algoritmo "condicao"
variável
inteiro idade
inicio
escreva("digite a sua idade")
leia(idade)
se idade >= 18 entao
escreva("voce é maior de idade")
fimse
Fimalgoritmo
Estrutura de condição SE ENTAO
Em C...
main()
{
int idade;
printf(“Digite sua idade: ”);
scanf (“%d”, &idade);
if (idade >= 18)
{
printf(“Você é maior de idade!”);
}
}
SE ENTAO - Fluxograma
Leia Idade
Início
Idade >= 18?
Fim
Escreva “Você é maior de idade”
Verdadeiro Falso
Estrutura de condição
SE ENTAO SENAO
O algoritmo anterior resolve o nosso problema quando a pessoa é MAIOR DE IDADE, porém não nos dá nenhum retorno para quando a mesma for MENOR DE IDADE.
Para contornar esse tipo de situação, a ESTRUTURA DE CONDIÇÃO SE ENTAO, oferece a possibilidade de executarmos uma determinada ação ou comando, se o resultado da EXPRESSÃO LÓGICA for VERDADEIRO e de executarmos uma ação diferente se o resultado da EXPRESSÃO LÓGICA for FALSO. Para essas situações é utilizado o comando SENAO.
SE ENTAO SENAO - Fluxograma
Leia Idade
Início
Idade >= 18?
Fim
Escreva “Você é maior de idade”
Verdadeiro Falso
Escreva “Você é menor de idade”
SE ENTAO SENAO - Algoritmo
algoritmo "condicao"
variável
inteiro idade
inicio
escreva("digite a sua idade")
leia(idade)
se idade >= 18 entao
escreva("você é MAIOR de idade")
senao
escreva("você é MENOR de idade")
fimse
Fimalgoritmo
SE ENTAO SENAO – C
main()
{
int idade;
printf(“Digite sua idade: ”);
scanf (“%d”, &idade);
if (idade >= 18)
{
printf(“Você é MAIOR de idade!”);
}
else
{
printf(“Você é MENOR de idade!”);
}
}
ESTRUTURAS DE CONDIÇÃO
Utilizando variáveis
Em todos os exemplos vistos até o presente
momento, o resultado que é enviado para a
tela (a saída do sistema) é escrito logo após a
verificação da EXPRESSÃO LÓGICA e dentro
da ESTRUTURA DE CONDIÇÃO;
Mas isso não é uma regra, podemos
simplesmente armazenar informações em
variáveis e escrever o resultado obtido
somente no final.
ESTRUTURAS DE CONDIÇÃO
Utilizando variáveis
Por exemplo, no algoritmo que avalia se
uma determinada pessoa é MAIOR DE
IDADE ou se é MENOR DE IDADE,
poderíamos criar uma variável que
pudesse receber a situação em que a
pessoa se encontra e depois
simplesmente escrever o valor dessa
variável.
ESTRUTURAS DE CONDIÇÃO
Utilizando variáveis
Veja como ficaria: algoritmo "condicao"
variável
inteiro idade
cadeia maioridade
inicio
escreva("digite a sua idade")
leia(idade)
se idade >= 18 entao
maioridade ← "MAIOR"
senao
maioridade ← "MENOR"
fimse
escreva(“você é “, maioridade,” de idade”)
Fimalgoritmo
ESTRUTURAS DE CONDIÇÃO
Utilizando variáveis – C main()
{
int idade;
char maioridade[6];
printf(“Digite sua idade: ”);
scanf (“%d”, &idade);
if (idade >= 18)
{
strcpy (maioridade, “MAIOR”);
//strcpy = string copy – função que copia o conteúdo da
//segunda string (cadeia de caracteres) para a primeira.
//Equivale a uma atribuição maioridade = “MAIOR”
}
else
strcpy (maioridade, “MENOR”);
printf(“Você é %s de idade!”, maioridade);
}
Utilizando variáveis - Fluxograma
Leia Idade
Início
Idade >= 18?
Fim
maioridade ← “MAIOR”
Verdadeiro Falso
maioridade ← “MENOR”
Escreva “Você é “ + maioridade + “ de idade”
ESTRUTURAS DE CONDIÇÃO
Exemplos de Aplicação
Vamos reconsiderar agora o exercício feito na última aula:
----------------------------------------------------------------------
Elabore um algoritmo que leia dois números inteiros e imprima a seguinte saída:
Dividendo:
Divisor:
Quociente:
Resto:
Para a resolução desse algoritmo utilize os comandos MOD(%) e DIV(/) para o cálculo do resto e do quociente da divisão.
----------------------------------------------------------------------
ESTRUTURAS DE CONDIÇÃO
Análise do Problema
Entrada:
Nosso programa necessitará que o
usuário informe dois valores inteiros
(O Dividendo e o Divisor)
Processamento:
O programa deverá calcular o quociente e
o resto da divisão inteira do dividendo
pelo divisor;
ESTRUTURAS DE CONDIÇÃO
Análise do Problema
Saída:
O programa deverá escrever as informações
conforme especificação feita no enunciado do
problema.
Dividendo: <valor informado pelo usuário>
Divisor: <valor informado pelo usuário>
Quociente: <valor calculado na fase de processamento>
Resto: <valor calculado na fase de processamento>
ESTRUTURAS DE CONDIÇÃO
Refinando a fase de processamento
Para calcular o quociente, pode-se
usar a seguinte expressão:
quociente ← dividendo div divisor
ou, em C...
quociente = dividendo / divisor;
ESTRUTURAS DE CONDIÇÃO
Refinando a fase de processamento
Para calcular o resto, pode-se usar a
seguinte expressão:
resto ← dividendo mod divisor
ou, em C...
resto = dividendo % divisor;
ESTRUTURAS DE CONDIÇÃO
Refinando a fase de processamento
Pergunta 1:
E se o usuário informar (digitar) valor zero
(0) para a variável divisor?
Resposta 1:
Teremos um problema com a matemática
(divisão por zero) e, consequentemente,
com nosso programa (ele será abortado)!
ESTRUTURAS DE CONDIÇÃO
Refinando a fase de processamento
Pergunta 2:
O que fazer diante desta possibilidade?
Resposta 2:
Teremos de acrescentar um comando
condicional antes da realização dos
cálculos.
ESTRUTURAS DE CONDIÇÃO
Refinando a fase de processamento
Leia Dividendo
Início
Fim
Leia Divisor
Calcule Quociente
Calcule Resto
Imprima Resultados
Antes, tínhamos:
ESTRUTURAS DE CONDIÇÃO
Refinando a fase de processamento
Leia Dividendo
Início
Divisor != 0?
Fim
Verdadeiro Falso
Leia Divisor
Calcule Quociente
Calcule Resto
Imprima Resultados
ESTRUTURAS DE CONDIÇÃO
Refinando a fase de processamento
Leia Dividendo
Início
Divisor != 0?
Fim
Verdadeiro Falso
Leia Divisor
Calcule Quociente
Calcule Resto
Imprima Resultados
Imprima
Mensagem de
Erro
ESTRUTURAS DE CONDIÇÃO
Expressões Lógicas Compostas
Como vimos anteriormente, é possível
compor expressões lógicas utilizando
operadores relacionais como (<, >, !=,
==,<=, >=)
É possível também compor expressões
lógicas utilizando os operadores E
(&&), OU (||) e NÃO (!).
ESTRUTURAS DE CONDIÇÃO
Expressões Lógicas Compostas
Nesse sentido, a expressão lógica que
será avaliada na estrutura de condição
SE ENTAO também pode ser formada
por uma expressão lógica composta.
Por exemplo, considere a situação de
um determinado aluno em uma
disciplina.
ESTRUTURAS DE CONDIÇÃO
Expressões Lógicas Compostas
Sabe-se que para ser aprovado, é
necessário que um aluno tenha:
NOTA >= 7.0 E FREQUENCIA >= 75 %.
ESTRUTURAS DE CONDIÇÃO
Expressões Lógicas Compostas
SE (nota >= 7) E (freqüência >= 0.75) ENTAO
ESCREVA(“O aluno está aprovado”)
SENAO
ESCREVA(“O aluno está reprovado”)
FIMSE
Veja que para avaliar essa situação
necessitaremos utilizar o operador
lógico “E” da seguinte forma:
ESTRUTURAS DE CONDIÇÃO
Expressões Lógicas Compostas
algoritmo "aluno"
variavel
real nota, frequencia
início
escreva("digite a nota do aluno")
leia(nota)
escreva("digite a frequencia do aluno")
leia(frequencia)
se (nota >= 7) E (frequencia >= 0.75) entao
escreva("O aluno está aprovado")
senao
escreva("O aluno está reprovado")
fimse
Fimalgoritmo
ESTRUTURAS DE CONDIÇÃO
Se Entao Senao ANINHADAS
Dentro de uma estrutura SE ENTAO
SENAO é perfeitamente possível
utilizarmos mais de uma linha de
COMANDO, ou até mesmo outras
estruturas SE ENTAO SENAO.
Existem situações em que os caminhos
para a tomada de uma decisão
acabam formando uma espécie de
árvore com diversas ramificações.
ESTRUTURAS DE CONDIÇÃO
Se Entao Senao ANINHADAS
Nesses casos, podemos recorrer à
utilização de várias estruturas SE
ENTAO SENAO embutidas umas
dentro das outras, comumente
chamadas de NINHOS.
ESTRUTURAS DE CONDIÇÃO
Se Entao Senao ANINHADAS
Por exemplo, suponha que desejemos
refinar um pouco mais o problema
referente às médias dos alunos de uma
dada disciplina.
Sabemos que um aluno é APROVADO
caso apresente MÉDIA maior ou igual
a 7.0 e FREQUENCIA maior ou igual a
75%.
ESTRUTURAS DE CONDIÇÃO
Se Entao Senao ANINHADAS
Se o aluno obtiver a FREQUENCIA
mínima exigida e uma MÉDIA entre 4 e
7, o mesmo ainda teria direito a uma
última avaliação de RECUPERAÇÃO.
Como faríamos para resolver o
problema em questão utilizando
apenas estruturas de condição SE
ENTAO SENAO ?
ESTRUTURAS DE CONDIÇÃO
Se Entao Senao ANINHADAS
Poderíamos começar avaliando a
FREQUENCIA do aluno, e se a mesma
for menor que 75% o aluno já estaria
REPROVADO;
Porém, caso a FREQUENCIA respeite
o mínimo exigido, teremos que avaliar
a MÉDIA para saber se o mesmo está
APROVADO, em RECUPERAÇÃO ou
REPROVADO.
ESTRUTURAS DE CONDIÇÃO
Se Entao Senao ANINHADAS
Leia Média
Início
Frequência < 0.75?
Fim
Verdadeiro Falso
Leia Frequência
Avalie a Média Escreva “Você
está reprovado
por faltas!”
ESTRUTURAS DE CONDIÇÃO
Se Entao Senao ANINHADAS
No momento em que é verificado que a
FREQUENCIA é menor que 0.75 (75%)
o aluno já está imediatamente
REPROVADO;
Caso a FREQUENCIA seja maior ou
igual a esse valor, devemos continuar
com o algoritmo para avaliar em que
situação que o aluno se encontra;
ESTRUTURAS DE CONDIÇÃO
Se Entao Senao ANINHADAS
Enfim, agora é necessário avaliar a
MEDIA do mesmo, verificando se está
acima de 7.0 (APROVADO), entre 4 e
7.0 (RECUPERACAO), ou abaixo de
4.0 (REPROVADO).
ESTRUTURAS DE CONDIÇÃO
Refinando o passo “Avalie a Média”
Média >= 7.0?
Fim
Verdadeiro Falso
Escreva “Você
está aprovado!” Média >= 4.0?
Verdadeiro
Escreva “Você
está em
Recuperação!”
Escreva “Você
está reprovado
por Média!”
Falso
ESTRUTURAS DE CONDIÇÃO
Refinando o passo “Avalie a Média”
Média >=
7.0?
Escreva “Você
está aprovado!” Média >=
4.0?
Escreva “Você
está em
Recuperação!” Escreva “Você
está reprovado
por Média!”
Leia Média
Início
Frequência < 0.75?
Fim
Verdadeiro
Falso
Leia Frequência
Escreva “Você
está reprovado
por faltas!”
Verdadeiro Falso
Verdadeiro
Falso
ESTRUTURAS DE CONDIÇÃO
Se Entao Senao ANINHADAS
algoritmo "aluno" variavel real media, frequencia início escreva("digite a media e a frequencia") leia(media, frequencia) se frequencia < 0.75 entao escreva("voce esta reprovado por FALTAS") senao se media >= 7 entao escreva("voce esta APROVADO") senao se media >= 4 entao escreva("voce esta em RECUPERACAO") senao escreva("voce esta REPROVADO POR MEDIA") fimse fimse fimse Fimalgoritmo
ESTRUTURAS DE CONDIÇÃO
Comando Escolha (Switch)
Na aula de hoje, vamos considerar seguinte problema:
----------------------------------------------------------------------
Elabore um algoritmo que leia um número inteiro entre 1 e 12 e imprima o nome do mês correspondente. Caso seja digitado um valor fora desse intervalo, deverá ser exibida uma mensagem informando que não existe mês com esse número.
----------------------------------------------------------------------
A seguir, podemos visualizar algumas possíveis soluções para o problema:
ESTRUTURAS DE CONDIÇÃO
Comando Escolha (Switch) algoritmo “MesDoAno" variavel inteiro mes início escreva("digite um número entre 1 e 12") leia(mes) se (mes < 1) OU (mes > 12) entao escreva(“Mês INEXISTENTE") senão se mes = 1 entao escreva(“Mês de Janeiro!") fimse
se mes = 2 entao
escreva(“Mês de Fevereiro!")
fimse ......
se mes = 12 entao
escreva(“Mês de Dezembro!")
fimse
fimse Fimalgoritmo
ESTRUTURAS DE CONDIÇÃO
Comando Escolha (Switch) algoritmo “MesDoAno" ...... leia(mes) se (mes < 1) OU (mes > 12) entao escreva(“Mês INEXISTENTE") senão se mes = 1 entao escreva(“Mês de Janeiro!") senão
se mes = 2 entao
escreva(“Mês de Fevereiro!")
senão ......
se mes = 12 entao
escreva(“Mês de Dezembro!")
fimse fimse fimse
fimse Fimalgoritmo
ESTRUTURAS DE CONDIÇÃO
Comando Escolha (Switch)
A segunda solução é mais eficiente que a
primeira, pois realiza um número médio de
comparações menor;
Porém, o código fica mais extenso e, às
vezes, confuso;
Será possível criarmos um código enxuto e
eficiente ao mesmo tempo?
ESTRUTURAS DE CONDIÇÃO
Comando Escolha (Switch)
A resposta é sim.
Com a estrutura Escolha ... Caso
(Switch ... Case, em C);
Nessa estrutura, o valor de uma
determinada variável é avaliado e
CASO esse valor coincida com um
valor pré-estabelecido, um COMANDO
(ou grupo de comandos) é executado.
ESTRUTURAS DE CONDIÇÃO
Comando Escolha (Switch)
A estrutura de condição ESCOLHA
CASO é utilizada da seguinte forma:
Escolha <nome da variável>
Caso <valor1>
COMANDO
Caso <valor2>
COMANDO
FimEscolha
Comando Escolha (Switch)
Exemplo No exemplo a seguir, a variável n do tipo inteiro é testada, e
CASO a mesma tenha valor 1 é escrito na tela “um”, CASO a
mesma tenha valor 2 é escrito na tela “dois”
algoritmo "teste"
variavel
inteiro n
inicio
escreva("digite n")
leia(n)
escolha n
caso 1
escreva("um")
caso 2
escreva("dois")
fimescolha
Fimalgoritmo
Comando Escolha (Switch)
Exemplo – Em C
main()
{
int n;
printf("digite n: ");
scanf (“%d”, &n);
switch (n)
{
case 1:
printf("um");
break;
case 2:
printf("dois");
break;
}
}
ESTRUTURAS DE CONDIÇÃO
Comando Escolha (Switch)
Da mesma maneira que a estrutura de
condição SE ENTAO SENAO
possibilita que executemos algum
comando quando a expressão avaliada
não é VERDADEIRA, a estrutura de
condição ESCOLHA CASO também
nos oferece essa opção
ESTRUTURAS DE CONDIÇÃO
Comando Escolha (Switch)
A sintaxe para utilizarmos essa opção
é mostrada a seguir: Escolha <nome da variável>
Caso <valor1>
COMANDO
Caso <valor2>
COMANDO
Outrocaso
COMANDO
FimEscolha
Comando Escolha (Switch)
Exemplo Trabalhando com o nosso exemplo anterior, agora a variável n do tipo
inteiro é testada, e CASO a mesma tenha valor 1 é escrito na tela “um”, CASO a mesma tenha valor 2 é escrito na tela “dois”, e CASO não tenha nenhum desses valores será escrito na tela “outro valor”:
algoritmo "teste"
variavel
inteiro n
inicio
escreva("digite n")
leia(n)
escolha n
caso 1
escreva("um")
caso 2
escreva("dois")
outrocaso
escreva(“outro valor")
fimescolha
Fimalgoritmo
Comando Escolha (Switch)
Exemplo – Em C main()
{
int n;
printf("digite n: ");
scanf (“%d”, &n);
switch (n)
{
case 1:
printf("um");
break;
case 2:
printf("dois");
break;
default:
printf("outro valor");
break;
}
}
Comando Escolha (Switch)
Voltando ao Problema Inicial algoritmo “MesDoAno" variavel inteiro mes início escreva("digite um número entre 1 e 12") leia(mes) escolha mês caso 1: escreva(“Mês de Janeiro!") caso 2: escreva(“Mês de Fevereiro!") caso 3: escreva(“Mês de Março!") caso 4: escreva(“Mês de Abril!") caso 5: escreva(“Mês de Maio!") caso 6: escreva(“Mês de Junho!") caso 7: escreva(“Mês de Julho!") caso 8: escreva(“Mês de Agosto!") caso 9: escreva(“Mês de Setembro!") caso 10: escreva(“Mês de Outubro!") caso 11: escreva(“Mês de Novembro!") caso 12: escreva(“Mês de Dezembro!") outrocaso: escreva(“Mês INEXISTENTE") fimEscolha Fimalgoritmo
Comando Escolha (Switch)
Exercício
Criar um algoritmo que leia dois números inteiros, e que solicite ao usuário qual a operação que o mesmo deseja realizar entre esses números.
Caso o usuário digitar o caractere ‘*’ será realizada uma multiplicação;
Caso seja digitado o caractere ‘/’ será realizada uma divisão;
Caso seja digitado o caractere ‘+’ será realizado uma adição entre os números;
Caso seja digitado o caractere ‘-’ será realizada uma subtração.