Linguagem de Programação 1 Estrutura Condicional em Pascal Existem situações em que alguns comandos só devem ser executados se alguma condição for verificada. A verificação de que uma condição é satisfeita e, a partir daí, a decisão em relação à execução ou não de uma determinada sequência de comandos é chamada de estrutura de seleção, estrutura de decisão ou comando de seleção. Estrutura condicional simples comando; 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. comando3; O comandos 1, 2 e 3 só serão executados se a condição for verdadeira. Exemplo 1: programa para determinar o maior de dois números dados. PROGRAM EXEMPLO1; A, B, MAIOR : INTEGER; WRITE('Digite dois numeros: '); READLN(A, B); MAIOR := A; IF (B > A) MAIOR:=B; WRITELN('O maior dos numeros ',A,' e ',B,' e ',MAIOR); Exemplo 2: programa para ordenar os conteúdos de duas variáveis. PROGRAM EXEMPLO2; X, Y, AUX : INTEGER; WRITE('Digite dois numeros: '); READLN(X,Y); WRITELN('Numeros digitados: x = ',X,' y = ',Y); IF X > Y X := Y; Y := AUX; WRITELN('Numeros ordenados: x = ',X,' y = ',Y);
2 Estrutura Condicional Estrutura condicional composta comando1 Se a condição for verdadeira, será executado o caso contrário, se a condição for false, será executado o comando2. END comando3; Se a condição for verdadeira, o comando1 e o comando2 serão executados; caso contrário, se a condição for falsa, o comando3 e o comando4 serão executados. Antes do comando não existe ponto-e-vírgula. Exemplo3: programa para verificar a paridade de um número. PROGRAM EXEMPLO3; NUM : INTEGER; WRITE('Digite um numero: '); READLN(NUM); IF ODD(NUM) = TRUE WRITELN(NUM,' e impar') WRITELN(NUM,' e par'); Se queremos determinar a paridade um número podemos determinar o valor de ODD(numero). Se este valor for true, o número é impar; caso contrário, se for false, o número dado é par. O valor de ODD(numero) é um valor do tipo boolean (true ou false). Exemplo4: programa para ordenar três números dados. PROGRAM EXEMPLO4; X, Y, Z, AUX : INTEGER; WRITE('Digite tres numeros: '); READLN(X,Y,Z); WRITELN('Numeros digitados: x = ',X,', y = ',Y,' e z = ',Z); IF (X > Y) OR (X > Z) {X næo o menor} IF (Z > Y) {Y o menor} {permuta de x e de y} X := Y; Y := AUX; END {Z o menor} {permuta de x e de z}
Linguagem de Programação 3 X := Z; Z := AUX; IF (Y > Z) {permuta de y e de z} AUX := Y; Y := Z; Z := AUX; WRITELN('Numeros ordenados: x = ',X,', y = ',Y,' e z = ',Z); Foi escrita no programa algumas frases explicativas das ações pretendidas. Estas frases são chamadas comentários e devem ser escritas entre pares de caracteres chave, { e }. O compilador desconsidera tudo o que vem entre os dois caracteres. Isso permite ao programador registrar no próprio programa os comentários que ele achar conveniente. A prática de se colocar comentários nos programas é muito importante e facilita sua compreensão. Estrutura CASE Em alguns problemas existem comandos mutuamente exclusivos, isto é, se um comando for executado os demais não serão. Quando este for o caso, um comando seletivo é o mais indicado. CASE seletor OF lista de alvos1: lista de alvos2: alvo3: comando3; alvo4: comando5; Se o seletor atingir a lista de alvos1, o comando1 será executado; se o seletor atingir a lista de alvos2, o comando2 será executado; se o seletor atingir o alvo3, o comando3 será executado ou se o seletor atingir o alvo4 então o comando4 e o comando5 serão executados. Se nenhum alvo for atingido, nada será executado. CASE seletor OF lista de alvos1: lista de alvos2: comando3; Se o seletor atingir a lista de alvos1, o comando 1 e o comando2 serão executados; se o seletor atingir a lista de alvos2, o comando 3 será executado. Se nenhum alvo for atingido, será executado o comando4.
4 Estrutura Condicional A restrição da estrutura CASE é que o seletor só pode ser uma variável do tipo CHAR, INTEGER ou BOOLEAN. Exemplo5: programa que determina o número de dias de um mês dado. PROGRAM EXEMPLO5; MES, ANO, NUMDIAS : INTEGER; WRITE('Digite o mes: '); READLN(MES); CASE MES OF 4, 6, 9, 11 : NUMDIAS := 30; 2 : WRITE('Digite o ano: '); READLN(ANO); IF((ANO MOD 4 = 0) AND (ANO MOD 100 <> 0)) OR (ANO MOD 400 <> 0) NUMDIAS := 29 NUMDIAS := 28; NUMDIAS:= 31; WRITELN('O mes ',MES,' tem ',NUMDIAS,' dias'); Exemplo6: programa que determina o dia da semana de uma dada data, tomando como base o ano de 1600 com o dia primeiro em um sábado. PROGRAM EXEMPLO6; DIA, MES, ANO, DIASANO, DIAS31, ANOBISS : INTEGER; ANOS, NUMDIAS : LONGINT; BISS : BOOLEAN; WRITE('DIGITE DIA, MES E ANO '); READLN(DIA,MES,ANO); BISS:=TRUE; {verifica se o ano e bissexto} IF ((ANO MOD 4 <>0) OR ((ANO MOD 100 = 0) AND (ANO MOD 400 <> 0))) BISS := FALSE; ANOS := ANO - 1600; {numero de meses com 31 dias at o mes dado} IF (MES < 9) DIAS31 := MES DIV 2 DIAS31 := (MES+1) DIV 2; {numero de dias do ano dado, considerando fevereiro como tendo 30 dias} DIASANO := 30*(MES-1) + DIA + DIAS31; {retifica o numero de dias de fevereiro} IF (MES > 2)
Linguagem de Programação 5 IF BISS DIASANO := DIASANO - 1 DIASANO := DIASANO - 2; {numero de anos bissextos entre o ano dado (exclusive) e 1600} IF BISS ANOBISS := (ANO DIV 4-400) - (ANO DIV 100-16) + (ANO DIV 400-4) ANOBISS := (ANO DIV 4-400) - (ANO DIV 100-16) + (ANO DIV 400-4) + 1; {numero de dias entre a data e 01/01/1600} NUMDIAS := ANOS*365 + DIASANO + ANOBISS; {dia da semana} WRITE('O DIA ',DIA,'/',MES,'/',ANO,' CAIU(CAIRA) NUM(A) '); CASE NUMDIAS MOD 7 OF 1 : WRITELN('SABADO'); 2 : WRITELN('DOMINGO'); 3 : WRITELN('SEGUNDA'); 4 : WRITELN('TERCA'); 5 : WRITELN('QUARTA'); 6 : WRITELN('QUINTA'); 0 : WRITELN('SEXTA'); Para se calcular o número de dias entre uma data dada e 01/01/1600 basta multiplicar o número de anos por 365, acrescentar o quantidade de anos bissextos e o número de dias ocorridos no ano corrente.