Skip to content

Laboratorio 03 — Cierre de caja

Bloque: 4.3 — Estructuras repetitivas


CampoInformación
Nombre
Grupo
Fecha
Duración estimadaUna sesión de laboratorio (1 hora) más el tiempo de cierre fuera de clase
ModalidadIndividual
Punto de partidaTu programa del Laboratorio 02

El programa del Laboratorio 02 cobra bien, pero la encargada de la Cafetería El Byte tiene dos quejas:

  • Hay que ejecutar el programa otra vez por cada cliente. En la hora de más movimiento eso retrasa la fila.
  • Cuando el cajero se equivoca en el tipo de cliente, el programa cancela el pedido y hay que capturarlo completo de nuevo.

Además, al final del turno quiere un cierre de caja: cuánto se vendió, cuántos pedidos se cobraron, cuál fue el pedido promedio y cuál fue el mayor.


Ampliar el programa del Laboratorio 02 con estructuras repetitivas para atender varios pedidos en una sola ejecución, validar las entradas sin cancelar el pedido y producir el cierre de caja del turno con contadores, acumuladores y un máximo.


  • Eliges el ciclo adecuado para cada repetición y justificas la elección.
  • Validas entradas con Repetir.
  • Usas contadores, acumuladores y un máximo correctamente inicializados.
  • Proteges el cálculo del promedio contra la división entre cero.
  • Pruebas el programa con turnos de cero, uno y varios pedidos cobrados.

Conocimientos: bloque 4.3 completo y la sección 9 de la especificación de estructuras.

Herramienta: PSeInt con el perfil Flexible.

Archivo: tu lab02_reglas_<apellido>.psc y su pseudocódigo, con las observaciones del Laboratorio 02 corregidas.


Las reglas R1, R2, R4 y R5 del Laboratorio 02 no cambian. Cambian o se agregan las siguientes:

#RequerimientoEstructura que practica
C1Turno completo. Después de cada pedido se pregunta “¿Registrar otro pedido? (1 sí, 2 no)”. El programa termina cuando se responde 2.Repetir (siempre hay al menos un pedido)
C2Tipo de cliente válido. Si el código no es 1, 2 o 3, se pide otra vez. Sustituye a la cancelación por “Tipo de cliente no válido” del Laboratorio 02.Repetir de validación
C3Forma de pago válida. Si no es 1 ni 2, se pide otra vez. Responde a la primera pregunta de reflexión del Laboratorio 02.Repetir de validación
C4Pedido cobrado. Un pedido cuenta como cobrado si se pagó con tarjeta o si el efectivo fue suficiente. Un pedido vacío o con efectivo insuficiente no se cobra.Condicional que actualiza contadores
C5Cierre de caja. Al terminar el turno se muestran los datos de la tabla 5.1.Contadores, acumulador, máximo
DatoCómo se obtiene
Pedidos cobradosContador de pedidos cobrados
Pedidos no cobradosContador de pedidos vacíos o con efectivo insuficiente
Pedidos pagados con tarjetaContador
Total vendidoAcumulador de los totales de los pedidos cobrados
Ticket promedioTotal vendido ÷ pedidos cobrados, redondeado a centavos
Pedido mayorMáximo de los totales de los pedidos cobrados

Si no se cobró ningún pedido, en lugar del ticket promedio y del pedido mayor se muestra “Sin ventas en el turno”.


<inicializar contadores, acumulador y máximo>
Repetir
<leer cantidades>
<leer tipo de cliente con validación>
<cadena del Laboratorio 02: pedido vacío / cobro>
<dentro del cobro: leer forma de pago con validación>
<efectivo o tarjeta, pago suficiente o insuficiente>
<actualizar contadores y acumuladores solo si se cobró>
<preguntar si hay otro pedido>
Hasta Que <no hay otro pedido>
<cierre de caja>

El ciclo del turno agrega un nivel de anidamiento a todo lo que ya tenías. Dentro del ciclo se conserva el límite de tres niveles del Laboratorio 02.

¿Dónde se inicializan los contadores, dentro o fuera del ciclo del turno? Justifícalo en tu reporte.


RepeticiónCiclo elegido¿Por qué?Condición de salida
Atender pedidos
Validar tipo de cliente
Validar forma de pago
Variable del cierrePatrónValor inicial¿Dónde se actualiza?

