This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
repeticao_condicional_com_teste_no_inicio_while-do [2019/04/25 10:50] castilho |
repeticao_condicional_com_teste_no_inicio_while-do [2019/04/25 10:51] (current) castilho |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | Em //Pascal//, o **while-do** é o comando de repetição | ||
+ | condicional com teste no início. Usa-se o **while-do** para | ||
+ | repetir um comando enquanto a avaliação de sua expressão booleana | ||
+ | resulte em verdade (//true//). Tal expressão é avaliada antes | ||
+ | do comando ser executado. | ||
+ | |||
+ | Sintaxe: | ||
+ | |||
+ | <code pascal> | ||
+ | while <expressao booleana> do | ||
+ | comando>; | ||
+ | </code> | ||
+ | |||
+ | As palavras //while// e //do// são reservadas. O comando a | ||
+ | ser executado é único. Caso o programador deseje executar uma | ||
+ | sequência de comandos, o delimitador de blocos deve ser utilizado | ||
+ | (ver seção [[Delimitadores de bloco]]). | ||
+ | |||
+ | Como em //Pascal// todo comando termina por ponto-e-vírgula | ||
+ | e, neste caso, o comando **while-do** termina somente após o | ||
+ | //<comando>//, então o ponto-e-vírgula somente aparece no final, | ||
+ | e não no meio da construção. | ||
+ | |||
+ | Exemplo: | ||
+ | |||
+ | <code pascal> | ||
+ | program exemplo_while_do_1; | ||
+ | var | ||
+ | n : integer; | ||
+ | begin | ||
+ | writeln('Informe um numero inteiro positivo: '); | ||
+ | read(n); | ||
+ | |||
+ | while n > 0 do | ||
+ | begin | ||
+ | writeln(n); | ||
+ | n := n - 1; | ||
+ | end; | ||
+ | writeln ('Fim.'); | ||
+ | end. | ||
+ | </code> | ||
+ | |||
+ | O programa imprime, de maneira decrescente, todos os números entre | ||
+ | //n// e 1. Se o número lido for negativo ou nulo, | ||
+ | então a mensagem "Fim." é impressa imediatamente, isto é, nenhum | ||
+ | número aparece na tela. Isto ocorre porque a avaliação da expressão | ||
+ | condicional ocorre antes do bloco de instruções ser executado. | ||
+ | |||
+ | Como o **while-do** repete um bloco de instruções enquanto | ||
+ | determinada condição for verdadeira, é possível definir um laço de | ||
+ | execução infinita caso a expressão avaliada nunca se altere para | ||
+ | falsa. | ||
+ | |||
+ | No código a seguir, se um número negativo ou nulo for digitado como | ||
+ | entrada, o programa termina sem nunca ter impresso número algum na | ||
+ | saída. Contudo, se o número entrado for positivo e não nulo, será | ||
+ | impresso infinitamente. | ||
+ | |||
+ | Exemplo: | ||
+ | |||
+ | <code> | ||
+ | program exemplo_while_do_2; | ||
+ | var | ||
+ | n : integer; | ||
+ | begin | ||
+ | writeln('Informe um numero inteiro positivo: '); | ||
+ | read(n); | ||
+ | | ||
+ | while n > 0 do | ||
+ | writeln(n); | ||
+ | writeln ('Fim.'); | ||
+ | end. | ||
+ | </code> | ||
+ | |||