O while é a estrutura de repetição mais simples. Ele repete a execução de um bloco de sentenças enquanto uma condição permanecer verdadeira. Na primeira vez que a condição se tornar falsa, o while não repetirá a execução do bloco, e a execução continuará com a sentença ou comando que vem logo após o bloco do while , na sequência do programa.
A Figura 12 ilustra a sintaxe da estrutura condicional while em C. O fluxo de execução desta estrutura está ilustrado na Figura 21. A expressão é uma condição que controla o while . Primeiro, o programa avalia a expressão. Ela utiliza os mesmos operadores relacionais e lógicos estudados quando tratamos das estruturas condicionais. Caso o resultado da expressão seja não nulo (verdadeiro), então todo o bloco de sentenças será executado. Em seguida, o programa volta a avaliar a expressão e o processo se repete até que a expressão retorne um valor zero (falso). A expressão é sempre avaliada antes da decisão de se executar o bloco de sentenças novamente.
Observação: A expressão deverá ser colocada, obrigatoriamente, entre parênteses.
A repetição do while é controlada por uma condição que verifica alguma característica do
programa (por exemplo, valores de variáveis). Para o uso correto do while , o bloco de
sentenças precisa modificar o estado do sistema de forma a afetar justamente as
características testadas na expressão. Se isto não ocorrer, então o while executará
eternamente.
Observação: O programa sempre executa o bloco de sentenças completo. Mesmo que
durante uma execução do bloco a condição se torne falsa, o programa só verificará este fato
quando avaliar novamente a expressão, preparando para uma nova repetição.
Exemplo 1:
main(){
int numero = 1;
while (numero <= 10) {
printf("%d\n" , numero);
numero = numero + 1;
}
}
Declaramos uma variável numero que controlará o while . Ela armazena o valor a ser impresso. A expressão do while verifica se o número está dentro do limite desejado (menor ou igual a 10).
No início, a variável numero contém o valor 1 e, portanto, a expressão do while é satisfeita. O bloco de expressões é executado, imprimindo o valor de numero e aumentando seu valor em uma unidade. Note que isto afeta a condição que controla o bloco.
Nas próximas repetições, a expressão será verdadeira para os valores de numero 2,3, 4, ... 9 e 10. Quando numero armazenar o valor 11, a expressão que controla o while se tornará falsa. Nesse ponto, o while termina, encerrando as repetições. No final da execução, o valor da variável numero estará em 11, que foi justamente o valor que tornou a expressão falsa, impedindo uma nova execução do bloco while .
Obs:Na estrutura de repetição while é importante lembrar que se entra no laço se a condição for aceita.
Estrutura de repetição do...while
Esta estrutura tem um comportamento muito semelhante ao while , com uma diferença
crucial: a condição é verificada após executar o bloco de instruções correspondente.

