Instruções de iteração: ciclo while
Muitas vezes queremos que o computador repita um conjunto de instruções por um determinado número de vezes. Existem instruções especiais para conseguir tal efeito, sendo designadas de instruções de iteração ou ciclos. Existem 3 tipos de ciclos em C: while, for e do while.Exemplo: pretende-se fazer um programa para escrever no ecrã a palavra olá 100 vezes. Podemos fazer um programa com 100 printf's mas isso é uma chatice. Outra alternativa é dizer ao computador para repetir a instrução printf("Olá\n"); 100 vezes. O programa que se segue faz precisamente isso.
#include <stdio.h>
main()
{
int i;
i = 1;
while( i <= 100 )
{
printf("Olá\n");
i++;
}
}
A palavra-chave while significa em português enquanto. No caso geral, a instrução tem o seguinte formato:
while( expressão )
instrução
O computador começa por testar a expressão do while. Se a expressão for verdadeira, o programa executa a instrução que vem a seguir à expressão (reparem que a instrução tanto pode ser simples como composta). Depois de executar a instrução, o computador volta a testar a expressão do while e continua assim indefinidamente até a expressão ser falsa. Nessa altura, o programa abandona o ciclo while e executa a instrução que aparece imediatamente a seguir ao final do ciclo.
No exemplo, a variável i serve para controlar a condição do ciclo while. Este tipo de situação é muito frequente em programação. Ao executar o programa, o computador vai fazer o seguinte:
i começa por valer 1
(1 <= 100) ? SIM
printf("Olá\n")
i passa a valer 2
(2 <= 100) ? SIM
printf("Olá\n")
i passa a valer 3
(3 <= 100) ? SIM
printf("Olá\n")
i passa a valer 4
...
(100 <= 100) ? SIM
printf("Olá\n")
i passa a valer 101
(101 <= 100) ? NÃO
acabou o ciclo while
Outro exemplo: pretende-se fazer um programa para escrever no ecrã os números de 1 a 100 (basta alterar o printf no programa acima).
#include <stdio.h>
main()
{
int i;
i = 1;
while( i <= 100 )
{
printf("%d\n", i);
i++;
}
}
Outro exemplo: pretende-se fazer um programa para calcula a soma dos N primeiros números naturais (1+2+3+...+N) em que N é um número introduzido pelo utilizador (NOTA: este programa poderia ser feito utilizando a fórmula da progressão aritmética, S = (1+N) * N/2, mas faz de conta que não sabíamos a fórmula).
#include <stdio.h>
main()
{
int i, s, n;
printf("Introduz N:\n");
scanf("%d", &n);
s = 0;
i = 1;
while( i <= n )
{
s = s + i;
i++;
}
printf("A soma é %d\n", s);
}
Estudem bem este exemplo porque é um clássico da programação. Pode parecer um bocado esquisito, mas sempre que necessitarem de somar um conjunto de parcelas, faz-se sempre assim: s = s + (qualquer coisa)
No nosso exemplo, a variável i serve para varrer os números de 1 a N. A cada iteração do ciclo while, a variável s vai acumulando a soma. Ou seja, os valores que s vai assumir vão sendo sucessivamente: 0
1 (0+1)
3 (1+2 = 0+1+2)
6 (3+3 = 0+1+2+3)
10 (6+4 = 0+1+2+3+4)
...
Outro exemplo: pretende-se fazer um programa para calcular o factorial de N. O programa é praticamente idêntico ao anterior, basta mudar o sinal de '+' para '*', e inicializar a variável que vai ter o resultado com 1 em vez de 0. #include <stdio.h>
main()
{
int i, factorial, n;
printf("Introduz N:\n");
scanf("%d", &n);
factorial = 1;
i = 1;
while( i <= n )
{
factorial = factorial * i;
i++;
}
printf("O factorial de %d é %d\n", n, factorial);
}
Os valores que a variável factorial vai assumir vão sendo sucessivamente: 1
1 (1*1)
2 (1*2 = 1*1*2)
6 (2*3 = 1*1*2*3)
24 (6*4 = 1*1*2*3*4)
...
Comentários
Enviar um comentário