Loops aninhados em C++

Jinku Hu 12 outubro 2023
  1. Use Loop for aninhado para inicializar a matriz bidimensional em C++
  2. Use o loop while aninhado para inicializar a matriz bidimensional em C++
  3. Use o Loop do...while aninhado para inicializar a matriz bidimensional em C++
Loops aninhados em C++

Este artigo descreve como utilizar diferentes loops aninhados em C++.

Use Loop for aninhado para inicializar a matriz bidimensional em C++

Os loops são conhecidos como instruções de fluxo de controle, que geralmente modificam o contador do programa e forçam a CPU em execução a passar para uma instrução diferente (geralmente não sequencial) no programa. O contador do programa é um registro no núcleo da CPU que armazena a próxima instrução de um programa em execução.

Vamos pensar em termos de representação do programa no nível da linguagem assembly, em que cada instrução corresponde a uma única instrução de máquina. O código é executado sequencialmente e a CPU busca a instrução a seguir, a menos que seja instruída de outra forma (falando livremente, já que os núcleos da CPU contemporâneos são máquinas altamente otimizadas que podem buscar várias instruções e muitas vezes de locais não sequenciais no programa). Portanto, precisamos indicar na linguagem assembly com instruções especiais para transferir a execução para uma parte diferente do programa se queremos implementar um loop.

Agora, vamos considerar a sintaxe da linguagem C++ e como implementar diferentes instruções de fluxo de controle, como loops.

Uma das instruções de loop mais comuns em linguagens de programação são os loops for e while. O loop for tem a parte do cabeçalho que inclui instruções de três partes e controla a execução do corpo do loop. Várias instruções de loop for podem ser aninhadas umas dentro das outras, formando uma construção útil para muitas tarefas de programação.

Este artigo demonstra um exemplo de inicialização de um array bidimensional usando loops for aninhados. Cada nível de loop aninhado lida com uma única linha do array, portanto, temos dois níveis neste exemplo. Observe que também imprimimos os elementos após o inteiro aleatório ser atribuído à posição fornecida. A última etapa será realizada separadamente em cenários do mundo real, mas este exemplo de código é apenas para fins educacionais.

#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 3;

int main() {
  int *matrix = new int[ROW * COL];

  for (int i = 0; i < ROW; ++i) {
    for (int j = 0; j < COL; ++j) {
      matrix[j * ROW + i] = rand() % 100;
      cout << setw(2) << matrix[j * ROW + i] << "; ";
    }
    cout << endl;
  }

  delete[] matrix;

  return EXIT_SUCCESS;
}

Produção:

83; 86; 77;
36; 93; 35;
86; 92; 14;
22; 62; 27;

Use o loop while aninhado para inicializar a matriz bidimensional em C++

Como alternativa, podemos implementar o código anterior usando instruções de loop while aninhadas. Nesta variante, precisamos declarar as variáveis ​​de índice i e j fora do corpo while e apenas inicializar uma delas no mesmo escopo.

Observe que a segunda variável y - correspondente à posição da coluna do array é inicializada com 0 a cada bucle do loop while externo. Isso garante que o loop interno seja executado após o processamento da primeira linha. Devemos também colocar instruções de incremento para cada variável de índice nos respectivos escopos de loop, pois o próprio while possui apenas o cabeçalho condicional que controla a iteração.

#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 3;

int main() {
  int *matrix = new int[ROW * COL];

  int j, i = 0;
  while (i < ROW) {
    j = 0;
    while (j < COL) {
      matrix[j * ROW + i] = rand() % 100;
      cout << setw(2) << matrix[j * ROW + i] << "; ";
      j++;
    }
    i++;
    cout << endl;
  }

  delete[] matrix;

  return EXIT_SUCCESS;
}

Produção:

83; 86; 77;
36; 93; 35;
86; 92; 14;
22; 62; 27;

Use o Loop do...while aninhado para inicializar a matriz bidimensional em C++

Por outro lado, a linguagem C++ também tem a construção de loop do...while, que é adequada para casos especiais de iteração, mas podemos reescrever o mesmo trecho de código usando-a.

A instrução do...while sempre executa a primeira iteração. Portanto, este exemplo não sofrerá com esse recurso, pois assumimos que a matriz gerada tem pelo menos dimensões 1x1.

A estrutura de loop do...while é quase igual ao exemplo while acima, pois esses dois têm formato de cabeçalho semelhante, que inclui apenas a expressão condicional.

#include <iomanip>
#include <iostream>

using std::cout;
using std::endl;
using std::setw;

constexpr int ROW = 4;
constexpr int COL = 3;

int main() {
  int *matrix = new int[ROW * COL];

  int j, i = 0;
  do {
    j = 0;
    do {
      matrix[j * ROW + i] = rand() % 100;
      cout << setw(2) << matrix[j * ROW + i] << "; ";
      j++;
    } while (j < COL);
    i++;
    cout << endl;
  } while (i < ROW);

  delete[] matrix;

  return EXIT_SUCCESS;
}

Produção:

83; 86; 77;
36; 93; 35;
86; 92; 14;
22; 62; 27;
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Loop