|
MC102 |
| O COMANDO REPEAT |
Como vimos, o WHILE testa a condição ANTES de executar o laço. Mas, e se quiséssemos testar DEPOIS da execução? Ou seja, se quiséssemos fazer algo pelo menos uma vez e então testar?
REPEAT
comando1;
comando2;
...
comandon
UNTIL condição;
|
O que esse comando diz? Repita os comandos a seguir até que a condição seja verdadeira. Ou seja, primeiro ele executa os comandos comando1, comando2, ..., comandon para depois testar a condição. Se a condição for falsa, ele executa o laço novamente e testa de novo, e assim por diante. Se a condição for verdadeira, ele sai do laço e segui o programa.
Veja bem a diferença entre REPEAT e WHILE:
Outra coisa, notou a ausência de BEGIN e END? No REPEAT não recisa. Não é errado por, mas não precisa. Assim, as duas formas a seguir são redundantes:
REPEAT REPEAT
comando1; BEGIN
comando2; comando1;
... comando2;
comandon ...
UNTIL condição; comandon
END
UNTIL condição
|
Note também que não preciso por ";" antes do UNTIL. Ou seja:
PROGRAM media;
VAR soma, nota : real;
cont : integer;
BEGIN
soma := 0;
cont := 0;
nota := 0;
write('nota: ');
readln(nota)
WHILE nota <> -1 DO BEGIN
soma := soma + nota;
cont := cont + 1;
write('nota: ');
readln(nota)
END;
IF cont>0 THEN writeln('A média é ',soma/cont)
END.
|
Como escreveríamos isso com REPEAT?
PROGRAM media;
VAR soma, nota : real;
cont : integer;
BEGIN
soma := 0;
cont := -1;
nota := 0;
REPEAT
soma := soma + nota;
cont := cont + 1;
write('nota: ');
readln(nota)
UNTIL nota = -1;
IF cont>0 THEN writeln('A média é ',soma/cont)
END.
|
Então, em suma:
REPEAT com WHILE: WHILE com REPEAT:
f := true; REPEAT
WHILE f DO BEGIN IF condição THEN BEGIN
comando1; comando1;
comando2; comando2;
... ...
comandon; comandon
f := NOT condição END
END; UNTIL NOT condição;
|
Quando você usa um ou outro na prática? Vai do gosto do freguês.