Comando If...Then...Else


Estrutura Condicional
Essa estrutura é conhecida também como estrutura de decisão ou de seleção, ela se caracteriza por execução de determinados códigos de programação dependendo da veracidade de uma condição. Neste tópico será apresentado as estruturas de condição simples, composta, aninhada (uma dentro da outra) e a estrutura Case.

Estrutura Condicional - Simples
Sintaxe:
  SE condição
  ENTÃO comando
Notas: O comando só será executado se a condição for verdadeira. Uma condição é uma comparação que possui dois valores possíveis, verdadeiro ou falso.
Sintaxe:
  SE condição
  ENTÃO INÍCIO
     comando1                
     comando2
     comando3
        FIM

Notas: Aqui o comando também só será executado se a condição for verdadeira, a diferença dos dois exemplos acima é que, quando o número de instruções a serem executadas forem maior que um, então é necessário colocar as instruções dentro de blocos (Begin = INICIO e End = FIM).
§  SE = IF
§  ENTÃO = THEN
§  INÍCIO = BEGIN
§  FIM = END
Exemplo com apenas uma instrução:
   Uses Crt;

   var X, Y : Integer;

   begin
     Writeln ('Entre com dois Números:'); { Mostra na tela a mensagem}
     Readln (X, Y); { Lê os dois números }
     If (X > Y) Then {Condição - SE X for maior que Y}
       Writeln ('X é Maior que Y, e seu valor é = ', X);
   end.
Exemplo com mais de uma instrução:
   uses Crt;

   var X, Y : Integer;

   begin
     Writeln ('Entre com dois Números:'); { Mostra na tela a mensagem}
     Readln (X, Y); { Lê os dois números }
     If (X = Y) Then {Condição - SE X for igual a Y}
     Begin  {INICIO - Repare abaixo que existe duas instruções, dois comandos Writeln, por isso estão entre BEGIN e END}
       Writeln ('X é igual que Y');
       Writeln ('O Valor de X é =', X);
     End; {FIM}
   end.
Exemplo utilizando operadores Lógicos:
   uses Crt;

   var X, Y : Integer;

   begin
     Writeln ('Entre com dois Números:'); { Mostra na tela a mensagem}
     Readln (X, Y); { Lê os dois números }
     If ((X > Y) And (Y <> 0)) Then {Condição - SE X for maior que Y E Y diferente de 0 - Repare no And}
     Begin  {INICIO - Repare abaixo que existe três instruções, três comandos Writeln, por isso estão entre BEGIN = INICIO e END = FIM}
       Writeln ('X é Maior que Y');
       Writeln ('Y é diferente de 0');
       Writeln ('O Valor de X é =', X);
     End; {FIM}
   end.
Notas: Repare no operador Lógico AND, só serão executados os comandos Writeln, se as duas condições forem verdadeiras. Se a variável X for maior que a variável Y e se a variável Y for diferente de 0 (zero).
Exemplo utilizando operadores Lógicos:
   uses Crt;

   var X, Y : Integer;

   begin
     Writeln ('Entre com dois Números:'); { Mostra na tela a mensagem}
     Readln (X, Y); { Lê os dois números }
     If ((X > Y) Or (Y <> 0)) Then {Condição - SE X for maior que Y OU Y diferente de 0 (zero)- Repare no Or}
     Begin  {INICIO - Repare abaixo que existe três instruções, três comandos Writeln, por isso estão entre BEGIN = INICIO e END = FIM}
       Writeln ('X é Maior que Y');
       Writeln ('Y é diferente de 0');
       Writeln ('O Valor de X é =', X);
     End; {FIM}
   end.
Notas: Nesse caso acima utilizando o Operador Lógico OR (OU), serão executados os comandos Writeln, se uma das duas condições forem verdadeira. Se a variável X for maior que a variável Y OU Se a variável Y for diferente de 0 (zero).
Estrutura Condicional - Composta
Sintaxe:
  SE condição
  ENTÃO comando1
  SENÃO comando2
    
Notas: O comando1 só será executado se a condição for verdadeira, caso contrário, se a condição for falsa, será executado ocomando2.
Sintaxe:
  SE condição
  ENTÃO INÍCIO
     comando1               
     comando2
     comando3
        FIM
  SENÃO INÍCIO
     comando4
     comando5      
        FIM 
§  SE = IF
§  ENTÃO = THEN
§  SENÃO = ELSE
§  INÍCIO = BEGIN
§  FIM = END
Exemplo com apenas uma instrução:
   Uses Crt;

   var X, Y : Integer;

   begin
     Writeln ('Entre com dois Números:'); { Mostra na tela a mensagem}
     Readln (X, Y); { Lê os dois números }
     If (X > Y) {Condição - SE X for maior que Y}
       Then Writeln ('X é Maior que Y, e seu valor é = ', X) {Entra nesse comando apenas se X for maior que Y - Repare que antes de ELSE não vai ";"}
       Else Writeln ('Y é maior ou igual a X, seu valor é = ',Y); {Entra nesse comando se Y for maior ou igual a X}
   end.
Exemplo com mais de uma instrução:
   Uses Crt;

   var X, Y : Integer;

   begin
     Writeln ('Entre com dois Números:'); { Mostra na tela a mensagem}
     Readln (X, Y); { Lê os dois números }
     If (X > Y) {Condição - SE X for maior que Y}
     Then Begin
            Writeln ('X é Maior que Y');
            Writeln ('O valor de X é =', X);  
          End       { Repare que não tem ponto e vírgula por que "End" está antes do "Else"}
     Else Begin
            Writeln ('Y é Maior ou Igual a X');
            Writeln ('O valor de Y é =', Y);
          End;
   end.        { Sempre no "End" do programa principal vai ponto final ".", e não ponto e virgula ";"}

Estrutura Condicional Aninhada
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.

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.