Skip to content

Laboratorio 02 — Reglas de cobro

Bloque: 4.2 — Estructuras condicionales


CampoInformación
Nombre
Grupo
Fecha
Duración estimadaDos sesiones de laboratorio (1 hora cada una) más el tiempo de cierre fuera de clase
ModalidadIndividual
Punto de partidaTu programa del Laboratorio 01

El ticket del Laboratorio 01 funciona, pero la encargada de la Cafetería El Byte encontró problemas en la primera semana:

  • Un cajero presionó Enter cuatro veces sin capturar nada y el programa imprimió un ticket de $0.
  • Un cliente pagó $100 por un pedido de $143 y el ticket le mostró un cambio de −$43.
  • La cafetería lanzó una promoción y da descuentos a estudiantes y personal, pero el cajero los calcula a mano.
  • Algunos clientes pagan con tarjeta y el programa siempre pide efectivo.

Tu programa tiene que decidir.


Ampliar el programa del Laboratorio 01 con estructuras condicionales simples, dobles, múltiples y anidadas para aplicar las reglas de cobro de la cafetería, y verificar cada ruta del algoritmo con un plan de pruebas.


  • Identificas qué tipo de condicional requiere cada regla.
  • Usas una condicional múltiple (Segun) con su caso De Otro Modo.
  • Anidas una decisión que depende de otra.
  • Ordenas las decisiones para no superar tres niveles de anidamiento.
  • Diseñas un plan de pruebas que recorre todas las rutas y las fronteras.

Conocimientos: bloque 4.2 completo y la especificación de estructuras de la unidad.

Herramienta: PSeInt con el perfil Flexible.

Archivo: tu lab01_ticket_<apellido>.psc y su pseudocódigo. Si tu Laboratorio 01 tuvo observaciones, corrígelas antes de empezar.


El menú y los precios no cambian (precios con IVA incluido):

CódigoProductoPrecio
1Café americano$25.00
2Capuchino$38.00
3Sándwich de pollo$55.00
4Agua embotellada$15.00
#ReglaEstructura que practica
R1Pedido vacío. Si el pedido no tiene artículos, se muestra “Pedido vacío” y no se cobra nada.Condicional (primera rama de la decisión principal)
R2Combo desayuno. Si el pedido tiene al menos un café americano y al menos un sándwich, se descuentan $10 del subtotal. Se aplica una sola vez por pedido.Simple con condición compuesta
R3Tipo de cliente. 1 = estudiante (10 % de descuento), 2 = personal (5 %), 3 = público general (sin descuento). Cualquier otro código: “Tipo de cliente no válido” y no se cobra. El porcentaje se aplica después del combo.Múltiple (Segun)
R4Forma de pago. 1 = efectivo, 2 = tarjeta. Con tarjeta no se pide importe ni se calcula cambio.Doble
R5Pago insuficiente. En efectivo, si el importe recibido no alcanza, se muestra cuánto falta en lugar del cambio.Anidada (dentro de efectivo)

El descuento del cliente y el total se redondean a centavos con redon(x * 100) / 100. La base sin IVA y el IVA se calculan sobre el total con descuentos.


Si cada regla se anida dentro de la anterior, el algoritmo llega a cuatro o cinco niveles. Para evitarlo:

  1. Lee primero todas las cantidades y el tipo de cliente.
  2. Resuelve el tipo de cliente con Segun y guarda si es válido en una variable LOGICO.
  3. Usa una cadena para la decisión principal:
Si <pedido vacío> Entonces
...
Sino Si <cliente no válido> Entonces
...
Sino
... cobro: combo, descuentos, ticket, forma de pago
FinSi
  1. Dentro del cobro, la forma de pago (doble) y, dentro de efectivo, el pago suficiente (anidada).

Así el nivel más profundo es el tercero.


En tu hoja de trabajo agrega una tabla de decisiones:

ReglaCondiciónTipo de condicionalRutas que genera
R1
R2
R3
R4
R5

Declara como constantes el descuento del combo y los porcentajes de cada tipo de cliente.

Punto de verificación 1: ¿Cuántas rutas distintas tiene tu algoritmo de principio a fin? Cuéntalas antes de escribir el pseudocódigo.