A Figura 45 ilustra a sintaxe da estrutura condicional do...while em C. O fluxo de execução desta estrutura está ilustrado na Figura 54. A expressão é uma condição que controla o do...while .
Executa-se o bloco de sentenças, independentemente da condição. Somente então a expressão é avaliada. Caso ela seja não nula (verdadeira), então todo o bloco de sentenças será executado novamente. Este processo se repete até que a expressãoresulte em zero (falso). A expressão é sempre avaliada depois da execução do bloco de sentenças.
Observação 1:A condição deverá ser colocada, obrigatoriamente, entre parênteses!
Observação 2: Não esquecer do ponto-e-vírgula após a expressão!
A diferenças entre a estrutura while e do...while é sutil. Ela está no momento quando a condição de repetição é verificada: antes ou depois de executar o bloco de sentenças. A escolha dependerá do bom senso do programador, que optará pela estrutura que deixar o algoritmo mais simples e legível.
Exemplo 1:
main(){
\\Para imprimir os números de 1 até 10:
int numero = 1;
do {
printf("%d\n" , numero);
numero = numero + 1;
} while (numero <= 10);
}
Declaramos uma variável numero que controlará o do...while . Ela armazena o próximo valor a ser impresso. A expressão verifica se o número está dentro do limite desejado (menor ou igual a 10).
O bloco de sentenças é executado, imprimindo o valor de numero e aumentado seu valor em uma unidade. Após executar o bloco, a expressão verifica se a variável numero continua dentro do limite permitido. Caso afirmativo, o bloco é executado novamente. Assim, o bloco é executado quando numero armazenar 1, 2, 3, ..., 9 e 10.
No final da execução, o valor da variável numero será 11, que foi justamente o valor
que tornou a expressão falsa, impedindo uma nova execução do bloco do...while .
OBs:Diferente do laço while o laço do..while irá executar pelo menos uma vez independentemente da condição.
Estrutura de repetição for
Na maioria dos casos, algoritmos necessitam executar um bloco de sentenças por um
número específico de vezes. Freqüentemente, utiliza-se uma variável para controlar o
número de repetições. Já aprendemos como fazer isso usando o while e o do...while
(vide exemplos para imprimir números de 1 até 10). Estas situações sempre apresentam
uma variável contadora e as quatro etapas seguintes:
• Inicialização: Atribui um valor inicial à variável contadora.
• Teste: Verifica uma condição antes de decidir se executará o bloco de sentenças.
Caso a condição seja falsa, interrompe as repetições.
• Execução: Executa o bloco de sentenças.
• Atualização: Atualiza a variável contadora para o próximo valor.
Vamos ilustrar com nosso primeiro exemplo, imprimir números de 1 até 10.
main(){
int numero = 1; // Inicialização
while (numero <= 10) { // Teste
printf("%d\n", numero); // Execução
...
numero = numero + 1; // Atualização
}
O grande número de situações que requerem esta lógica justifica a próxima estrutura de
repetição. Ela apresenta, de forma compacta, as etapas de inicialização, do teste e da
atualização.
Um for sempre está acompanhado de uma variável contadora que armazena quantas vezes o bloco de sentenças do for deve ser executado. Na Figura 7 observamos que o programa faz a inicialização, que atribui o valor inicial à variável contadora.Em seguida avalia a expressão, que determina se o valor da variável contadora está dentro do limite desejado. Caso positivo, o bloco de sentenças é executado e, em seguida, é executada a atualização, que altera o valor da variável contadora. O processo se repete avaliando novamente a expressão. A sintaxe da estrutura for está na ilustrada na Figura 8. Tipicamente, uma estrutura for ocorre como no modelo abaixo:
int contador;
for(contador = 1; contador <= 10; contador++) {
...
}
Exemplo 1:
main(){
\\Para imprimir os números de 1 até 10:
int numero;
for (numero = 1; numero <= 10; numero++) {
printf("%d ", numero);
}
}
Declaramos uma variável numero que servirá como contador para o for . Ela armazenará a contagem de repetições. O for executa o bloco contendo o comando printf várias vezes, variando o valor da variável numero de 1 até 10. Observe a forma simplificada da escrita da expressão de atualização.
Resultado: 1 2 3 4 5 6 7 8 9 10
Exemplo 2:
main(){
\\Para imprimir os números de 1 até 20, de 2 em 2:
int numero;
for (numero = 1; numero <= 20; numero += 2) {
printf("%d ", numero);
}
}
A diferença está na atualização, que aumenta o valor de numero em duas unidades a
cada repetição do bloco. Observe a forma simplificada da expressão de atualização.
Resultado: 1 3 5 7 9 11 13 15 17 19
Exemplo 3:
main(){
\\Para imprimir os números de 10 até 1:
int numero;
for (numero = 10; numero >= 1; numero--) {
printf("%d ", numero);
}
}
Ao invés de iniciar a variável numero com 1, ela é agora iniciada com 10. A cada
repetição, a atualização deve reduzir o valor da variável correspondente em uma
unidade. Portanto, podemos escrever numero-- . A condição deve verificar agora se
o valor de numero é maior ou igual a 1.
Resultado: 10 9 8 7 6 5 4 3 2 1
Além de condensar uma lógica recorrente de programação em poucas linhas, o for possui
outras duas vantagens importantes:
• O seu cabeçalho agrupa todas as instruções mais importantes que controlam a
execução do for: a inicialização, o teste e a atualização. O programador é obrigado
a declarar toda a lógica de execução em uma única linha e de uma só vez. Em uma
estrutura while , um erro muito comum é o programador “esquecer” de inicializar
ou atualizar a variável de controle.
• O cabeçalho separa claramente as instruções de controle de repetição das instruções
de execução. No exemplo para imprimir números de 1 a 10 sem o uso do for a
variável contadora é atualizada logo após a impressão. Em programas mais
elaborados, as instruções de atualização tendem a ficarem escondidas ou diluídas
dentro das demais instruções, tornando o programa obscuro e suscetível a erros de
programação.
Toda a estrutura for é equivalente a um while . A escolha entre uma estrutura ou outra é
uma questão de gosto e estilo de programação. Use o bom senso para realizar sua escolha.
Observação:Note a ordem correta das declarações no cabeçalho: inicialização, teste e
atualização! Não esqueça do ponto-e-vírgula separando as declarações. Todo o cabeçalho
deverá estar obrigatoriamente entre parênteses!
Fonte:
- (Adaptado)http://www.ic.unicamp.br/~wainer/cursos/2s2011/Cap06-RepeticaoControle-texto.pdf


Nenhum comentário:
Postar um comentário