Você está na página 1de 33

PROGRAMAÇÃO I

Manoel Ribeiro Filho


manoelrib@gmail.com
3- Comandos de Condição

-Comando se
-Comando caso
-Programas em Linguagem C
-
O uso de condições ou comandos de decisão muda
o fluxo das instruções de um algoritmo, permitindo
que diferentes instruções sejam executadas de
acordo com a entrada do programa

Neste capítulo apresentaremos os dois principais


comandos para avaliação de condições e como
determinam o fluxo de execução de um algoritmo
3.1 Comando se

Sintaxe do comando se

se<valor booleano>então
<bloco de instruções 1>
senão
<bloco de instruções 2>
<continuação do algoritmo>

A cláusula senão é opcional.


A cláusula senão é opcional. Vamos analisar primeiramente
o comando se sem a cláusula senão.

se<valor booleano>então
<bloco de instruções 1>
<continuação do algoritmo>

O <valor booleano> pode ser representado por


☼ uma variável booleana
☼ uma constante (V ou F)
☼ uma expressão cujo resultado seja um valor lógico.
O <bloco de instruções 1> será executado caso o valor
booleano seja verdadeiro(V)
Caso contrário (valor F), o algoritmo muda o fluxo da
execução e vai para a <continuação do algoritmo>
Algoritmo Verifica5_Versao 1

var a: inteiro;
inicio
escreva(“Entre com um valor: “);
leia(a);
se (a = 5) então {a=5 retornará um valor lógico/booleano}
inicio {Começo do bloco de instruções 1}
escreva(“Condição verdadeira”);
escreva(“O valor é” a);
fim {Término do bloco de instruções 1}
escreva(“Fim do algoritmo”); {continuação do algoritmo}
fim
Analisemos agora o comando se acompanhado da
cláusula senão
se<valor booleano>então
<bloco de instruções 1>
senão
<bloco de instruções 2>
<continuação do algoritmo>

O bloco de instruções 2 que segue a cláusula senão será


executado quando o valor booleano avaliado na condição
for falso(F)
Algoritmo Verifica5_Versao 2
var a: inteiro;
inicio
escreva(“Entre com um valor: “);
leia(a);
se (a = 5) então {a=5 retornará um valor lógico/booleano}
inicio {Começo do bloco de instruções 1}
escreva(“Condição verdadeira”);
escreva(“O valor é” a);
fim {Término do bloco de instruções 1}
senão
inicio {Começo do bloco de instruções 2}
escreva (“Condição Falsa”);
escreva (“O valor não é 5, é” : ,a);
fim {Término do bloco de instruções 2}
escreva(“Fim do algoritmo”); {continuação do algoritmo}
fim
3.1.1 Problema 5 –verificar se uma pessoa é maior
de idade

Faça um algoritmo que leia a idade de uma pessoa e diga-lhe se é


maior de idade ou não. Represente o valor que indica maior de
idade como uma constante que valerá 18.

Quais as variáveis ( e constantes), e os seus tipos vamos usar ??

Como sempre podemos ter mais de uma solução, inclusive em relação


as variáveis que vamos usar.
Algoritmo Maior_Idade

constante LIMITE = 18;


var idade: inteiro;
maior: booleano;
inicio
escreva(“Entre com a idade: “);
leia(idade);
se(idade >= LIMITE) então
maior ← V;
senão
maior ← F;
se(maior) então
escreva(“É maior de idade.”); {Bloco identificável pela endentação}
senão
escreva(“É menor de idade.”); {Bloco identificável pela endentação}
fim
3.1.2 Problema 6 – Ler dois números e determinar
qual é o maior
Faça um algoritmo que leia dois números inteiros e determine qual
dos dois é maior. Considere que os dois números serão diferentes.

Algoritmo Maior_Versão 1
var n1,n2: inteiro;
inicio
escreva(“Ente com o primeiro valor: “);
leia(n1);
escreva(“Entre com o segundo valor: “);
leia(n2);
se(n1 > n2) então
escreva(“ O valor maior é: “, n1);
senão
escreva(“O valor maior é: “, n2);
fim
Exercício Proposto

Faça dois testes de mesa referente ao algoritmo Maior_Versão1.


No primeiro teste, considere que o primeiro número digitado pelo
usuário é maior que o segundo número.
No segundo teste, considere que o segundo número digitado pelo
usuário é maior que o primeiro.
3.1.3 Condições compostas

As condições que vimos até agora sempre foram únicas.

Entretanto, conforme aumenta a complexidade dos problemas a


serem tratados, torna-se necessária a utilização de condições mais
elaboradas

