logotipo Blog Giovani Da Cruz
C / C++

Linguagem C: Laços de Repetição Encadeados

8 min de leitura 297 visualizações

 

 

Laços de Repetição Encadeados

Laços de repetição são fundamentais em qualquer linguagem de programação, permitindo a execução de blocos de código repetidamente enquanto uma condição é verdadeira. Na linguagem C, os laços mais comuns são for, while e do-while. No entanto, quando um laço de repetição é colocado dentro de outro, temos o que é chamado de laços encadeados ou aninhados. Essa estrutura é amplamente utilizada para resolver problemas que envolvem iteração sobre múltiplas dimensões, como em matrizes, algoritmos de busca, ou até mesmo na criação de padrões repetitivos.

 

O que são laços de repetição encadeados?

Um laço de repetição encadeado ocorre quando um laço de controle é inserido dentro de outro. Isso significa que para cada iteração do laço exterior, o laço interior é executado por completo. Essa técnica é bastante útil quando precisamos percorrer estruturas bidimensionais, como matrizes, onde precisamos de dois níveis de iteração: um para as linhas e outro para as colunas.

 

Exemplo de laços encadeados com for

Um exemplo clássico de laços de repetição encadeados é o uso de dois laços for para percorrer uma matriz bidimensional:

#include <stdio.h>

int main() {
    int matriz[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    // Laços encadeados para percorrer a matriz
    for (int i = 0; i < 3; i++) {           // Laço externo (linhas)
        for (int j = 0; j < 3; j++) {       // Laço interno (colunas)
            printf("%d ", matriz[i][j]);
        }
        printf("\n");  // Quebra de linha após cada linha da matriz
    }

    return 0;
}

Neste exemplo, temos dois laços for. O primeiro (for (int i = 0; i < 3; i++)) itera sobre as linhas da matriz, enquanto o segundo (for (int j = 0; j < 3; j++)) percorre as colunas de cada linha. Isso resulta na impressão de todos os elementos da matriz, linha por linha.

 

Usos comuns de laços encadeados

Matrizes Bidimensionais: Como vimos no exemplo anterior, laços encadeados são a maneira ideal de percorrer uma matriz bidimensional. Para matrizes tridimensionais ou superiores, mais laços aninhados seriam necessários.

Algoritmos de Busca e Ordenação: Muitos algoritmos de busca e ordenação utilizam laços encadeados. Um exemplo clássico é o algoritmo bubble sort, que ordena elementos de um vetor comparando-os repetidamente em pares.

Criação de Padrões: Outro uso interessante é na criação de padrões gráficos ou textuais.

 

Agora vamos ver mais exemplos detalhados de laços de repetição encadeados usando os três principais tipos de comandos de repetição da linguagem C: for, while e do-while.

 

Laços Encadeados com for

O laço for é geralmente o mais utilizado quando sabemos o número de iterações que o loop precisa executar. Um exemplo de laços encadeados com for pode ser o seguinte, onde percorremos uma matriz bidimensional:

#include <stdio.h>

int main() {
    int matriz[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    // Laços encadeados com for
    for (int i = 0; i < 3; i++) {       // Laço externo (linhas)
        for (int j = 0; j < 3; j++) {   // Laço interno (colunas)
            printf("%d ", matriz[i][j]);
        }
        printf("\n");
    }

    return 0;
}

Aqui, o laço externo itera sobre as linhas da matriz, e o laço interno percorre as colunas. A matriz é impressa linha por linha.

 

Laços Encadeados com while

O laço while é útil quando a condição de término não é fixa no início do loop, mas pode variar dependendo da lógica. Aqui está um exemplo de laços encadeados com while:

#include <stdio.h>

int main() {
    int i = 0, j;

    // Laços encadeados com while
    while (i < 3) {         // Laço externo (linhas)
        j = 0;              // Reinicia o contador de colunas
        while (j < 3) {     // Laço interno (colunas)
            printf("i = %d, j = %d\n", i, j);
            j++;
        }
        i++;
    }

    return 0;
}

Neste exemplo, o laço externo controla a variável i e o interno controla j, com ambos incrementando até que a condição de término seja atendida.

 

Laços Encadeados com do-while

O laço do-while garante que o código será executado ao menos uma vez, independentemente da condição inicial. A seguir está um exemplo com laços encadeados:

#include <stdio.h>

int main() {
    int i = 0, j;

    // Laços encadeados com do-while
    do {
        j = 0;
        do {
            printf("i = %d, j = %d\n", i, j);
            j++;
        } while (j < 3);   // Laço interno
        i++;
    } while (i < 3);       // Laço externo

    return 0;
}

Aqui, tanto o laço interno quanto o externo são executados ao menos uma vez, mesmo que as condições não sejam satisfeitas no início.

 

Mais exemplos

 

Laços Encadeados para Criação de Padrões com for

Vamos usar laços for para criar um padrão simples de triângulo de asteriscos:

#include <stdio.h>

int main() {
    int linhas = 5;

    for (int i = 1; i <= linhas; i++) {      // Laço externo para as linhas
        for (int j = 1; j <= i; j++) {      // Laço interno para imprimir os asteriscos
            printf("* ");
        }
        printf("\n");  // Nova linha após cada linha de asteriscos
    }

    return 0;
}

Neste código, o laço externo controla o número de linhas, enquanto o laço interno imprime o número correto de asteriscos em cada linha. Isso gera o seguinte padrão:

* 
* * 
* * * 
* * * * 
* * * * * 

 

Laços Encadeados com while para Matriz Bidimensional

A seguir está um exemplo de como podemos usar while para percorrer uma matriz bidimensional:

#include <stdio.h>

int main() {
    int matriz[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };

    int i = 0, j;

    while (i < 3) {         // Laço externo (linhas)
        j = 0;              // Reinicia o índice de colunas para cada nova linha
        while (j < 3) {     // Laço interno (colunas)
            printf("%d ", matriz[i][j]);
            j++;
        }
        printf("\n");
        i++;
    }

    return 0;
}

Aqui, usamos laços while aninhados para percorrer a matriz bidimensional, imprimindo seus elementos linha por linha.

 

Laços Encadeados com do-while para Calcular Produto

Um exemplo mais prático de do-while é calcular o produto de números em uma matriz, multiplicando os elementos entre si usando laços encadeados:

#include <stdio.h>

int main() {
    int matriz[2][2] = {{2, 3}, {4, 5}};
    int i = 0, j, produto = 1;

    do {
        j = 0;
        do {
            produto *= matriz[i][j];   // Multiplica os elementos
            j++;
        } while (j < 2);
        i++;
    } while (i < 2);

    printf("Produto dos elementos: %d\n", produto);

    return 0;
}

Aqui, o laço do-while encadeado percorre a matriz, multiplicando seus elementos e armazenando o resultado na variável produto.

 

Cuidado com laços encadeados

Embora laços encadeados sejam úteis, é importante ter cuidado ao usá-los. O número de iterações cresce exponencialmente com o número de laços, o que pode levar a uma performance ineficiente, especialmente em grandes volumes de dados. Por exemplo, um laço encadeado com três níveis irá realizar um número de iterações igual ao produto das três condições:

for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            // Código aqui será executado n^3 vezes
        }
    }
}

