Os ciclos do until
Os ciclos for permitem-nos executar um conjunto de instruções um certo número de vezes. Considere o seguinte exemplo:
# mostra a tabuada dos 7 for i = 1:10 printf("7 x %2d = %2d\n", i, 7*i); endfor
Sabemos à partida que o i irá variar de 1 até 10, executando 10 vezes as instruções dentro do ciclo (o printf).
Ciclos do until
Quando não sabemos à partida quantas vezes o ciclo precisa de ser executado, usamos um ciclo que repete ou termina de acordo com uma condição. Existem duas estruturas de controlo cíclicas que termina com uma condição: do until e while.
Vamos começar pelos ciclos do until.
Queremos descobrir o menos número primo maior do que 1000. Para tal, vamos começar a testar se um número é ou não primo, a partir de 1000.
# primeiro numero primo > 1000 i = 1000; do i=i+1; until (isprime(i)); disp(i);
O ciclo anterior é executado até que se verifique isprime(i). Quando a condição se verificar, isto é, quando isprime(i) for 1, o ciclo termina e avança para a instrução seguinte, que é disp(i).
Exercício
Ler um dado número, garantindo que o número é primo.
# garante que o numero dado e primo do numero = input("Diga um numero primo: "); until isprime(numero)
Como se pode ver pela solução, o ciclo será repetido sempre que for introduzido um número que não é primo. O ciclo só pára de se repetir quando é dado um número primo.
Exercício
Apresenta a tabuada para um dado número, garantindo que o mesmo está entre 1 e 10.
# mostra a tabuada de um dado numero # ler um numero e ter a certeza que esta entre 1 e 10 do numero = input("Diga um numero (entre 1 e 10): "); until (numero >= 1 & numero <= 10) # quando chegar aqui, tenho a certeza que o numero esta entre 1 e 10 for i = 1:10 printf("%d x %2d = %2d\n", numero, i, numero*i); endfor
Exercício
Analise com calma o programa seguinte, para adivinhar um número pensado pelo computador.