Brazilian Flag American Flag

Back Home Page

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.


Creative Commons License
Repetições em C/C++ - for, while e do while by Denys Xavier is licensed under a Creative Commons Attribution 4.0 International License.