Outra situação comum acontece quando desejamos que um trecho de código seja executado repetidamente, enquanto determinada condição seja verdadeira. Isso é o que chamamos de loop. Em
Octave, uma das declarações de controle disponíveis é a
while.
Essa declaração analisa uma condição dada e, enquanto ela for verdadeira, o loop continua. Uma condição será vista como verdadeira para qualquer valor diferente de zero, e será considerada como falsa se seu valor for igual a zero. Novamente podemos usar uma matriz no lugar da condição para while, que será considerada como "verdadeira" apenas se todos os elementos da matriz forem diferentes de zero.
A sintaxe da declaração while é:
while CONDICAO
codigoParaExecutar
endwhile
Note que a primeira coisa que a declaração while faz é testar a condição dada. Se a condição for verdadeira, o código é executado, e depois a condição é testada novamente e assim por diante. O loop só termina quando a condição for considerada falsa.
Portanto, dois cuidados no uso dessa declaração de controle. Primeiro, o loop pode nunca ser executado, pois como a condição é testada logo no início, o loop não será executado nem uma vez se a condição for considerada falsa. Segundo, o loop pode não acabar nunca! Se o código nunca induzir a condição dada para um estado de "falso", o loop seguirá a execução para sempre. Veja um exemplo logo abaixo:
a = 4;
while (a > 2)
printf("%d",a);
a++;
endwhile
No código acima temos um loop que não acaba nunca. Na primeira linha há a declaração de uma variável e seu valor inicial (a = 4). Dentro do loop, o valor da variável é impressa, e logo depois tem seu valor incrementado em +1 (a++). Como a condição é a > 2, ela nunca será falsa e o loop seguirá "para sempre".
A declaração DO-UNTIL
A declaração do - until é similar em uso a declaração while vista acima. A diferença é o momento de verificação da condição: ela é realizada no fim do loop. Portanto, usando do - until o loop será executado pelo menos uma vez. Não cabem muitas explicações, pois a sintaxe é quase a mesma da declaração anterior. Veja:
do
codigoParaExecutar
until (CONDICAO)
No exemplo abaixo você vê os dez primeiros múltiplos de três serem impressos:
a = 1;
do
3*a;
a++;
until (a==10)