3.1.3.1 Problema 7 – Ler três números e determinar quais são


iguais

Faça um algoritmo que leia três números e determine quantos são


iguais.

Quantas variáveis ??? Que tipo ???


Algoritmo Iguais_Diferentes_Versão1
var n1,n2,n3: inteiro;
inicio
escreva(“Entre com o primeiro valor: “);
leia(n1);
escreva(“Entre com o segundo valor: “);
leia(n2);
escreva(“Entre com o terceiro valor: “);
leia(n3);
se(n1=n2 e n2=n3) então
escreva(“Os três valores são iguais”);
se(n1≠n2 e n1≠n3 e n2≠n3) então
escreva(“ Não há valores iguais”);
se((n1=n2 e n1≠n3) ou (n1=n3 e n1≠n2) ou (n2=n3 e n1≠n2)) então
escreva(“Há dois valores iguais e um diferente”);
escreva(“Fim do programa)
fim
A comparação de três elementos deve ser sempre feita
por meio de conectivos lógicos:

se (n1=n2=n3) então {Errado}

se (n1=n2 e n1=n3 e n2=n3) então {Certo}


Um dos termos anteriores não é necessário, já que a
igualdade é uma operação transitiva.
Portanto, a comparação anterior pode ser representada
das seguintes formas:
se(n1=n2 e n2=n3) então
se(n1=n2 e n1=n3) então
se(n1=n3 e n2=n3) então
Cuidado ao se fazer comparações de igualdades com
valores reais(tamanho da palavra no computador e
truncamento).

Por exemplo:
O programa faz umas contas, em que pela lógica as
variáveis a e b seriam iguais, e resulta em:

a=3.4356 b=3.4355

Se ( a=b) vai dar diferente, mas pela lógica seria igual.


Isso é um BUG....
3.1.4 Comandos de condição encadeados
Quando o bloco de instruções subordinado ao comando se/senão
contém outro(s) comando(s) se/senão, temos o encadeamento (ou
aninhamento) de comandos de decisão

se<valor booleano>então
<bloco de instruções 1>
senão se <valor booleano> então
<bloco de instruções 2>
senão se <valor booleano> então
<bloco de instruções 3>
senão se <valor booleano> então
.......
<continuação do algoritmo>
Esse tipo de construção é muito útil quando sabemos
que em um conjunto de condições apenas uma delas
será verdadeira. Vejamos uma nova implementação do
problema 7, desta vez utilizando comandos encadeados.
Algoritmo Iguais_Diferentes_Versão2
var n1,n2,n3: inteiro;
inicio
escreva(“Entre com o primeiro valor: “);
leia(n1);
escreva(“Entre com o segundo valor: “);
leia(n2);
escreva(“Entre com o terceiro valor: “);
leia(n3);
se(n1=n2 e n2=n3) então
escreva(“Os três valores são iguais”);
senão se(n1≠n2 e n1≠n3 e n2≠n3) então
escreva(“ Não há valores iguais”);
senão
escreva(“Há dois valores iguais e um diferente”);
escreva(“Fim do programa)
fim
Veja que a última condição (dois números iguais e um diferente) não
foi colocada nesta versão.
De fato, não há necessidade de se averiguar essa possibilidade
porque as outras possibilidades já foram testadas anteriormente e, se
elas não tiverem sido verdadeiras, os números são, necessariamente,
dois iguais e um diferente.

Análise dos algoritmos


Quanto a precisão e eficiência
Eficiência: no tempo e no espaço
Devido as condições tecnológicas atuais a eficiência no tempo é
+ importante que no espaço. Porque ????
Fazendo-se o teste de mesa para as duas versões verifica-se que para
a primeira versão são executadas 11 instruções e para a segunda
versão são executadas 9 instruções.
Faça uma análise dos dois algoritmos
Algoritmo Iguais_Diferentes_Versão3
var n1,n2,n3: inteiro;
inicio
escreva(“Entre com o primeiro valor: “);
leia(n1);
escreva(“Entre com o segundo valor: “);
leia(n2);
escreva(“Entre com o terceiro valor: “);
leia(n3);
se(n1=n2 ) então
se(n2=n3) então
escreva(“Os três valores são iguais”);
senão
escreva(“Há dois valores iguais e um diferente”);
senão
se(n1=n3) então
escreva(“Há dois valores iguais e um diferente”);
senão se (n2 = n3) então
escreva(“Há dois valores iguais e um diferente”);
senão
escreva(“Todos os valores são diferentes”);
escreva(“Fim do programa)
fim
Nesta implementação, não usamos condições compostas.
Por isso , para lidar com a complexidade do problema, tivemos que
fazer uma série de comandos de decisão encadeados.

