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.

 

 

 

A

B

A^B

V

V

V

F

V

F

F

F

F

V

F

F

 

 

 

 

 

 

 

 

 

 

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.