Para grandes valores de n, isso pode se tornar muito custoso em termos de tempo de execução.

 

 

 

Conclusão

Laços de repetição encadeados são uma ferramenta poderosa na linguagem C, permitindo a execução de estruturas complexas de forma eficiente. Eles são amplamente usados em manipulações de matrizes, algoritmos de ordenação e busca, e na criação de padrões. Contudo, é necessário estar atento ao impacto no desempenho, especialmente ao trabalhar com grandes volumes de dados.

A escolha entre for, while e do-while depende do contexto e da necessidade do programa, mas todos podem ser utilizados de maneira eficaz com laços aninhados.

Agora que vimos exemplos com todos esses tipos de laços, você pode utilizá-los conforme necessário em seus projetos, lembrando sempre de controlar corretamente as condições de término para evitar loops infinitos e problemas de performance.

 

 

 

O que você achou deste artigo sobre laços de repetição encadeados em C? Deixe seu comentário abaixo com suas dúvidas, sugestões ou compartilhe como você utiliza esses conceitos nos seus projetos! Sua participação é muito importante e pode ajudar outros leitores a aprenderem mais sobre o tema. 💬

 

Obrigado por ler até aqui! Se você gostou deste post, aproveite para explorar outros artigos relacionados no blog, como nossos tutoriais sobre algoritmos de ordenação e estruturas de dados em C. Continue aprendendo e aprimorando suas habilidades! 🚀

 

#programação

#C

#desenvolvimento

#código

#tecnologia

#GiovaniDaCruz

Deixe um comentário

Seu e-mail não será publicado.