Bucles | P2 GIR Saltearse al contenido

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