Skip to content

11. Resolución de problemas con ciclos (4.3.5)

PreguntaSi la respuesta es sí
¿Sé cuántas veces se repite antes de empezar?Desde
¿Debe ejecutarse al menos una vez (pedir un dato, mostrar un menú)?Repetir
¿Puede no ejecutarse ninguna vez (datos hasta un centinela, condición que puede ser falsa desde el inicio)?Mientras

Cualquier ciclo puede escribirse con Mientras. Elegir el adecuado hace el algoritmo más claro y evita errores de inicialización.

Además de las rutas y las fronteras del bloque 4.2, un ciclo se prueba con:

CasoPor qué
Cero iteracionesRevela divisiones entre cero y variables sin valor
Una iteraciónRevela errores de inicialización de máximos y mínimos
Varias iteracionesEl caso normal
La última iteraciónRevela errores de < frente a <=

La prueba de escritorio de un ciclo se registra una fila por iteración, con el valor de cada variable al final de esa iteración.

Un número es primo si es mayor que 1 y solo es divisible entre 1 y entre sí mismo.

esPrimo = VERDADERO
Si numero < 2 Entonces
esPrimo = FALSO
FinSi
divisor = 2
Mientras divisor * divisor <= numero Y esPrimo = VERDADERO Hacer
Si numero % divisor = 0 Entonces
esPrimo = FALSO
FinSi
divisor = divisor + 1
FinMientras
  • esPrimo es una bandera: empieza en VERDADERO y cambia si se encuentra un divisor.
  • Basta revisar hasta divisor * divisor <= numero: si 25 tuviera un divisor mayor que 5, también tendría uno menor que 5.
  • La condición esPrimo = VERDADERO detiene el ciclo en cuanto se encuentra un divisor.
numeroDivisores revisadosIteracionesResultado
1Ninguno0No es primo
2Ninguno (4 <= 2 es falso)0Primo
92, 32No es primo
172, 3, 43Primo
252, 3, 4, 54No es primo

El 2 prueba el caso de cero iteraciones con resultado positivo. El 25 prueba la última iteración (5 * 5 <= 25).

El factorial de n (se escribe n!) es el producto de 1 × 2 × … × n. Por definición, 0! = 1.

  1. ¿Qué ciclo conviene? ¿Qué valor inicial necesita el acumulador?
  2. Desarrolla el algoritmo con validación de que n no sea negativo.
  3. Pruébalo:
nn!
01
11
5120
103628800

Producto: pseudocódigo, prueba de escritorio de n = 5 (una fila por iteración) y ejecución en PSeInt.

suma = 0
Desde i = 1 Hasta n Con Paso 2 Hacer
suma = suma + i
FinDesde
Mostrar suma
  1. Haz el trazado completo con n = 9: una fila por iteración con i y suma.
  2. ¿Qué muestra con n = 10? ¿Por qué no se suma el 11?
  3. ¿Qué muestra con n = 0? ¿Cuántas iteraciones hay?
  4. Describe en una frase qué calcula el algoritmo.

Producto: ficha de trazado.

El algoritmo debería calcular el promedio de n temperaturas. Tiene cuatro errores.

Inicio
ENTERO n
ENTERO i
REAL temperatura
REAL suma
REAL promedio
Mostrar "Número de lecturas: "
Entrada: n
i = 1
Mientras i < n Hacer
suma = 0
Mostrar "Temperatura ", i, ": "
Entrada: temperatura
suma = suma + temperatura
FinMientras
promedio = suma / n
Mostrar "Promedio: ", promedio
Fin

Producto: ficha de depuración, algoritmo corregido y plan de pruebas con 0, 1 y 3 lecturas.

ErrorConsecuencia
Falta la actualización de la variable de controlCiclo infinito
< en lugar de <=Una iteración de menos
Acumulador o contador inicializado dentro del cicloSolo conserva el último dato
Acumulador de producto iniciado en 0El resultado siempre es 0
Condición de Repetir escrita como si fuera de MientrasEl ciclo termina en cuanto el dato es inválido
Centinela sin lectura previaLa primera evaluación usa un valor indefinido
Centinela procesado como datoEl 0 se cuenta como un gasto más
Dividir entre el contador sin revisar que sea mayor que 0División entre cero cuando no hubo datos
TareaQué debes resolverEstructuras
Ventas de la semanaCapturar la venta de cada día de la semana y mostrar el total, el promedio, el mejor día con su nombre y cuántos días no hubo ventasDesde, Repetir para validar, Segun
Número inverso y palíndromoInvertir las cifras de un entero de cualquier tamaño e indicar si se lee igual al revésMientras, Repetir para validar

Cada tarea se entrega con hoja de trabajo, diagrama de flujo, prueba de escritorio por iteración, plan de pruebas (cero, una y varias iteraciones) y ejecución en PSeInt.

Las instrucciones completas están en la hoja de cada tarea: consulta las tareas de la unidad.

En el Laboratorio 03 · Cierre de caja la Cafetería El Byte atiende un turno completo:

  • cobrar varios pedidos en una sola ejecución
  • volver a pedir un tipo de cliente o una forma de pago inválidos
  • al final del turno, mostrar el total vendido, el número de pedidos cobrados, el ticket promedio y el pedido mayor

Partirás del programa del Laboratorio 02. Las instrucciones y los datos de prueba están en la guía del Laboratorio 03.

SituaciónCiclo
Número de repeticiones conocido antes de empezarDesde
Al menos una vez: validar, menúRepetir
Puede ser ninguna vez: centinela, condición inicialMientras
PatrónSe inicializaSe actualiza
ContadorEn 0, antes del ciclo+ 1 dentro
AcumuladorEn 0 (suma) o en 1 (producto), antesCon cada dato, dentro
Máximo, mínimoCon un valor imposible o con el primer datoCon una condicional simple, dentro
BanderaEn VERDADERO o FALSO, antesCuando se cumple la condición buscada

Un ciclo se prueba con cero, una y varias iteraciones.

Continúa con 12. Proyecto integrador y cierre.