"É melhor praticar para a nota" - Como avaliar comportamentos em contextos de...
Capítulo 07 Livro Algoritmos e Programação de Computadores Autores JR., Dilermando
1. Objetivos:
• Utilizar comandos condicionais
aninhados (um dentro do outro).
• Utilizar comando de seleção – lista de
possibilidades.
2. Para começar...
Dependendo do problema que temos que resolver, nosso
algoritmo pode necessitar de comandos condicionais mais
complexos.
Por exemplo, um comando condicional dentro de outro.
Quando isso acontece é dito ser comandos aninhados.
A necessidade de compor um comando condicional dentro
de outro surge de acordo com o problema.
3. Para começar...
Considere o problema, visto anteriormente, que calcula a média do aluno e
imprime se ele está aprovado ou reprovado.
Vamos determinar algumas palavras complementares ao desempenho do aluno
de acordo com a média que o aprovou.
Assim, se a media for maior ou igual a 5 (cinco), além de imprimir a palavra
APROVADO, vamos imprimir:
se a média for 10, vamos imprimir “com LOUVOR”;
se a média for menor do que 10 e maior ou igual a 8, vamos imprimir “com
MÉRITO”;
e, se for menor do que 8 e maior ou igual a 6, vamos imprimir “com DESTAQUE”.
6. Para começar...
Em alguns casos de comandos condicionais aninhados é
possível substituí-los por um comando que faz uma escolha
a partir de uma lista de opções.
Esse comando de seleção é considerado um comando
condicional. A comparação é feita somente no caso da
igualdade, porém podemos listar uma série de valores para
a comparação e, a partir de um deles, quando igual,
executar um ou um conjunto de comandos.
7. Para começar...
Em muitos casos ele é preferido pelos programadores no
lugar do comando condicional se, pelo aspecto visual e de
organização que proporciona ao algoritmo ou programa.
Para esse mesmo exemplo, vamos utilizar o comando de
seleção para comparar o formato de cada um deles. Repare
no nosso exemplo que a variável média é utilizada nos
quatro comandos condicionais. O que difere um do outro é
a constante que ela é comparada.
8. Para começar...
escolha média
caso 10 : Escreva “Aprovado com Louvor”
caso 8,9: Escreva “Aprovado com Mérito”
caso 6,7: Escreva “Aprovado com Destaque”
caso 5 : Escreva “Aprovado”
outrocaso: Escreva “Reprovado” qualquer outra nota
diferente das anteriores
fimescolha
9. Para começar...
O resultado produzido pelos dois comandos é o mesmo.
De modo geral, o comando de seleção inicia com um
nome que o caracteriza:
escolha em VisuAlg;
case em Pascal;
switch em C, JAVA e PHP.
10. Conhecendo a teoria para programar
VisuAlg – Comando de Seleção
sintaxe:
escolha <expressão-de-seleção>
caso1 <exp11>, <exp12>, ..., <exp1n>
<sequência-de-comandos-1>
caso2 <exp21>, <exp22>, ..., <exp2n>
<sequência-de-comandos-2>
...
outrocaso
<sequência-de-comandos-extra>
fimescolha
11. Conhecendo a teoria para programar
VisuAlg – Comando de Seleção
análise do comando:
o bloco do comando de seleção começa com a palavra-chave escolha e
termina com fimescolha;
a palavra-chave outrocaso será escolhida se nenhum dos casos listados
anteriormente atender à escolha. Como se fosse um “curinga”. Ele não
precisa ser utilizado se o problema não exigir;
a expressão de seleção deve ser de um dos tipos: caractere, inteiro ou
lógico;
não utiliza ponto-e-vírgula no final de cada linha de comando.
12. Conhecendo a teoria para programar
PASCAL – Comando de Seleção
sintaxe:
case expressão-de-seleção of
constante1: comando;
constante2: comando;
...
constanten: comando;
else
comando;
end;
13. Conhecendo a teoria para programar
PASCAL – Comando de Seleção
análise do comando:
o bloco do comando de seleção começa com a palavra-chave case e
termina com a palavra chave end;
após a expressão de seleção é necessário o uso da palavra-chave of;
cada um dos casos, a constante é seguida por dois-pontos (:);
a expressão de seleção pode ser de qualquer tipo escalar, só não pode
ser do tipo real;
há um ponto-e-vírgula no final da linha de comando.
14. Conhecendo a teoria para programar
PASCAL – Comando de Seleção
análise do comando (continuação):
a palavra-chave else no comando de seleção é para quando nenhum
outro caso atendeu a expressão de seleção. Tem a mesma função do
outrocaso da linguagem algorítmica VisuAlg. Entretanto, se o
compilador que você está usando é o Pascal padrão, não há esse caso.
Assim sendo, é necessário listar todas as opções ou completar com
comando condicional;
se em um caso for necessário executar um conjunto de comandos é
preciso abrir um bloco de comandos com a palavra begin e terminar
com end.
15. Conhecendo a teoria para programar
PASCAL – Comando de Seleção
Exemplo:
case expressão-lógica of
constante1 : begin
comando;
comando;
end;
constante2 : comando;
end; {fim do case}
16. Conhecendo a teoria para programar
C – Comando de Seleção
sintaxe:
switch (expressão-de-seleção) {
case constante1:
sequência de comandos
break;
case constante2:
sequência de comandos
break;
...
default:
sequência de comandos
}
17. Conhecendo a teoria para programar
C – Comando de Seleção
análise do comando:
a expressão de seleção deve estar entre parênteses e deve ser do tipo inteiro ou
caractere;
o bloco do comando de seleção deve estar entre chaves “{ }”;
é necessário o uso da palavra case em cada um dos casos listados;
a palavra-chave default é utilizada para o caso “curinga”. Isto é, para todos os
outros casos que não foram listados nos casos anteriores. É opcional;
as constantes listadas nos casos, devem ser seguidas por dois-pontos, inclusive
após a palavra-chave default;
cada caso pode ter um ou um conjunto de comandos, não necessitando de
chaves para o conjunto de comandos.
18. Conhecendo a teoria para programar
JAVA – Comando de Seleção
sintaxe:
switch (expressão-de-seleção) {
case constante1:
sequência de comandos
break;
case constante2:
sequência de comandos
break;
...
default:
sequência de comandos
}
19. Conhecendo a teoria para programar
JAVA – Comando de Seleção
análise do comando:
a sintaxe do comando de seleção é igual à do C, incluindo o uso do
break e do default;
a expressão de seleção pode ser também uma cadeia de caracteres
(string).
20. Conhecendo a teoria para programar
PHP – Comando de Seleção
sintaxe:
switch (expressão) {
case constante1:
sequência de comandos
break;
case constante2:
sequência de comandos
break;
...
default:
sequência de comandos
}
21. Conhecendo a teoria para programar
PHP – Comando de Seleção
análise do comando:
a sintaxe do comando de seleção também é igual à do C,
incluindo o uso do break e do default;
a expressão de seleção pode ser também uma cadeia de
caracteres (string);
22. Vamos Programar
Comandos Condicionais Aninhados
Descrição do Problema:
Classificação de um triângulo a partir das medidas de seus
lados. Considere as medida dos lados de um triângulo,
denominados de A, B e C. Sabe-se da geometria que:
se os três lados, A, B e C forem iguais então o triângulo é
equilátero;
se dois lados forem iguais e um diferente então o triângulo é
isósceles;
e, se os três lados forem diferentes entre si então o triangulo é
escaleno.
23. Vamos Programar
Comandos Condicionais Aninhados
Há ainda uma premissa inicial:
saber se as três medidas podem formar um triângulo.
A regra para saber se com três medidas podemos formar um triangulo é
dada por:
se cada um dos lados é menor do que a soma dos outros dois. Se
um dos lados não for menor então as medidas não podem formar
um triângulo.
O algoritmo deve então ler três medidas, verificar se formam um
triângulo e, em caso afirmativo, qual o tipo de triângulo:
equilátero, isóscele ou escaleno.
25. Vamos Programar
VisuAlg:
var
A,B,C: inteiro
inicio
escreva("Digite as medidas dos lados de um triângulo: ")
leia(A, B,C)
se (A < B+C) e (B < A+C) e (C < A+B) entao
escreva("As medidas: ", A,", ", B,", ", C," formam um triângulo ")
se (A = B) e (A = C) entao
escreval("EQUILATERO.")
senao
se (A = B) ou (A = C) ou (B = C) entao
escreval("ISOSCELES.")
senao
escreval("ESCALENO.")
fimse
fimse
senao
escreval("As medidas: ", A,", ", B,", ", C," NÃO formam um triângulo!")
fimse
fimalgoritmo
26. Vamos Programar
PASCAL:
program Triangulo;
A, B, C: integer;
begin
write(‘Digite as medidas dos lados de um triangulo: ‘);
read(A, B, C);
if (A < B+C) and (B < A+C) and (C < A+B)
then begin
write (‘As medidas: ‘, A,’, ‘, B,’, ‘, C,’ formam um triangulo ‘);
if (A = B) and (A = C) then
writeln(‘EQUILATERO.’)
else
if (A = B) or (A = C) or (B = C) then
writeln (‘ISOSCELES.’)
else
writeln (‘ESCALENO.’)
end else
writeln (‘As medidas: ‘, A,’, ‘, B,’, ‘, C,’ NAO formam um triangulo!’)
end.
27. Vamos Programar
C:
void main()
{
int A, B, C; // Declaração das variáveis
printf("Digite as medidas dos lados de um triangulo: ");
scanf(“%d %d %d”,&A, &B, &C);
if (A<B+C && B<A+C && C<A+B) {
printf("nnAs medidas: %d, %d, %d formam um triangulo ", A,B,C);
if (A == B && A == C)
printf("EQUILATERO.n");
else
if (A == B ||A == C || B == C)
printf("ISOSCELES.n");
else
printf("ESCALENO.n");
} else
printf("nnAs medidas: %d, %d, %d NAO formam um triangulo ", A,B,C);
}
28. Vamos Programar
Java:
import java.util.*;
public class Triangulo {
public static void main (String[] arg) {
int A, B, C;
Scanner entrada_dado = new Scanner (System.in);
System.out.print("Digite tres lados de um triangulo (inteiros): ");
A = entrada_dado.nextInt();
B = entrada_dado.nextInt();
C = entrada_dado.nextInt();
if (A<B+C && B<A+C && C<A+B){
System.out.print("As medidas: "+A+", "+B+", "+C+" formam um triangulo ");
if (A == B && A == C)
System.out.print("EQUILATERO.n");
else
if (A == B ||A == C || B == C)
System.out.print("ISOSCELES.n");
else
29. Vamos Programar
Java (continuação):
System.out.print("As medidas: "+A+", "+B+", "+C+" formam um triangulo ");
if (A == B && A == C)
System.out.print("EQUILATERO.n");
else
if (A == B ||A == C || B == C)
System.out.print("ISOSCELES.n");
else
System.out.print("ESCALENO.n");
}
else
System.out.print("As medidas: "+A+", "+B+", "+C+" NAO formam um
triangulo!");
}}
30. Vamos Programar
PHP:
<?php
$A = $_POST[“lado_1”];
$B = $_POST[“lado_2”];
$C = $_POST[“lado_3”];
if (A<B+C && B<A+C && C<A+B) {
echo ("As medidas: ", A,", ", B,", ", C," formam um triangulo ");
if (A == B && A == C)
echo("EQUILATERO.n");
else
if (A == B ||A == C || B == C)
echo("ISOSCELES.n");
else
echo("ESCALENO.n");
}
else
echo("As medidas:", A,", ", B,", ", C," NAO formam um triangulo!");
?>
31. Vamos Programar
Comandos de Seleção
Construir uma calculadora muito simples, com apenas as
quatro operações aritméticas: +, -, *, / .
Para a construção da nossa calculadora, vamos precisar de
três dados de entrada: dois números e a operação que
queremos executar. Como saída, teremos o resultado da
operação desejada.
32. Vamos Programar
VisuAlg:
var
A,B: real
op : caractere
inicio
escreva(“Digite dois números (reais ou inteiros) e a operação (+,-,*,/): ”)
leia(A, B, op)
escolha op
caso “+” escreval( A, op, B, “ = ”, A+B)
caso “-” escreval( A, op, B, “ = ”, A-B)
caso “*” escreval( A, op, B, “ = ”, A*B)
caso “/” se B = 0 entao
escreval(“Operação não pode ser executada”)
senao escreval( A, op, B, “ = ”, A/B)
outrocaso
escreval(“Operação Inválida”);
fimescolha
fimalgoritmo
33. Vamos Programar
PASCAL:
var
A, B: real;
op : char;
begin
write(‘Digite dois numeros (reais ou inteiros) e a operação (+,-,*,/): ’);
read(A, B, op);
case op of
‘+’ :writeln(A, op, B, ‘ = ’, A+B);
‘-’ : writeln(A, op, B, ‘ = ’, A-B);
‘*’ : writeln(A, op, B, ‘ = ’, A*B);
‘/’ : if B = 0 then
writeln(‘A operacao nao pode ser executada ’);
else
writeln(A, op, B, ‘ = ’, A/B);
end; {fim do if}
else writeln(‘Operacao Invalida’);
end; { fim do case}
end.
34. Vamos Programar
C:
void main()
{
float A, B;
char op;
printf("Digite dois numeros (reais ou inteiros) e a operacao (+,-,*,/): ");
scanf("%f %f %c", &A, &B, &op);
switch (op) {
case '+' : printf("%.1f %c %.1f = %.1fn", A, op, B, A+B); break;
case '-' : printf("%.1f %c %.1f = %.1fn", A, op, B, A-B); break;
case '*' : printf("%.1f %c %.1f = %.1fn", A, op, B, A*B); break;
case '/' : if (B == 0)
printf("A operacao nao pode ser executada");
else printf("%.1f %c %.1f = %.2fn", A, op, B, A/B);
break;
default : printf("Operacao Invalida");
} // fim do switch-case
printf("nnnn");
} // fim do programa
35. Vamos Programar
Java:
import java.util.*;
public class Calculadora {
public static void main (String[] arg){
int A, B;
char op;
String s, Saida = "";
Scanner entrada_dado = new Scanner (System.in);
System.out.print("Digite dois operandos e a operação (+,-,*,/): ");
A = entrada_dado.nextInt(); B = entrada_dado.nextInt(); s =
entrada_dado.next();
op = s.charAt(0); //usado com string – você verá com detalhes em
capítulo próximo
36. Vamos Programar
Java (continuação):
switch (op) {
case '+' : Saida += +A+ " + "+B+" = "+(A+B); break;
case '-' : Saida += +A+ " - "+B+" = "+(A-B); break;
case '*' : Saida += +A+" * "+B+" = "+(A*B); break;
case '/' : { if (B == 0)
Saida = "A operacao nao pode ser executada";
else
Saida +=A+" / "+B+(A/B);
break;}
default : Saida = "Operacao Invalida";
} // fim do switch-case
System.out.print(Saida);
}
}
37. Vamos Programar
PHP:
<?php
$A = $_POST[“operando_1”];
$B = $_POST[“operando_2”];
$OP = $_POST[“operacao”];
switch ($OP) {
case ‘+’ : echo “A + B = ($A+$B)”; break;
case ‘-’ : echo “A – B = ($A-$B)”; break;
case ‘*’ : echo “A * B = ($A*$B)”; break;
case ‘/’ : if ($B == 0)
echo “A operacao nao pode ser executada”;
else
echo “$A / $B = ($A/$B)”;
break;
default: echo “Operacao invalida”;
} // fim do switch-case
} // fim do programa
?>
38. O próximo desafio é trabalhar com processos repetitivos. Os
comandos repetitivos nos permitem executar várias vezes
uma mesma ação sem ter que executar novamente o
programa. Por exemplo, calcular a média de um conjunto de
alunos ou repetir a entrada de um dado em caso de erro.