Aula 8
Estrutura Condicional Aninhada
Else Pendente
Estrutura Condicional Aninhada (Voltar ao Índice) |
|||||||||||||||||
|
|
|
|||||||||||||||
|
A estrutura condicional aninhada é semelhante à
estrutura condicional com AND |
||||||||||||||||
|
|
|
|||||||||||||||
|
O if aninhado é simplesmente
um if dentro da declaração de um outro if externo. É necessário saber exatamente a qual if um determinado else
está ligado, para não ocasionar erro na lógica do programa. Exemplos de IF's
aninhados: Uses Crt; Var X, Y, A, B : Integer; Begin Readln (X,Y,A,B); If (X > Y) Then { Entrará no
Próximo If apenas se a variável X for maior que a variavel Y } | If (A > B) | | Then Writeln ('X é maior que Y e A é maior que B') {Sem
";"} | Else Writeln ('A não é Maior que B') {Sem ";"} Else Writeln ('X não é maior que Y'); End. { O caracter
"|" serve para indicar qual IF pertence a qual ELSE} { Repare que
antes do ELSE nao tem ";"} |
Exemplo de IF's aninhados: Uses Crt; Var X, Y, A, B : Integer; Begin Readln (X,Y,A,B); If (X
> Y) Then | If (A
> B) | Then Begin | | | Writeln ('X é
maior que Y e A é maior que B'); | | | Writeln ('O
Valor de X é = ', X); | | | Writeln ('O
Valor de A é = ', A); | | End | Else Begin | | Writeln
('A não é Maior que B'); | | Writeln
('O Valor de B é = ', B); | End Else Writeln ('X não é maior que Y'); End. Notas: Repare que para cada BEGIN
sempre terá um END, e tem que ficar atento sempre em relação a qual ELSE
perfence a qual IF. Os programas acima para
compilá-los é necessários tirar todos os caracteres
"|" (pipe), que foi utilizado para
mostrar a inter-relação entre BEGIN's - END's e IF's - ELSE's. |
|||||||||||||||
|
a) Compila o seguinte programa e
escreve um enunciado para o programa Var nota : Integer; Begin writeln('digite uma nota'); readln(nota); if nota >9 then begin writeln('aprovado'); end; if nota<10 then begin if nota>=8 then begin writeln('recuperaçao'); end; if nota<8 then begin writeln('reprovado'); end; end; readln; End. A1) Tendo em conta que este tipo de abordagem
à função SE é semelhante à utilização de AND. Reescreve o algoritmo
utilizando IF…AND…Then em vez do SE
aninhado. |
|
|||||||||||||||
|
b) Compila o seguinte programa e escreve um enunciado para o programa var { local
variable definition } a, b :
integer; begin a := 100; b:= 200; (* check
the boolean condition *) if (a =
100) then (* if
condition is true then check the following *) if ( b =
200 ) then (* if
nested if condition is true then print
the following *) writeln('Value of a is 100 and value of b is 200' ); writeln('Exact value of a is: ', a ); writeln('Exact value of b is: ', b ); readln; end. |
|
|||||||||||||||
|
c) Compila o seguinte programa e
escreve um enunciado para o programa var nome:string; n1,n2,n3,media:real; f:integer; Begin writeln('Digite os dados do
aluno'); write('Nome: '); readln(nome); write('3 notas: '); readln(n1,n2,n3); if (n1<0) or (n1>10) or (n2<0) or
(n2>10) or (n3<0) or (n3>10) then begin write('Notas inválidas, digite
notas de 0 a 10!'); readln(n1,n2,n3); end; media:=(n1+n2+n3)/3; write('Quantidade de faltas :'); readln(f); if f<0 then begin write('Faltas inválidas!
digite um número maior ou igual a 0!'); readln(f); end; write('O aluno ',nome,' está '); if (media>=5) and (f<18) then write('aprovado com média: ',media:2:2); if media<5 then write('reprovado por
média: ',media:2:2); if f>17 then write('reprovado
por falta: ',f:2); readln; End. |
|
|||||||||||||||
|
d) Compila o seguinte programa e escreve um enunciado para o programa var A,B,C:integer; Begin | clrscr; | writeln('Digite
os lados do triângulo'); | readln(A,B,C); | if
(A<B+C) and (B<A+C) and (C<A+B) then | | begin | | | write('Os números formam os lados de um triângulo '); | |
| if (A=B) and (B=C)and (C=A)
then | | |
| write('equilátero
') |
| | else |
| | | if (A=B) and (A<>C)or (B=C)and
(C<>A)or(A=C)and (A<>B)then |
| | | | write('isósceles') |
| | | else |
| | | | write('escaleno'); | | end | else
write('Os números não formam os lados de um
triângulo'); | readln;
End. |
|
|||||||||||||||
|
e) Compila o seguinte programa e
escreve um enunciado para o programa var {Definição das variáveis saldo, limite e valorADebitar do tipo real} saldo, limite, valorADebitar : real; begin {Atribuição de valores a saldo e limite} saldo := 200; limite := 500; {Solicitar ao utilizador o valor a debitar.} writeln('Qual
o valor a debitar?'); readln(valorADebitar); {Se o saldo somado ao limite for maior que o
valor a debitar, então debite o valorADebitar do
saldo} if (saldo
+ limite > valorADebitar)
then begin saldo := saldo - valorADebitar; writeln('Debito
efetuado com sucesso.'); end {Senão, imprima: 'Saldo Insuficiente'} else begin writeln('Saldo insuficiente.'); end; writeln('Fim
da transacao. retire o cartão'); readln; end. |
|
|||||||||||||||
|
Var nota : Integer; Begin writeln('digite uma nota'); readln(nota); if nota >9 then begin writeln('aprovado'); end else if (nota<10) and (nota>=8) then begin writeln('recuperaçao'); end else begin writeln('reprovado'); end; readln; End. |
|
|||||||||||||||
ENVIAR AO PROFESSOR (PROFCARLOS2006@GMAIL.COM) Enunciados a; b; c; d; e. Programas A1. (Voltar ao Índice) |
Else Pendente (Voltar ao Índice) |
||
|
|
|
|
|
|
|
|
|
|
Else pendente acontece
quando ele se encontra "perdido" dentro do código, ou seja, ele não
sabe a qual If pertence. Exemplo de Else pendente: Uses Crt; Var X, Y, A, B : Integer; Begin Readln (X,Y,A,B); If (X
> Y) Then If (A
> B) Then Writeln ('A é maior que
B') Else Writeln
('A não é Maior que B'); End. Notas: O compilador adota que o Else sempre será do If mais interno.
|
Exemplo de como resolver o problema do Else pendente: Uses Crt; Var X, Y, A, B : Integer; Begin Readln (X,Y,A,B); If (X
> Y) Then Begin If (A
> B) Then Writeln ('A é maior que
B') Else Writeln
('A não é Maior que B'); End; End. Notas: Para que não haja duvidas a
qual If o Else
pertence utilize os
delimitadores BEGIN - END. |
|
|
|
|
|
|
|