|
Aula 11: Ciclos II: While ... Do e Repeat ...
Until
|
|
Aula
traduzido pelo Eduardo Bentes
While ... Do
Os ciclos abordados nesta aula, while-do e repeat-until são
utilizados
para repetições que não são exactamente
contáveis.Normalmente
usamos estes ciclos quando não é claro a altura em
que o ciclo terminará, por exemplo quando o controlo das
variáveis
são alteradas no interior do ciclo (é estritamente
desaconselhado
em ciclos For ).Também, quando queremos o ciclo sobre algo com
variáveis
de vírgula flutuante utilizamos os ciclos while-do e
repeat-until.
O formato geral de um ciclo while-loop é
While condition
do
Instruction; |
|
|
|
Esta estrutura repete a instrução enquanto a
condição
é verdadeira (true). A condição (condition)
é
qualquer condição que resulte num valor booleano (True ou
False), tal como foi discutido na aula 8.
Isto
pode ser uma comparação, ou qualquer outra coisa
(informação
num ficheiro?se o utilizados pressionou uma tecla?, etc.). Nota que a
estrutura
while-do não atribui um valor inicial a qualquer
variável
tal como o ciclo for o fazia.Logo, temos que fazê-lo por
nós
mesmos.
Exemplo:
código do programa
PROGRAM
WhileExample;
Var x: real;
begin
x := 0.0;
While (x<=1.0) do
begin
WriteLn(x:0:1);
x := x +
0.1;
end;
end.
|
saída
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
|
repeat ... until
A estrutura repeat-until é muito similar à estrutura
while-do.A
estrutura repeat-until repete uma instrução (ou
instruções),
até que a condição é verificada.O formato
geral
do ciclo repeat- until é:
Repeat
Instruction;
until condition; |
|
|
|
Outra diferença de grande importância entre while-do e
repeat-until
é que com while-do a condição é verificada
no início do ciclo,e no cilclo repeat-until é
verificada
no fim. Posto isto, as intruções no ciclo
repeat-until
são executadas pelo menos uma vez.
Repare nos programas mostrados em seguida (também está
incluído um exemplo com um ciclo for ). Apenas o
código
com a estrutura repeat-until tem saída.
código do programa
x := 100;
repeat
writeln('Ajax');
x := x + 1;
until (x>10); |
código do programa
x := 100;
while (x<=10) do
begin
writeln('Ajax');
x := x + 1;
end; |
código do programa
for x := 100 to 10 do
begin
writeln('Ajax');
end; |
saída
Ajax |
saída
|
saída
|
Note também as condições. A condição
para repeat-until (x>0) é o oposto da condição
para
while-do (x<=10).
Aninhamento II
Agora que conhecemos todo os tipo de ciclos, vamos dar uma vista de
olhos
nas regras-de-bom-comportamento relacionadas com aninhamento.
-
Cada ciclo For deve usar a sua própria
variável
de controlo separada
-
O ciclo interior deve começar e acabar na sua totalidade dentro
do ciclo exterior.
Exemplos de mau código
|
|
for i := 1 to 10 do
for k := 1 to 10 do
begin
for k :=
1
to 10 do
writeln('Hello');
end; |
for k := 1 to 10 do
begin
i := k;
repeat
j := i-1;
while
(j<10)
do
begin
end; {end of for}
i := i + 1;
until i>20;
{end
of repeat-until}
j := j + 1;
end; {end of while-do}
Boa identação do seu programa irá
prevenir erros deste tipo.
|
Sumário
Três regras para ciclos:
-
cada ciclo com variável de controlo seperada
-
cada ciclo inteiramente dentro do outro ciclo
-
dê uma possibilidade de sair do ciclo. Lembra a anedota de um
programador
encontrada morte na banheiro com uma garrafa de champô "lava,
enxaguar
e repita!"
Quick test:
Para testar o seu conhecimento, sobre o que aprendeu nesta aula, clique
aqui
para um teste on-line.
Peter Stallinga. Universidade do Algarve, 15
março
2002