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
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.
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.