Bucles anidados en C++

Jinku Hu 12 octubre 2023
  1. Utilice el bucle for anidado para inicializar el array bidimensional en C++
  2. Utilice el bucle while anidado para inicializar el array bidimensional en C++
  3. Utilice el bucle anidado do...while para inicializar el array bidimensional en C++
Bucles anidados en C++

Este artículo describirá cómo utilizar diferentes bucles anidados en C++.

Utilice el bucle for anidado para inicializar el array bidimensional en C++

Los bucles se conocen como declaraciones de flujo de control, que generalmente modifican el contador del programa y obligan a la CPU en ejecución a moverse a una instrucción diferente (generalmente no secuencial) en el programa. El contador de programa es un registro en el núcleo de la CPU que almacena la siguiente instrucción de un programa en ejecución.

Pensemos en términos de representación del programa a nivel de lenguaje ensamblador, donde cada declaración corresponde a una sola instrucción de máquina. El código se ejecuta secuencialmente y la CPU obtiene la siguiente instrucción a menos que se le indique lo contrario (en términos generales, ya que los núcleos de CPU contemporáneos son máquinas optimizadas masivamente que pueden obtener múltiples instrucciones y, a menudo, desde ubicaciones no secuenciales en el programa). Entonces, necesitamos indicar en el lenguaje ensamblador con instrucciones especiales para transferir la ejecución a una parte diferente del programa si queremos implementar un bucle.

Ahora, consideremos una sintaxis del lenguaje C++ y cómo implementar diferentes declaraciones de flujo de control como bucles.

Una de las declaraciones de bucle más comunes en los lenguajes de programación son los bucles for y while. El bucle for tiene la parte de encabezado que incluye declaraciones de tres partes y controla la ejecución del cuerpo del bucle. Se pueden anidar múltiples sentencias de bucle for unas dentro de otras, formando una construcción útil para muchas tareas de programación.

Este artículo muestra un ejemplo de inicialización de un array bidimensional utilizando bucles for anidados. Cada nivel de bucle anidado trata con una sola fila del array, por lo que tenemos dos niveles en este ejemplo. Observe que también imprimimos los elementos después de que el número entero aleatorio se asigna a la posición dada. El último paso se realizará por separado en escenarios del mundo real, pero este ejemplo de código es solo para fines educativos.

#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;
}

Producción :

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

Utilice el bucle while anidado para inicializar el array bidimensional en C++

Alternativamente, podemos implementar el código anterior usando declaraciones de bucle while anidadas. En esta variante, necesitamos declarar las variables de índice i y j fuera del cuerpo while y solo inicializar una de ellas en el mismo ámbito.

Tenga en cuenta que la segunda variable y - correspondiente a la posición de la columna del array se inicializa a 0 en cada bucle del bucle exterior while. Esto asegura que el bucle interno se ejecute después de procesar la primera fila. También deberíamos colocar declaraciones incrementales para cada variable de índice en los respectivos ámbitos de bucle, ya que el while en sí solo tiene el encabezado condicional que controla la iteración.

#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;
}

Producción :

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

Utilice el bucle anidado do...while para inicializar el array bidimensional en C++

Por otro lado, el lenguaje C++ también tiene la construcción de bucle do...while, que es adecuada para casos especiales de iteración, pero podemos reescribir el mismo fragmento de código usándolo.

La instrucción do...while siempre ejecuta la primera iteración. Por lo tanto, este ejemplo no sufrirá esta característica, ya que asumimos que el array generada tiene al menos dimensiones de 1x1.

La estructura del bucle do...while es casi la misma que la del ejemplo while anterior, ya que estos dos tienen un formato de encabezado similar, que incluye solo expresiones condicionales.

#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;
}

Producción :

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

Artículo relacionado - C++ Loop