1. Contenidos
1.1 Introducción a las estructuras de repetición
Las estructuras de repetición (también llamadas bucles o ciclos) permiten ejecutar un bloque de código varias veces mientras se cumpla una determinada condición. Son fundamentales para automatizar tareas repetitivas y procesar grandes cantidades de datos sin tener que escribir el mismo código una y otra vez.
Imagina que necesitas mostrar los números del 1 al 100. Sin bucles, tendrías que escribir 100 sentencias System.out.println(). Con un bucle, solo necesitas 4 líneas de código.
Analogía: Un bucle es como dar vueltas a una pista de atletismo. Mientras no hayas completado las 10 vueltas (condición), sigues corriendo (repites el bloque de código). Cuando completas las 10 vueltas, paras y continúas con lo que sigue.
1.2 Bucle while (while-do)
El bucle while (también llamado "mientras" o "while-do") es una estructura de repetición que evalúa la condición al principio. Si la condición es verdadera, ejecuta el bloque de código y luego vuelve a evaluar la condición. Si la condición es falsa, sale del bucle y continúa con el programa.
Importante en Java: La condición del bucle es la condición para repetir el bucle (no la condición de salida). Es decir, el bucle se repite MIENTRAS la condición sea verdadera.
Sintaxis:
- PSeInt:
Mientras condicion Hacer ... FinMientras
- Java:
while (condicion) { ... }
Ejemplo en PSeInt: Mostrar números del 1 al 5
Algoritmo EjemploWhile
Definir contador Como Entero
contador <- 1
Mientras contador <= 5 Hacer
Escribir "Número: ", contador
contador <- contador + 1
FinMientras
Escribir "Fin del bucle"
FinAlgoritmo
Diagrama de Flujo
Ejemplo en Java: Mostrar números del 1 al 5
public class EjemploWhile {
public static void main(String[] args) {
Integer contador = 1;
while (contador <= 5) {
System.out.println("Número: " + contador);
contador = contador + 1;
}
System.out.println("Fin del bucle");
}
}
Precaución: Si olvidas actualizar la variable que controla la condición (por ejemplo, omitir contador++), el bucle se ejecutará para siempre. Esto se llama bucle infinito y hará que tu programa nunca termine.
1.3 Bucle do-while (hacer-mientras)
El bucle do-while (también llamado "hacer-mientras") es similar al while, pero evalúa la condición al final. Esto garantiza que el bloque de código se ejecute al menos una vez, incluso si la condición es falsa desde el principio.
Importante en Java: Al igual que en while, la condición es la condición para repetir el bucle. Se repite MIENTRAS la condición sea verdadera.
Sintaxis:
- PSeInt:
Repetir ... Hasta Que condicion (Nota: en PSeInt la condición es de salida)
- Java:
do { ... } while (condicion);
Ejemplo en PSeInt: Pedir un número hasta que sea positivo
Algoritmo EjemploDoWhile
Definir numero Como Entero
Repetir
Escribir "Introduce un número positivo: "
Leer numero
Hasta Que numero > 0
Escribir "Número válido: ", numero
FinAlgoritmo
Diagrama de Flujo
Ejemplo en Java: Sacar un número aleatorio que sea superior a 0.8.
public class EjemploDoWhile {
public static void main(String[] args) {
Double aleatorio;
Integer intentos = 1;
do {
aleatorio = Math.random(); // Genera un número aleatorio entre 0.0 y 0.9999...
System.out.println("Intento " + intentos++ + ": Ha salido " + aleatorio);
} while (aleatorio < 0.8);
System.out.println("Lo hemos conseguido.");
}
}
Diferencia clave: El bucle while puede no ejecutarse nunca si la condición es falsa al principio. El bucle do-while siempre se ejecuta al menos una vez.
1.4 Bucle for (para)
El bucle for (también llamado "para") es una estructura de repetición especialmente útil cuando sabemos exactamente cuántas veces queremos repetir el bloque de código. Agrupa en una sola línea tres elementos: inicialización, condición y actualización.
Importante en Java: Al igual que en los bucles anteriores, la condición es la condición para repetir el bucle. Se repite MIENTRAS la condición sea verdadera.
Sintaxis:
- PSeInt:
Para variable <- inicio Hasta fin Con Paso paso Hacer ... FinPara
- Java:
for (inicializacion; condicion; actualizacion) { ... }
Ejemplo en PSeInt: Mostrar números pares del 2 al 10
Algoritmo EjemploFor
Definir i Como Entero
Para i <- 2 Hasta 10 Con Paso 2 Hacer
Escribir "Número par: ", i
FinPara
FinAlgoritmo
Diagrama de Flujo
Ejemplo en Java: Mostrar números pares del 2 al 10
public class EjemploFor {
public static void main(String[] args) {
for (Integer i = 2; i <= 10; i += 2) {
System.out.println("Número par: " + i);
}
}
}
Desglose del for en Java:
// for (inicialización; condición; actualización)
for (Integer i = 0; i < 5; i = i + 1) {
// Código que se repite 5 veces
}
// Paso 1: i = 0 (se ejecuta una sola vez al principio)
// Paso 2: ¿i < 5? (0 < 5 → true) → ejecuta el bloque
// Paso 3: i = i + 1 (i pasa a ser 1)
// Paso 4: ¿i < 5? (1 < 5 → true) → ejecuta el bloque
// ... se repite hasta que i = 5 (5 < 5 → false) → sale del bucle
Usos típicos de cada bucle:
- for: Cuando sabes el número exacto de repeticiones (ej: recorrer números del 1 al 100).
- while: Cuando no sabes cuántas veces se repetirá y la condición se evalúa al principio (ej: esperar a que el usuario introduzca un valor válido).
- do-while: Similar al while, pero necesitas que el código se ejecute al menos una vez (ej: mostrar un menú al menos una vez).
1.5 Bucles anidados
Un bucle anidado es un bucle que se encuentra dentro de otro bucle. Por cada iteración del bucle externo, el bucle interno se ejecuta completamente (todas sus iteraciones).
Los bucles anidados son muy útiles para trabajar con estructuras de datos bidimensionales (tablas, matrices) o para generar patrones complejos.
Ejemplo en PSeInt: Tabla de multiplicar del 1 al 3
Algoritmo BuclesAnidados
Definir i, j Como Entero
Para i <- 1 Hasta 3 Hacer
Escribir "Tabla del ", i, ":"
Para j <- 1 Hasta 3 Hacer
Escribir " ", i, " x ", j, " = ", i * j
FinPara
Escribir "" // Línea en blanco entre tablas
FinPara
FinAlgoritmo
Diagrama de Flujo
Ejemplo en Java: Tabla de multiplicar del 1 al 3
public class BuclesAnidados {
public static void main(String[] args) {
for (Integer i = 1; i <= 3; i = i + 1) {
System.out.println("Tabla del " + i + ":");
for (Integer j = 1; j <= 3; j = j + 1) {
System.out.println(" " + i + " x " + j + " = " + (i * j));
}
System.out.println(); // Línea en blanco entre tablas
}
}
}
Ejemplo de patrón con asteriscos:
public class PatronAsteriscos {
public static void main(String[] args) {
Integer filas = 5;
Integer columnas = 5;
for (Integer i = 1; i <= filas; i = i + 1) {
for (Integer j = 1; j <= columnas; j = j + 1) {
System.out.print("*");
}
System.out.println(); // Salto de línea al final de cada fila
}
}
}
// Salida:
// *****
// *****
// *****
// *****
// *****
Complejidad: Si el bucle externo se repite n veces y el interno m veces, el bloque interior se ejecutará n × m veces. Por ejemplo, si n=10 y m=10, el bloque interior se ejecuta 100 veces.
2. Ejercicios
2.1 Sumatorio de números (Nivel básico)
Crea un programa en Java llamado Sumatorio que calcule la suma de los números del 1 al 100 utilizando un bucle while.
Datos fijos en el código: No se usa Scanner. El límite superior es 100.
Resultado esperado: La suma de los números del 1 al 100 es: 5050
Pista: Necesitarás una variable suma que empiece en 0 y una variable contador que vaya de 1 a 100.
2.2 Factorial de un número (Nivel básico)
Crea un programa en Java llamado Factorial que calcule el factorial de un número fijo (por ejemplo, 7) utilizando un bucle for.
Recordatorio: El factorial de un número n (escrito como n!) es el producto de todos los números enteros desde 1 hasta n. Ejemplo: 5! = 5 × 4 × 3 × 2 × 1 = 120
Datos fijos en el código: Integer numero = 7;
Resultado esperado: El factorial de 7 es: 5040
2.3 Pirámide de números (Nivel intermedio - requiere bucles anidados)
Crea un programa en Java llamado PiramideNumeros que genere la siguiente pirámide de números usando bucles anidados (for dentro de for):
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
Datos fijos: La altura de la pirámide es 5 filas.
Pistas:
- El bucle externo controla el número de filas (de 1 a 5).
- El bucle interno controla los números que se muestran en cada fila (de 1 hasta el número de fila actual).
- Usa
System.out.print() para los números y System.out.println() para saltar de línea al final de cada fila.
2.4 Tabla de multiplicar completa (Nivel intermedio - requiere bucles anidados)
Crea un programa en Java llamado TablasMultiplicar que muestre las tablas de multiplicar del 1 al 5 (ambas incluidas) usando bucles anidados.
Formato esperado:
Tabla del 1:
1 x 1 = 1
1 x 2 = 2
...
1 x 10 = 10
Tabla del 2:
2 x 1 = 2
2 x 2 = 4
...
2 x 10 = 20
(continuar hasta tabla del 5)
Datos fijos: Las tablas son del 1 al 5, y cada tabla llega hasta el 10.
Pista: Necesitas dos bucles for anidados. El bucle externo recorre los números de la tabla (1 a 5) y el bucle interno recorre los multiplicadores (1 a 10).
Reto: El triángulo de Floyd
El Triángulo de Floyd es un triángulo rectángulo formado con números naturales consecutivos. Por ejemplo, para 4 filas:
1
2 3
4 5 6
7 8 9 10
Desarrolla un programa en Java llamado TrianguloFloyd que:
- Genere el Triángulo de Floyd con 7 filas (dato fijo en el código).
- Utilice bucles anidados (un for externo para las filas y un for interno para los números de cada fila).
- Mantenga un contador global que vaya incrementándose en cada número mostrado.
- Al final, muestre también la suma total de todos los números del triángulo.
Ejemplo de salida para 7 filas (solo se muestran las primeras filas como referencia):
Triángulo de Floyd (7 filas):
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
22 23 24 25 26 27 28
La suma total de todos los números es: 406
Pistas avanzadas:
- La suma total se puede calcular de dos formas: acumulando mientras muestras los números, o usando la fórmula de la suma de los primeros N números (siendo N el último número del triángulo).
- Para saber cuál es el último número del triángulo, puedes calcular la suma de los primeros 7 números (filas): 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28, que es el último número mostrado.
- ¡Ojo con el formato! Los números deben separarse con espacios, no con saltos de línea.