Lección 4
Bucles
Respuesta corta: un bucle repite un bloque hasta que una condición dice basta. Usa for cuando sabes cuántas veces; usa while cuando no.
for: tres partes, una línea
for (inicio; condición; paso) se lee: prepara, prueba antes de cada vuelta, avanza después de cada vuelta.
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int suma = 0;
for (int i = 1; i <= n; i++) {
suma += i;
}
cout << "suma = " << suma << endl;
return 0;
}
Con n = 5 es 1+2+3+4+5 = 15. Cambia n en la caja de entrada. Esta forma exacta es Suma de 1 a N.
while: cuando la cuenta es desconocida
Arrancar dígitos de un número es el while perfecto: no puedes saber de antemano cuántos hay.
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int digitos = 0;
while (n > 0) {
n /= 10; // arranca el último dígito
digitos++;
}
cout << "digitos = " << digitos << endl;
return 0;
}
Ese n /= 10 es la división entera haciendo el corte — la misma regla de la lección 2.
Bucles anidados: filas y columnas
#include <iostream>
using namespace std;
int main() {
for (int fila = 1; fila <= 3; fila++) {
for (int col = 1; col <= 4; col++) {
cout << "(" << fila << "," << col << ") ";
}
cout << endl;
}
return 0;
}
El bucle interno se completa entero en cada vuelta del externo. Es la máquina detrás de Pirámide de asteriscos y Tabla de multiplicar.
Los tres bugs
- Error de uno.
i < nfrente ai <= n. Sigue a mano un caso mínimo (n = 1) antes de fiarte. - El punto y coma extraviado.
for (...) ;— ese;es un cuerpo vacío; el bucle gira y no hace nada más. - Bucle infinito. Si nada dentro mueve la condición hacia falso, nunca termina. Aquí un bucle desbocado se corta a los 3 segundos, pero el hábito importa en una máquina real.
Practica esta lección
Estos problemas ejercitan exactamente lo que acabas de leer: