Bucles anidados¶
Con cierta frecuencia la solución de un problema exige el uso de bucles que están contenidos dentro de otros. Los bucles anidados pueden tener tantos niveles como se quiera.
La idea clave es: en cada iteración de un bucle externo, ocurren todas las iteraciones posibles de los bucles internos.
El siguiente ejemplo de creación de una tabla de multiplicar es ilustrativo
de este proceso. En este caso, se tienen dos bucles anidados
implementados mediante for
.
// Tabla de multiplicar
#include <iostream>
#include <iomanip> // para setw()
using namespace std;
int main()
{
cout << "Introduce valor: ";
int valor;
cin >> valor;
// Primera fila
cout << " "; // Hueco de 4 espacios
for (int i = 1; i <= valor; ++i)
{
cout << setw(4) << i;
} // Fin primera fila
cout << endl << endl;
for (int i = 1; i <= valor; ++i)
{
cout << setw(4) << i; // Primera columna
for (int j = 1; j <= valor; ++j)
{
cout << setw(4) << i*j;
}
cout << endl;
}
}
Edita, compila y ejecuta el código
El bucle externo recorre todos los enteros en el intervalo [1, valor]
usando el contador i
y el interno recorre el mismo rango, pero utilizando un segundo
contador j
. Así, en la primera iteración del bucle externo,
cuando i
tiene el valor 1
, el bucle interno agota todas las
posibles iteraciones, con j
barriendo todos los valores del rango
[1, valor]
. Y así sucesivamente.
Para visualizar por pantalla la tabla con cierta estética,
se utiliza un formato para alinear correctamente las columnas. Es el objetivo
de la función setw(n)
, que reserva al menos n
espacios para el
flujo de caracteres al que afecta. Necesita que se incluya el archivo de cabecera
iomanip
, que forma parte de la biblioteca estándar iostream
.