Punto de verificación 1: ¿Alguna de tus variables del cierre se inicializa dentro del ciclo del turno? Si es así, ¿qué pasaría al final?

Parte del pseudocódigo del Laboratorio 02. Elimina la rama “Tipo de cliente no válido” (ya no es posible llegar a ella) y agrega los ciclos y el cierre.

Paso 3 — Prueba de escritorio de un turno

Section titled “Paso 3 — Prueba de escritorio de un turno”

Turno de prueba (cada fila es un pedido, en este orden):

PedidoAmericanoCapuchinoSándwichAguaClientePago conImporte
12110Primero 7, después 1Efectivo200
202013Primero 5, después tarjeta (2)—
310112Efectivo50
400001——
510102Tarjeta (2)—

Completa una fila por pedido:

PedidoTotal del pedido¿Cobrado?CobradosNo cobradosCon tarjetaTotal vendidoPedido mayor
1
2
3
4
5

Cierre esperado: ________________________________________

Punto de verificación 2: ¿El total vendido coincide con la suma de los totales de los pedidos cobrados?

Paso 4 — Traducción y ejecución en PSeInt

Section titled “Paso 4 — Traducción y ejecución en PSeInt”

Ejecuta el turno de prueba completo en una sola ejecución.

Punto de verificación 3: ¿El cierre de caja de PSeInt coincide con tu prueba de escritorio?

Ejecuta dos turnos más y registra el cierre:

TurnoPedidosCierre esperadoCierre obtenido
Sin ventasUn solo pedido vacío
Un pedidoSolo el pedido 5 del turno de prueba

SíntomaCausa probableQué revisar
El programa nunca terminaLa condición de Hasta Que no puede cumplirse o la respuesta no se lee dentro del cicloCondición de C1
El programa termina después del primer pedidoLa condición de Hasta Que está invertidaHasta Que otroPedido = 2
El total vendido solo tiene el último pedidoEl acumulador se inicializa dentro del cicloInicialización antes de Repetir
El pedido con efectivo insuficiente suma al total vendidoLa actualización está fuera de la rama del pago suficienteUbicación de las actualizaciones (C4)
Error de división entre cero en el cierreNo se revisó que haya pedidos cobradosCondicional antes del promedio
La validación acepta el tipo de cliente 7Condición de Hasta Que escrita como si fuera de MientrasDebe terminar cuando el dato es válido

  1. ¿Por qué el ciclo del turno es Repetir y no Desde? ¿En qué situación de la cafetería sí usarías Desde?
  2. Un pedido con efectivo insuficiente hoy se pierde. ¿Cómo cambiarías el programa para pedir el importe otra vez hasta que alcance? ¿Cuántos niveles de anidamiento tendría?
  3. Si el pedido mayor se inicializa en 0, ¿hay algún caso en que el resultado sea incorrecto? ¿Por qué no ocurre en esta cafetería?
  4. El programa ya tiene más de 100 líneas y repite las mismas validaciones. ¿Qué dificultades notas para leerlo y modificarlo?

Agrega al cierre de caja cuántas piezas se vendieron de cada producto en el turno (solo de los pedidos cobrados) y cuál fue el producto más vendido.


EvidenciaRequerida
Tablas de análisis (Paso 1)Sí
PseudocódigoSí
Diagrama de flujo del ciclo del turno y del cierreSí
Prueba de escritorio del turno de pruebaSí
Archivo .psc de PSeIntSí
Captura del cierre de caja del turno de prueba y del turno sin ventasSí
Respuestas de reflexiónSí
Reto adicionalNo

Nombre del archivo PSeInt: lab03_cierre_<apellido>.psc. Es el punto de partida del proyecto de la unidad.

Medio y fecha de entrega: los indica el profesor.


Lista de cotejo:

CriterioCumpleNo cumple
El análisis justifica el ciclo elegido para cada repetición
C1: el turno usa Repetir y termina con la respuesta 2
C2 y C3: las validaciones usan Repetir con la condición de salida correcta
Las reglas R1, R2, R4 y R5 del Laboratorio 02 se conservan
C4: solo los pedidos cobrados actualizan el total vendido y el máximo
Los contadores, el acumulador y el máximo se inicializan antes del ciclo
El promedio se protege contra la división entre cero
La prueba de escritorio del turno es correcta
La ejecución en PSeInt coincide con la prueba de escritorio en los tres turnos
Las respuestas de reflexión identifican los límites del programa