Parte del pseudocódigo del Laboratorio 01 y agrega las decisiones en el orden de la sección 6. El ticket muestra, en este orden:

  1. Encabezado y detalle de productos (igual que en el Laboratorio 01)
  2. Número de artículos y subtotal
  3. La línea “Combo desayuno: -$10” solo si se aplicó
  4. El descuento del cliente
  5. Total, base sin IVA e IVA
  6. Forma de pago y, en efectivo, pago y cambio o faltante

Completa la tabla con tu prueba de escritorio antes de usar PSeInt.

CasoAmericanoCapuchinoSándwichAguaClientePago conImporteTotal esperadoResultado esperado
Estudiante en efectivo21101Efectivo200
Público con tarjeta02013Tarjeta—
Personal, efectivo insuficiente10112Efectivo50
Pedido vacío00001———
Cliente no válido10007———
Pago exacto00113Efectivo70
Combo con tarjeta10102Tarjeta—

Punto de verificación 2: ¿Cada regla (R1 a R5) aparece en al menos un caso con la condición verdadera y en otro con la condición falsa?

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

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

Traduce con las reglas de la especificación de estructuras. Recuerda que la cadena Sino Si se traduce con Si anidados dentro de cada SiNo.

Punto de verificación 3: ¿Los siete casos coinciden con tu plan de pruebas?

Paso 5 — Supuestos que todavía no se revisan

Section titled “Paso 5 — Supuestos que todavía no se revisan”

Ejecuta el programa escribiendo 3 como forma de pago. Anota qué ocurre y responde la reflexión.


SíntomaCausa probableQué revisar
El combo se aplica con solo un caféSe usó O en lugar de YCondición de R2
El descuento del estudiante se calcula sobre $143 en lugar de $133El porcentaje se aplicó antes de restar el comboOrden de los cálculos
Con el cliente 7 se imprime el ticketFalta De Otro Modo o no se revisa la variable LOGICOR3 y la cadena principal
Con tarjeta se pide el importe recibidoLa entrada del pago está fuera de la rama de efectivoUbicación de Entrada: pago
PSeInt marca error en Sino SiSe tradujo la cadena en una sola líneaTraducción con Si anidados
Se muestra “Combo desayuno: -$0”La línea del combo no está dentro de su condicional simpleR2 en la salida

  1. ¿Qué hizo tu programa con la forma de pago 3? ¿Es correcto? ¿Qué estructura usarías para responder “Forma de pago no válida”?
  2. ¿Por qué el tipo de cliente se resolvió con Segun y el pedido vacío no?
  3. Si la cafetería decide que el combo se aplica por cada pareja de americano y sándwich (dos americanos y dos sándwiches = $20 de descuento), ¿se necesita una condicional más o basta un cálculo? Escribe la expresión.
  4. Si el cajero se equivoca en el tipo de cliente, hoy tiene que volver a capturar todo el pedido. ¿Qué estructura permitiría pedir de nuevo solo ese dato?

Implementa la regla de la pregunta 3: un descuento de $10 por cada combo completo. Pista: el número de combos es el menor entre la cantidad de americanos y la de sándwiches.


EvidenciaRequerida
Tabla de decisiones (Paso 1)Sí
PseudocódigoSí
Diagrama de flujo de la decisión principal y de la forma de pagoSí
Plan de pruebas de los siete casosSí
Archivo .psc de PSeIntSí
Captura de pantalla de los casos “Estudiante en efectivo” y “Personal, efectivo insuficiente”Sí
Respuestas de reflexiónSí
Reto adicionalNo

Nombre del archivo PSeInt: lab02_reglas_<apellido>.psc. Conserva este archivo: es el punto de partida del Laboratorio 03.

Medio y fecha de entrega: los indica el profesor.


Lista de cotejo:

CriterioCumpleNo cumple
La tabla de decisiones identifica correctamente el tipo de condicional de cada regla
R1: el pedido vacío no imprime ticket
R2: el combo usa una condición compuesta con Y y su línea solo aparece cuando se aplica
R3: el tipo de cliente usa Segun con De Otro Modo y el porcentaje se aplica después del combo
R4 y R5: con tarjeta no se pide importe y en efectivo se muestra cambio o faltante
El anidamiento no supera tres niveles
Los descuentos y el total se redondean a centavos
El plan de pruebas cubre todas las rutas y sus resultados son correctos
La ejecución en PSeInt coincide con el plan de pruebas
Las respuestas de reflexión identifican los supuestos que aún no se revisan