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.