Pascal/Estrutura Condicional
Estrutura Condicional
editarEssa 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 são apresentadas as estruturas de condição simples, composta, aninhada (uma dentro da outra) e a estrutura Case.
Estrutura Condicional - Simples
editarSintaxe:
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 ('Digite 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
editarSintaxe:
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 o comando2.
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
editarO 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
editarElse 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.
Estrutura Case
editarO comando CASE é importante para a estruturação de um programa que possua diversas opções de execução, tornando-o bem legivel e estruturado, evitando o uso do IF de forma repetida. O comando CASE trás junto com ele uma restrição, onde, seletor tem que ser do tipo char, integer ou boolean.
Sintaxe:
CASE seletor OF alvo1 : comando1; alvo2 : comando2; alvo3 : comando3; END;
Sintaxe:
CASE seletor OF alvo1 : BEGIN ... instruções ... END; alvo2 : comando2; alvo3 : BEGIN ... instruções ... END; ELSE comando4; END;
Exemplo:
{ Um simples exemplo de como se trabalha com a Estrutura Case }
Uses Crt;
Var X : Integer;
Begin
Readln (X);
Case X Of
1 : Writeln ('Ola Mundo'); { E o valor de X for igual a 1, irá executar essa linha }
2 : Writeln ('GNOIA'); { X = 2, essa linha será executada }
3 : Writeln ('Software Livre'); { X = 3 - essa linha será executada }
End;
End.
Exemplo:
Uses Crt;
Var Y, X : Integer;
Begin
Readln (X, Y);
Case X Of
1 : Begin
Y := 4;
Writeln ('Entrou no Primeiro alvo');
End;
2 : Begin
Y := 3;
Writeln ('Entrou no Segundo alvo');
End;
3 : Writeln ('Entrou no Terceiro alvo');
Else Writeln ('Entrou no Else');
End;
End.
Exercícios
editar01- Faça um programa para ler três números e escrever se estes podem ou não formar um triângulo. Observação – Para formar os lados de um triângulo cada um dos valores tem que ser menor que a soma dos outros dois.
Resolução:
Program triangulo ;
var
l1,l2,l3:integer;
Begin
clrscr;
writeln('Digite os lados do triângulo');
readln(l1,l2,l3);
if (l1<l2+l3) and (l2<l1+l3) and (l3<l1+l2) then
writeln('Os números formam os lados de um triângulo')
else writeln('Os números não formam os lados de um triângulo');
readkey;
End.
02- Faça um programa para ler três números e se estes poderem formar um triângulo dizer se o triângulo é “EQUILÁTERO”, “ISÓSCELES” OU “ESCALENO”.
Resolução:
Program triangulo ;
var
A,B,C:integer; //A, B, C > 0
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 //'and' é usado para 'excluir' os valores A ou B ou C=0
| | begin
| | | write('Os números formam os lados de um triângulo ');
| | | if (A=B) and (B=C) then
| | | | write('equilátero ')
| | | else
| | | | if (A<>B) and (A<>C) and (B<>C) then
| | | | | write('escaleno')
| | | | else
| | | | | write('isósceles');
| | end
| else write('Os números não formam os lados de um triângulo');
| readkey;
End.
03- Faça um programa que leia as três notas, as faltas e o nome de um aluno e imprima sua situação. ( “APROVADO”, “REPROVADO POR FALTA” ou “REPROVADO POR MÉDIA” ) Observação – A média para aprovação é 5.0 e o limite de faltas é 17.
Resolução:
Program aluno;
var
nome:string;
n1,n2,n3,media:real;
f:integer;
Begin
clrscr;
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);
readkey;
End.