Publicidade

10

Estruturas de Repetição

Estrutura de repetição while

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
Data de acesso:27/04/2013          Hora:18:42

Nenhum comentário:

Postar um comentário