Bucles
Introducción
En Programación I usaste for, while y do-while para repetir acciones, validar entradas y recorrer rangos.
En Programación II (C++) seguimos usando los mismos bucles, pero con E/S en iostream (std::cin, std::cout) y, cuando proceda, podemos encapsular mejor la lógica en funciones.
En este tema nos quedamos con 3 ejemplos representativos para evitar repeticiones.
1) Validación (1..10) + tabla de multiplicar
Se pide un entero entre 1 y 10. Si no está en rango, se vuelve a pedir. Luego se imprime la tabla del 1 al 10.
P1 — C
#include <stdio.h>
#define MIN 1#define MAX 10
int main() { int num;
do { printf("Introduce un número entre %d y %d: ", MIN, MAX); scanf("%d", &num); } while (num < MIN || num > MAX);
for (int i = MIN; i <= MAX; i++) { printf("%d x %d = %d\n", i, num, i * num); } return 0;}P2 — C++
#include <iostream>
int main() { const int MIN = 1; const int MAX = 10;
int num;
do { std::cout << "Introduce un número entre " << MIN << " y " << MAX << ": "; std::cin >> num; } while (num < MIN || num > MAX);
for (int i = MIN; i <= MAX; i++) { std::cout << i << " x " << num << " = " << i * num << "\n"; }
return 0;}2) Leer enteros hasta 0 y contar/sumar positivos y negativos
Se leen enteros hasta que el usuario introduce 0. Se muestran cuántos positivos/negativos y su suma.
P1 — C
#include <stdio.h>
#define FIN 0
int main() { int valor; int cuentaPos = 0, cuentaNeg = 0; int sumaPos = 0, sumaNeg = 0;
do { printf("Introduce un entero (0 para terminar): "); scanf("%d", &valor);
if (valor > 0) { cuentaPos++; sumaPos += valor; } else if (valor < 0) { cuentaNeg++; sumaNeg += valor; } } while (valor != FIN);
printf("Positivos: %d, suma = %d\n", cuentaPos, sumaPos); printf("Negativos: %d, suma = %d\n", cuentaNeg, sumaNeg); return 0;}P2 — C++
#include <iostream>
int main() { const int FIN = 0;
int valor; int cuentaPos = 0, cuentaNeg = 0; int sumaPos = 0, sumaNeg = 0;
do { std::cout << "Introduce un entero (0 para terminar): "; std::cin >> valor;
if (valor > 0) { cuentaPos++; sumaPos += valor; } else if (valor < 0) { cuentaNeg++; sumaNeg += valor; } } while (valor != FIN);
std::cout << "Positivos: " << cuentaPos << ", suma = " << sumaPos << "\n"; std::cout << "Negativos: " << cuentaNeg << ", suma = " << sumaNeg << "\n";
return 0;}3) Cuadrado hueco de asteriscos (bucles anidados)
A partir de un entero n, se imprime un cuadrado n x n donde solo aparece * en el borde.
P1 — C
#include <stdio.h>
int main() { int n;
printf("Tamaño del cuadrado: "); scanf("%d", &n);
for (int fil = 0; fil < n; fil++) { for (int col = 0; col < n; col++) { if (fil == 0 || fil == n - 1 || col == 0 || col == n - 1) { printf("*"); } else { printf(" "); } } printf("\n"); }
return 0;}P2 — C++
#include <iostream>
int main() { int n;
std::cout << "Tamaño del cuadrado: "; std::cin >> n;
for (int fil = 0; fil < n; fil++) { for (int col = 0; col < n; col++) { if (fil == 0 || fil == n - 1 || col == 0 || col == n - 1) { std::cout << "*"; } else { std::cout << " "; } } std::cout << "\n"; }
return 0;}