Published
Last modified
Repetições em C/C++ - for, while e do while
As estruturas de repetições são muito importantes para programas, pois muitas vezes o mesmo procedimentos têm que ser executados mais de uma vez.
Em C/C++, basicamente existem três tipos de estrutura de repetição: FOR, WHILE e DO WHILE.
FOR
O FOR como qualquer iteração* precisa de uma variável para controlar os loops (voltas). Em for, essa variável deverá ser inicializada, indicada seu critério de execução, e forma de incremento ou decremento. Ou seja, for precisa de três condições. Vale salientar que essas condições são separadas por ponto-e-vírgula (;).
*ITERAÇÃO é sinônimo de repetição.
Como procedemos:
FOR (inicialização ; até quando irá ser executado ; incremento ou decremento).
No exemplo, faremos um programa que contará de 1 a 100. Você verá que é um programa que faz algo muito simples, ele soma um a uma variável várias vezes. O x começa em 1, o loop só será executado enquanto x for menor ou igual a 100 e a cada loop será somado 1 a x. Veja:
//loop com FOR #include <iostream> #include <cstdlib> using namespace std; int main (void){ int x; for (x=1; x<=100; x++) /* inicialização: x começa em 1 critério: executar enquanto x for menor ou igual a 100 incremento (++) será somado 1 a x */ cout << x <<"\t"; system ("pause"); }
O FOR também segue a mesma regra de IF. Caso haja mais de uma linha a ser executada pelo comando FOR, essas deverão estar agrupadas num bloco de dados ({ }
).
Este comando não se limita a operações com constantes, por exemplo: x=1, executar enquanto x for menor ou igual a 100... Às vezes, o usuário pode entrar com dados para controlar o loop. Veja:
No exemplo 1, a contagem começará a partir do número que o usuário digitar.
//exemplo 1 #include <iostream> #include <cstdlib> using namespace std; int main (void){ int x, user; cout <<"Digite um numero menor que 100 para iniciar a contagem\n"; cin >> user; cin.ignore (); system ("cls"); // limpa a tela for (x=user; x<=100; x++) cout << x <<"\t"; system ("pause"); }
No exemplo 2, a contagem começará no 1 e terminará no número digitado pelo usuário.
//exemplo 2 #include <iostream> #include <cstdlib> using namespace std; int main (void){ int x, user; cout <<"Digite um numero menor que 100 para iniciar a contagem\n"; cin >> user; cin.ignore (); system ("cls"); // limpa a tela for (x=1; x<=user; x++) cout << x <<"\t"; system ("pause"); }
No exemplo 3, a contagem irá de 0 a 100 com intervalos determinados pelo usuário.
//exemplo 3 #include <iostream> #include <cstdlib> using namespace std; int main (void){ int x, user; cout <<"Digite qual sera o intervalo da contagem\n"; cin >> user; cin.ignore (); system ("cls"); // limpa a tela for (x=1; x<=100; x+=user) cout << x <<"\t"; system ("pause"); }
*Observação: A operação x+=user
é o mesmo que x=x+user
.
WHILE
Uma outra forma de iteração (repetição) em C/C++ é o WHILE.
While executa uma comparação com a variável. Se a comparação for verdadeira, ele executa o bloco de instruções ({ }
) ou apenas a próxima linha de código logo abaixo.
Procedemos da seguinte maneira:
WHILE (comparação)
Veja o exemplo abaixo.
#include <iostream> #include <cstdlib> using namespace std; int main (void){ int par=0; cout <<"Os numeros pares de 0 a 100 sao:\n\n"; while (par<=100) { cout <<par<<"\t"; par+=2; //o mesmo que par=par+2 } system ("pause"); return 0; }
Neste exemplo serão mostrados os números pares entre 0 e 100.
Algumas precauções
O WHILE muitas vezes pode nos pregar peças. Se prestarmos atenção, no exemplo acima inicializamos a variável par em 0, pois quando usamos no while uma variável sem inicializa-la pode causar comportamentos estranhos. E por que isso acontece? É simples. C/C++ não inicializa variáveis automaticamente em 0, ou seja, se você comparar uma variável não inicializada, essa variável pode ser qualquer coisa, ex.: 1557745, -9524778, 1 ou até mesmo 0.
Outro problema comum com o while é o loop infinito. O WHILE, diferentemente de FOR, não incrementa ou decrementa automaticamente uma variável, isso deve estar expressado dentro do bloco de instruções, como podemos ver na linha par+=2. Caso contrário, par sempre seria zero e nunca chegaria a 100 para o loop parar, causando o loop infinito.
O ideal é utilizar o WHILE em um loop definido pelo usuário, que a partir de uma entrada ele termine. Ou seja, enquanto o usuário não fizer determinada ação, o loop continuará a dar voltas. Como no exemplo abaixo.
#include <iostream> #include <cstdlib> using namespace std; int main (void){ int nr=1; while (nr!=0) //enquanto nr for diferente de 0 { cout <<"Digite um numero (0 para finalizar): "; cin >> nr; cin.ignore (); if (nr>0) cout <<"Este numero e positivo\n"; else cout <<"Este numero e negativo\n"; } return 0; }
No exemplo, o programa só irá parar quando o usuário digitar 0, qualquer outro número fará com que o programa continue dando loop. Perceba que a variável ainda está sendo inicializada.
DO WHILE
A estrutura de repetição DO WHILE parte do princípio de que deve-se fazer algo primeiro e só depois comparar uma variável para saber se o loop será executado mais uma vez.
Devemos proceder da seguinte maneira:
DO {bloco de instruções} WHILE (comparação);
Usamos DO, depois escrevemos tudo que o DO deve fazer no bloco de instruções, no final do bloco colocamos o WHILE com a comparação entre parênteses, e não se esqueça que neste caso termina-se a linha do WHILE com ponto-e-vírgula (;). Veja:
#include <iostream> #include <cstdlib> using namespace std; int main (void){ int nr; do { cout <<"Digite um numero (0 para finalizar): "; cin >> nr; cin.ignore (); if (nr%2==0) /* se nr for divisivel por 2 (O resto da divisão por 2 for 0)*/ cout <<"Este numero e par\n"; else cout <<"Este numero e impar\n"; system ("pause"); system ("cls"); } while (nr!=0); //enquanto nr for diferente de 0 return 0; }
Este programa verifica se um número é par ou ímpar, e finaliza em 0.
Partindo do ponto de vista que o usuário irá digitar o valor da variável nr durante o bloco do DO e só depois será comparada no WHILE no final do bloco, então não tem porque inicializar a variável (int nr;). Isso pode ajudar muitas vezes em que é necessário executar um loop, nem que seja uma vez.
Repetições em C/C++ - for, while e do while by Denys Xavier is licensed under a Creative Commons Attribution 4.0 International License.