Você está na página 1de 36

LGICA DE PROGRAMAO: ESTRUTURAS DE DECISO(SELEO) ANINHADAS E CASE OF.

Professor: Hilton Prado de Castro Junior

AGENDA
Decises Aninhadas Decises sem Aninhamento Estrutura CASE

DECISES ANINHADAS

So estruturas de deciso que possuem em seus ramos (seja no ramo then ou no ramo else) outros nveis de deciso. Exemplo de modelo: if <cond1> then comando1 else if <cond2> then comando2; Somente se o primeiro teste produzir F, o segundo ser feito.
F V

Cond 1

Comando 1

Cond 2
F

Comando 2

DECISES ANINHADAS

So estruturas de deciso que possuem em seus ramos (seja no ramo then ou no ramo else) outros nveis de deciso.
F V

Ou...

Cond 1

if <cond1> then comando1 else if <cond2> then comando2 else comando3;

Comando 1

Cond 2
F

Comando 3

Comando 2

DECISES ANINHADAS

Exemplo: Determinar o maior entre dois nmeros, sabendo-se que eles podem ser iguais. read(n1,n2); if n1>n2 then write('Maior: ',n1) else

if n2>n1 then write('Maior: ',n2);


else write('Nmeros so iguais');
5

DECISES ANINHADAS

Exemplo: Determinar o maior entre dois nmeros, sabendo-se que eles podem ser iguais.
F V

n1>n2

Write (n1)

n2>n1
F

Write( Iguais);

Write (n2)

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
7

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros:

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
8

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 3 5

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
9

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 3 5

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
10

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 3 5

if n2>n1 then write('Maior: ',n2);

n1

n2

else write('Nmeros so iguais');


End;

5
11

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 3 5

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
12

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 3 5 Maior: 5

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
13

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
14

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros:

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
15

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 5 5

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
16

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 5 5

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
17

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 5 5

if n2>n1 then write('Maior: ',n2);

n1

n2

else write('Nmeros so iguais');


End;

5
18

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 5 5

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
19

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 5 5

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
20

n1

n2

DECISES ANINHADAS
Program maior; var n1,n2: integer; begin write(Entre com 2 nmeros: '); readln(n1,n2); if n1>n2 then write('Maior: ',n1) else Entre com 2 nmeros: 5 5 Nmero so iguais

if n2>n1 then write('Maior: ',n2); else write('Nmeros so iguais');


End;
21

n1

n2

DECISES ANINHADAS

Alternativa sem aninhamento; Problema!!

n1>n2

read(n1,n2);
if n1>n2 then write('Maior: ',n1); if n2>n1 then write('Maior: ',n2);
n1=n2

Write (n1)

n2>n1

Write (n2)

if n1=n2 then write('Nmeros so iguais');

Write (iguais)

22

DECISES ANINHADAS

Determinao do maior entre 3 nmeros diferentes... read(n1,n2,n3); Lembrar que antes de else, o uso de pontoe-vrgula proibido em Pascal...

if n1>n2 then
if n1>n3 then write('Maior: ',n1) else write('Maior: ',n3) else {n2>n1}

if n2>n3 then
write('Maior: ',n2)

Temos um nico ponto-e-vrgula que encerra o bloco.

else write('Maior: ',n3);


23

DECISES ANINHADAS

Determinao do maior entre 3 nmeros diferentes...

24

DECISES ANINHADAS

Formao de blocos read(n1,n2,n3); if n1>n2 then begin if n1>n3 then write('Maior: ',n1) else write('Maior: ',n3) end else {n2>n1} begin if n2>n3 then write('Maior: ',n2) else write('Maior: ',n3) end;

Opcionalmente, podem ser empregados blocos (com certo ganho de clareza)...

25

DECISES ANINHADAS

Alternativa sem aninhamento;

read(n1,n2,n3); if (n1>n2) and (n1>n3) then write('Maior: ',n1); if (n2>n1) and (n2>n3) then write('Maior: ',n2); if (n3>n1) and (n3>n2) then write('Maior: ',n3); A soluo acima (3 comandos curtos) leva certa vantagem em termos de simplicidade...
26

DECISES ANINHADAS

Contudo, preciso estar consciente de que na soluo aninhada, no mximo dois testes sero realizados, em qualquer caso.
27

ESTRUTURA CASE

Consiste de uma expresso seletora e de uma lista de comandos, que sero executados conforme a avaliao da condio seletora. case <expresso> of <opo1>: comando1; <opo2>: comando2; ... <opoN>: comandoN; end; Se <expresso> casar com <opo1>, o primeiro comando ser executado (e o case encerra). Caso contrrio, se <expresso> casar com <opo2>, o segundo comando ser executado (e o case encerra).
28

ESTRUTURA CASE

Consiste de uma expresso seletora e de uma lista de comandos, que sero executados conforme a avaliao da condio seletora. case <expresso> of <opo1>: comando1; <opo2>: comando2; ... <opoN>: comandoN; end; Se <expresso> casar com <opo1>, o primeiro comando ser executado (e o case encerra). Caso contrrio, se <expresso> casar com <opo2>, o segundo comando ser executado (e o case encerra).
29

ESTRUTURA CASE
var Op: char; begin write('Fornea uma opo: '); readln(Opcao); case Opcao of '1': writeln('Voc escolheu a opo 1'); '2': writeln('Voc escolheu a opo 2'); '3': writeln('Voc escolheu a opo 3'); '4': writeln('Voc escolheu a opo 4'); end; end. Se um desses valores ('1', '2', '3' ou '4') for fornecido na leitura, a mensagem correspondente ser exibida. Caso contrrio, nada acontece.
30

ESTRUTURA CASE

Clusula Else case <expresso> of <opo1>: comando1; <opo2>: comando2; ... <opoN>: comandoN; else comandoExceo; end;

O comandoExceo ser executado sempre que no houver casamento da <expresso> com nenhuma das opes.
31

ESTRUTURA CASE
var Op: char; begin write('Fornea uma opo: '); readln(Opcao); case Opcao of '1': writeln('Voc escolheu a opo 1'); '2': writeln('Voc escolheu a opo 2'); '3': writeln('Voc escolheu a opo 3'); '4': writeln('Voc escolheu a opo 4') else writeln('Opo invlida') end; end.
32

ESTRUTURA CASE
Obs: Cada opo pode consistir de: faixas de constantes, indicadas por reticncias (..), ou uma ou mais constantes/faixas, separadas por vrgulas;

var Ch: char; begin write('Digite um caractere: '); read(Ch); write('Voc digitou '); case Ch of 'A'..'Z', 'a'..'z': writeln('uma letra'); '0'..'9' : writeln('um dgito'); '+', '-', '*', '/': writeln('um operador') else writeln('um caractere especial') end;
33

ESTRUTURA CASE

Case versus selees aninhadas


write('Fornea a idade da pessoa: '); readln(Idade); write('A pessoa '); if Idade <= 3 then write('um beb.') else if Idade <= 10 then write('uma criana.') else if Idade <= 18 then write('um adolescente.') else write('um adulto.');

34

ESTRUTURA CASE

Case versus selees aninhadas


write('Fornea a idade da pessoa: '); readln(Idade); write('A pessoa '); case Idade of 0..3 : write('um beb.'); 4..10 : write('uma criana.'); 11..18: write('um adolescente.') else write('um adulto.') end;

As duas construes produzem o mesmo resultado

35

Obrigado pela Ateno!!!

Contato: hilton@meta.edu.br

36

Você também pode gostar