Exercícios propostos:
1. Faça dois testes de mesa referentes ao algoritmo da versão 2.
No primeiro teste, considere que dois dos três números são
iguais.No segundo teste, considere que todos os números são
diferentes.
2. Faça os mesmos testes de mesa para o algoritmo da versão
3.Compare o número de instruções executadas nas duas versões
e análise a eficiência dos dois algoritmos
3.1.4.1 Problema 8 (adptação do problema 6)

Faça um algoritmo que leia dois números inteiros e determine qual


dos dois números é maior.Considere que os dois números podem ser
iguais.Nesse caso, o algoritmo deve escrever uma mensagem para o
usuário informando-o de que deve entrar com números diferentes.
Algoritmo Maior_Versão2

var n1,n2: inteiro;


inicio
escreva(“Entre com o primeiro valor: “);
leia(n1);
escreva(“Entre com o segundo valor: “);
leia(n2);
se(n1 = n2) então
escreva(“Os valores devem ser diferentes!
Execute o programa novamente.”);
senão se (n1>n2) então
escreva(“O valor maior é: “, n1);
senão
escreva(“O valor maior é: “, n2);
fim
3.2 Comando caso

O comando caso pode ser visto como uma especialização do comando


se. Foi criado para facilitar um uso particular de comandos se
encadeados. A sintaxe do comando caso é:

caso<valor inteiro/caractere> seja


<primeiro valor inteiro/caractere>
<bloco de instruções>
<segundo valor inteiro/caractere>
<bloco de instruções>
.....
default:
<bloco de instruções final>
O comando caso equivale à sequencia de comandos se encadeados:

se<valor testado>=<primeiro valor) então


<bloco de instruções>
senão se <valor testado>=<segundo valor) então
<bloco de instruções>
senão se ....

senão
<bloco de instruções final>
3.2.1 Problema 9 – Identificar se um número é 1,5 ou 10

Faça um algoritmo capaz de identificar se um número é igual a 1,5


ou 10. Caso não seja nenhum desses valores, retornar a mensagem
“Valor inválido”.
Algoritmo Exemplo_Caso

var n1: inteiro;


inicio
escreva(“Entre com o valor a ser testado: “);
leia(n1);
caso n1 seja:
1:
escreva(“Valor introduzido é válido: 1”);
5:
escreva(“Valor introduzido é válido: 5”);
10:
escreva(“Valor introduzido é válido: 10”);
default:
escreva(“Valor inválido: “,n1);
fim
O uso do caso é particularmente interessante para a
construção de algoritmos que executem várias funções
e o usuário precise determinar qual operação deva ser
executada.

Esse tipo de construção é chamada de MENU.


3.2.2 Problema 10 – Identificar se um número é par,
positivo ou ano bissexto

Faça um algoritmo capaz de identificar se um número é:


1. Par ou ímpar
2. Positivo, negativo ou zero
3. Um ano bissexto – considere que para o ano bissexto basta
que seja divisível por 400. Caso contrário, precisa ser divisível
por 4 e não ser divisível por 100. Faça uma condição
composta que englobe todas as regras para a definição do ano
bissexto.
Caso não seja nenhuma das opções anteriores, o algoritmo deve
retornar uma mensagem informando ao usuário que a
operação solicitada não é válida.
Algoritmo Menu_Identificação

var n1, opcao: inteiro;


inicio
escreva(“Entre com o valor a ser testado: “);
leia(n1);
escreva(“Você pretende identificar se o número é: “);
escreva(“Opção 1: Par ou ímpar : “);
escreva(“Opção 2: Positivo ou negativo : “);
escreva(“Opção 3: Bissexto : “);
leia(opcao);
caso opcao seja:
1:
se((n1 resto 2) = 0) então
escreva(“Número par.”);
senão
escreva(“Número ímpar.”);
2:
se(n1>0) então
escreva(“Número positivo”);
senão se (n1<0) então
escreva(“Número negativo”);
senão
escreva(“Número zero.”);
3:
se ((n1 resto 4 = 0 e n1 resto 100 ≠ 0)
ou (n1 resto 400 = 0)) então
escreva(“Ano bissexto.”);
senão
escreva(“Ano não é bissexto.”);
default:
escreva(“Opção inválida.”);
fim
3.3 Exercícios do capítulo

Pagina 55 do livro do Medina( são 7)

3.4 Exemplos em Linguagem C

Livros do Medina, Lago e outros.

Você também pode gostar