Italo Info


Comandos de repetição (Loops)

Muitas vezes, quando desenvolvemos software, surge a necessidade de executar um conjunto de instruções várias vezes. Para isso, existem os comandos de repetição, também conhecidos como loops.

Comando While

A instrução while tem uma condição e bloco de código. Abaixo a sintaxe do comando while:

while( CONDIÇÃO ) {
    BLOCO DE CÓDIGO
}

O comando while executa do seguinte modo: while (enquanto), enquanto a condição for verdadeira execute o bloco de código. Veja abaixo um programa que imprime os números de um até 10:


#include <stdio.h>

int main() {
    int contador = 1;
    while( contador <= 10 ) {
        printf( "%d ", contador );
        contador = contador + 1;    // poderia ser: contador++  que teria o mesmo efeito
    }
    return 0;
}

No programa acima, é declarada uma variável contador que é iniciada com o valor 1, já que a intenção é contar de 1 até 10 e imprimir. Logo após vem a instrução while que repete o bloco de código até que o contador seja maior que 10 (isto é, diferente de menor ou igual a 10). No bloco de código, o contador é impresso a cada iteração do laço while e, depois, é incrementado com uma unidade. Logo, na primeira iteração é impresso 1 e o contador é incrementado, passando a valer 2. Na segunda iteração, é impresso o valor 2 e o contador é incrementado, passando a valer 3. Isso é repetido até o contador ser maior que 10!

Abaixo, um programa que imprime os números pares de 1 a 10 através da instrução while:


#include <stdio.h>

int main() {
    int i = 1;                   // Variável que assume a função de contador com nome "i"
    while( i<=10 ) {             // Compare esse programa com o anterior e verá que houve 
        if ( i % 2 == 0 )        // a mudança de nome de "contador" para "i" e um if a mais
            printf( "%d ", i );  // A mudança de nome não é obrigatória, poderia ser "contador" mesmo
        i++;
    }
    return 0;
}

No programa acima, a condição é i<=10, a variável i recebe, inicialmente, o valor 1 e tem seu valor incrementado em 1 com a execução do comando i++.


Comando for

A instrução for tem três partes mais bloco de código. Veja abaixo a sintaxe do comando for:

for( INICIALIZAÇÃO ; CONDIÇÃO ; INCREMENTO ) {
    BLOCO DE CÓDIGO
}    

Na primeira parte do for, fica a inicialização de uma ou mais variáveis que, geralmente, serão utilizadas como contador. Logo depois, vem a condição que, quando assume o valor falso, o for é terminado e, por ultimo, o incremento de uma ou mais variáveis utilizadas como contador. Veja o exemplo abaixo:


#include <stdio.h>

int main() {
    int i;
    for( i=1; i<=10; i++ )
        printf( "%d ", i );                 
    return 0;
}

No exemplo acima é utilizada uma a variável contador i que, inicialmente, recebe o valor 1. A condição é i<=10, isto é, repete enquanto o valor da variável i for menor ou igual a 10 e, no incremento, é utilizado o i++ que é o mesmo que i=i+1. A inicialização da variável contador é executada apenas uma vez, mas, a condição de parada é verificada a cada iteração do for, isto é, antes da de cada execução do bloco de código. O incremento da variável contador é executada depois de cada execução do bloco de código. Em resumo, o programa acima imprime os números de 1 a 10.

Abaixo, um programa que imprime os números impares entre 1 e 10. Lembrando que dentro do bloco de código do for tem apenas uma instrução, o if e, dentro do bloco de código do if, também, tem apenas uma instrução. Por isso, as chaves são opcionais. Obs: o operador de igualdade é == e o operador de diferente é !=.


#include <stdio.h>

int main() {
    int i;
    for( i=1; i<=10; i++ )
        if ( i % 2 != 0 )
            printf( "%d ", i );                 
    return 0;
}


Exercícios

1) Altere o exemplo anterior para que sejam impressos os valores entre -5 e 5.

2) Altere o exemplo anterior para que sejam impressos apenas os valores divisiveis por 3 entre 0 e 20.

3) Altere o exemplo anterior para que sejam impressos apenas os valores pares entre 1 e 10.


Comando do/while

A instrução do/while tem uma condição e bloco de código. Abaixo a sintaxe do comando do/while:

do {
    BLOCO DE CÓDIGO
} while( CONDIÇÃO );

O comando do/while funciona do seguinte modo: execute o bloco de código enquanto a condição for verdadeira.

O comando do/while é semelhante ao while, excerto que o bloco de código da instrução é executado pelo menos uma vez, porque, a verificação da condição de parada é feita depois da execução de cada bloco de código e, não, antes como acontece no comando while.

Abaixo o programa que imprime todos os números pares entre 1 e 10 feito com comando do/while:


#include <stdio.h>

int main() {
    int i = 0;
    do {
        i++;
        if ( i % 2 == 0 )
            printf( "%d ", i );                         
    } while ( i < 10 );
    
    return 0;
}

Loop infinito

Cuidado com os comandos de repetição. Uma condição de parada é necessária para que o comando de repetição não gere um loop infinito que cause o travamento do programa, isso porque, quando acontece um loop infinito, o bloco de código do comando de repetição é executado indefinidamente. Abaixo um exemplo de loop infinito:


#include <stdio.h>

int main() {
    int i = 0;
    while( i < 10 ) {
        printf( "%d", i );      
    }           
    return 0;
}

No exemplo acima a variável (i) nunca chega a ter como valor um número maior ou igual a 10, a condição desse exemplo nunca é falsa. Ou seja, (i) sempre é menor que 10 pois tem como valor inicial 0. Abaixo o exemplo acima que não trava:


#include <stdio.h>

int main() {
    int i = 0;
    while( i < 10 ) {
        printf( "%d", i );      
        i++;
    }           
    return 0;
}

Perceba que a variável (i) é incrementada em 1 a cada iteração do comando for, o que significa que, em 10 repetições a variável i alcança o valor 10 e o comando while é finalizado. Se o comando executa enquanto i < 10 significa que para de executar quando essa condição for falsa, isto é, i >= 10.

Chegamos ao final dessa aula, passe para a próxima!