Unidad IV

Estructuras algorítmicas

Lógica de Programación y Pensamiento Computacional

Facultad de Informática Culiacán · Universidad Autónoma de Sinaloa

Escudo de la Universidad Autónoma de Sinaloa Escudo de la Facultad de Informática Culiacán
UAS - Lógica de Programación y Pensamiento Computacional

La pregunta de la unidad

En la Unidad III aprendiste a pasar de un problema a una propuesta algorítmica verificada y documentada.

Todos esos algoritmos ejecutaban sus instrucciones una sola vez y en el mismo orden.

UAS - Lógica de Programación y Pensamiento Computacional

Tres formas de controlar la ejecución

Estructura Qué hace Pregunta que responde
Secuencial Ejecuta cada instrucción una vez, en orden ¿Qué pasos siguen siempre al anterior?
Condicional Ejecuta un bloque solo si se cumple una condición ¿Qué hago si ocurre esto y qué hago si no?
Repetitiva Ejecuta un bloque varias veces ¿Qué debo repetir y cuándo me detengo?

Cualquier algoritmo, por grande que sea, se construye combinando estas tres estructuras.

UAS - Lógica de Programación y Pensamiento Computacional

Ruta de la unidad

Bloque Tema
4.1 Estructuras secuenciales 4.1.1 Instrucciones de entrada/salida
4.1.2 Resolución de problemas
4.2 Estructuras condicionales Simples, dobles, múltiples, anidadas y resolución de problemas
4.3 Estructuras repetitivas Mientras, Repetir, Desde y resolución de problemas
Integración Proyecto de la unidad

Cada tema puede requerir una o varias sesiones de clase.

UAS - Lógica de Programación y Pensamiento Computacional

Lo que ya sabes y vas a usar

De la Unidad II

Tipos de datos, operadores aritméticos (incluido el residuo %), relacionales y lógicos, prioridad de operadores y funciones matemáticas.

De la Unidad III

Hoja de trabajo, notación de pseudocódigo, diagrama de flujo, prueba de escritorio con caso normal y caso límite, y traducción a PSeInt.

No se vuelven a explicar. Cada problema de esta unidad se resuelve con la misma metodología.

UAS - Lógica de Programación y Pensamiento Computacional

El caso de la unidad: Cafetería El Byte

Una cafetería pequeña dentro de una facultad (negocio ficticio). Atiende de 7:00 a 15:00.

Hoy

Cobra con calculadora y notas a mano. Se equivoca en el total y en el cambio. Al final del turno nadie sabe cuánto se vendió.

Meta

Un programa en PSeInt que cobra un pedido, aplica reglas de descuento, valida el pago y hace el cierre de caja.

Código Producto Precio (IVA incluido)
1 Café americano $25.00
2 Capuchino $38.00
3 Sándwich de pollo $55.00
4 Agua embotellada $15.00
UAS - Lógica de Programación y Pensamiento Computacional

El caso crece con la unidad

Laboratorio 01   (4.1)   Ticket de un pedido        cantidades, total, IVA, cambio
      ↓
Laboratorio 02   (4.2)   Reglas de cobro            pago insuficiente, descuentos, menú
      ↓
Laboratorio 03   (4.3)   Cierre de caja             varios pedidos, totales del turno
      ↓
Proyecto                 Sistema de la cafetería    integración, documentación, exposición

Cada laboratorio parte del programa que entregaste en el anterior.

UAS - Lógica de Programación y Pensamiento Computacional

Instrucciones de entrada/salida

4.1.1

UAS - Lógica de Programación y Pensamiento Computacional

Propósito del tema

Al terminar este tema podrás:

  • explicar qué ocurre en la memoria cuando se ejecuta una entrada y cuando se ejecuta una salida
  • escribir mensajes de solicitud que indiquen exactamente qué dato se espera
  • diseñar una salida legible que combine texto, valores y unidades
  • anticipar la pantalla esperada de un algoritmo antes de ejecutarlo
  • detectar los errores más frecuentes de entrada y salida
UAS - Lógica de Programación y Pensamiento Computacional

¿Qué problema resuelven?

Un algoritmo sin entrada resuelve siempre el mismo caso:

Inicio
    REAL base = 8
    REAL altura = 5
    REAL area
    area = (base * altura) / 2
Fin

Calcula 20 y nadie lo ve. Le faltan dos cosas:

  • entrada: que el usuario decida los valores, para que sirva con cualquier triángulo
  • salida: que el resultado llegue a quien lo necesita

La entrada y la salida son la frontera entre el algoritmo y la persona que lo usa.

UAS - Lógica de Programación y Pensamiento Computacional

El modelo: usuario, memoria y pantalla

El usuario escribe 19 en el teclado. Entrada: edad guarda 19 en la celda edad de la memoria. Mostrar lee la celda y en la pantalla aparece Edad: 19
Instrucción Dirección Qué cambia en la memoria
Entrada: edad usuario → variable edad recibe el valor escrito. El valor anterior se pierde
Mostrar edad variable → pantalla Nada. La variable conserva su valor
UAS - Lógica de Programación y Pensamiento Computacional

Declarar es reservar memoria

Cuando el algoritmo declara un dato, se reserva un espacio en la memoria con un nombre y un tipo.

Siete celdas de memoria del recibo de luz. Las constantes PRECIO_KWH y CARGO_FIJO tienen fondo gris y ya tienen valor. Las variables tienen fondo blanco y valor desconocido
UAS - Lógica de Programación y Pensamiento Computacional

Qué ocurre al ejecutar una entrada

ENTERO edad
edad = 17
Entrada: edad        // el usuario escribe 19
Mostrar edad
Instrucción edad Pantalla
edad = 17 17
Entrada: edad 19 > 19
Mostrar edad 19 19
  1. La ejecución se detiene y espera a que el usuario escriba.
  2. El valor escrito se guarda en la variable y reemplaza al anterior.
  3. La ejecución continúa con la siguiente instrucción.
UAS - Lógica de Programación y Pensamiento Computacional

El supuesto de toda entrada

Toda entrada supone que el usuario escribe un valor del tipo declarado.

Declaración El usuario escribe Resultado en PSeInt
ENTERO edad 19 Correcto
ENTERO edad 19.5 Error de tipos: la ejecución se detiene
ENTERO edad diecinueve Error de tipos: la ejecución se detiene
CADENA nombre 19 Correcto: se guarda el texto "19"

Con estructuras secuenciales no se puede revisar si el dato es válido. Por eso cada problema declara sus supuestos y restricciones.

En el bloque 4.2 aprenderás a validar la entrada con estructuras condicionales.

UAS - Lógica de Programación y Pensamiento Computacional

El tipo se elige por el uso, no por la apariencia

Una matrícula como 20261234 está formada por dígitos, pero no es un número:

  • no se suma, ni se promedia, ni se multiplica
  • puede empezar con cero: 0045812
  • si se declara ENTERO, el cero inicial se pierde y se muestra 45812
CADENA matricula      // identifica, no se calcula con ella
ENTERO semestre       // se puede comparar o incrementar

Pregunta de control: ¿voy a hacer operaciones aritméticas con este dato? Si la respuesta es no, probablemente es una CADENA.

UAS - Lógica de Programación y Pensamiento Computacional

Mensaje de solicitud

El usuario no ve el pseudocódigo. Solo ve la pantalla.

Sin mensaje
Entrada: kilometros
Entrada: litros

La pantalla queda en blanco. El usuario no sabe qué escribir ni en qué orden.

Con mensaje de solicitud
Mostrar "Kilómetros recorridos: "
Entrada: kilometros
Mostrar "Litros cargados: "
Entrada: litros

Cada dato se pide por su nombre y en orden.

El mensaje de solicitud (prompt) es una salida: se escribe con Mostrar, justo antes de la entrada que anuncia.

UAS - Lógica de Programación y Pensamiento Computacional

Un buen mensaje de solicitud

Mensaje Problema
"Dato:" No dice qué dato
"Ingrese el precio:" No dice la unidad ni el formato
"Precio unitario en pesos (ej. 25.50): " Correcto
"Semestre (1 a 10): " Correcto: anuncia el rango esperado

Un buen mensaje indica qué dato, en qué unidad y, cuando ayuda, un ejemplo o un rango.

El mensaje informa, pero no obliga: el usuario todavía puede escribir 15 en el semestre. Revisarlo corresponde al bloque 4.2.

UAS - Lógica de Programación y Pensamiento Computacional

Qué se puede mostrar

Forma Ejemplo Pantalla con total = 143
Texto literal Mostrar "Gracias por su compra" Gracias por su compra
Valor de una variable Mostrar total 143
Texto y valor Mostrar "Total: $", total Total: $143
Resultado de una expresión Mostrar "Con propina: $", total * 1.10 Con propina: $157.3

Los elementos se separan con coma y se muestran uno junto al otro, sin espacio. Si quieres un espacio, escríbelo dentro de las comillas: "Total: $" frente a "Total:".

UAS - Lógica de Programación y Pensamiento Computacional

Comillas: texto o variable

REAL total
total = 143
Mostrar "total"
Mostrar total

Pantalla:

total
143
  • Entre comillas, la palabra se muestra tal como está escrita.
  • Sin comillas, se busca la variable y se muestra su valor.

Mostrar "total" es uno de los errores más frecuentes: el algoritmo calcula bien, pero el usuario nunca ve el resultado.

UAS - Lógica de Programación y Pensamiento Computacional

Mostrar una expresión: ventaja y límite

Mostrar "Doble: ", numero * 2

Ventaja: ahorra una variable cuando el valor solo se muestra una vez.

Límite: el resultado no queda guardado. Si después lo necesitas para otro cálculo, debes volver a calcularlo.

// Si el valor se usa más de una vez, guárdalo
doble = numero * 2
Mostrar "Doble: ", doble
triple = doble + numero

Criterio: si el valor se reutiliza o tiene un nombre propio en el problema (total, cambio, IVA), guárdalo en una variable.

UAS - Lógica de Programación y Pensamiento Computacional

Diseñar la salida

Misma información, dos pantallas:

Difícil de leer
258
283.8
318.8
Legible
Consumo del periodo: 258 kWh
Importe de energía: $283.8
Cargo fijo: $35
Total a pagar: $318.8

Una salida legible tiene una etiqueta por valor, la unidad (kWh, $, km/l) y sigue el orden en que el usuario la necesita: primero el detalle, al final lo que debe hacer (pagar, entregar).

UAS - Lógica de Programación y Pensamiento Computacional

Redondear un importe

Algunos cálculos producen muchos decimales:

baseSinIva = 143 / 1.16          // 123.2758620...

Para mostrar un importe en centavos se multiplica por 100, se redondea y se divide entre 100:

baseSinIva = redon(143 / 1.16 * 100) / 100     // 123.28
Paso Valor
143 / 1.16 123.2758...
* 100 12327.58...
redon(...) 12328
/ 100 123.28

redon(x) es una función predefinida: redondea al entero más cercano. Es la primera vez que la escribimos en la notación de la materia, y se escribe igual que en PSeInt.

UAS - Lógica de Programación y Pensamiento Computacional

Cómo muestra PSeInt los números

PSeInt no agrega ceros a la derecha: muestra 18.5, no 18.50, y 35, no 35.00.

Valor Pantalla en PSeInt
18.50 18.5
35.00 35
redon(143 / 1.16 * 100) / 100 123.28

Es una característica de la herramienta, no un error del algoritmo. El valor guardado es el mismo.

En la pantalla esperada escribe los números como los mostrará PSeInt. Así podrás comparar sin confusión.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: credencial de la biblioteca

La biblioteca necesita imprimir una credencial con los datos que proporciona el estudiante.

Inicio
    CADENA nombre
    CADENA matricula
    CADENA carrera
    ENTERO semestre

    Mostrar "Nombre completo: "
    Entrada: nombre
    Mostrar "Matrícula: "
    Entrada: matricula
    Mostrar "Carrera: "
    Entrada: carrera
    Mostrar "Semestre (1 a 10): "
    Entrada: semestre

    Mostrar "===== CREDENCIAL DE BIBLIOTECA ====="
    Mostrar "Nombre: ", nombre
    Mostrar "Matrícula: ", matricula
    Mostrar "Carrera: ", carrera, " · Semestre ", semestre
Fin
UAS - Lógica de Programación y Pensamiento Computacional

Credencial de la biblioteca: pantalla esperada

Entrada: Ana Sofía López, 0045812, Informática, 1

Nombre completo: 
> Ana Sofía López
Matrícula: 
> 0045812
Carrera: 
> Informática
Semestre (1 a 10): 
> 1
===== CREDENCIAL DE BIBLIOTECA =====
Nombre: Ana Sofía López
Matrícula: 0045812
Carrera: Informática · Semestre 1

Observa:

  • el 0 inicial de la matrícula se conserva porque es CADENA
  • cada Mostrar produce una línea nueva
  • el signo > lo agrega PSeInt cuando espera una entrada
UAS - Lógica de Programación y Pensamiento Computacional

Credencial de la biblioteca: así se ve al ejecutarse

Ventana de ejecución de la credencial. El algoritmo pide nombre, matrícula, carrera y semestre. El usuario escribe Ana Sofía López, 0045812, Informática y 1. Después se muestra la credencial

Lo que escribe el usuario aparece en amarillo. Todo lo demás lo muestra el algoritmo: los mensajes de solicitud y los resultados.

UAS - Lógica de Programación y Pensamiento Computacional

Traducción a PSeInt

Pseudocódigo PSeInt
Entrada: nombre Leer nombre
Mostrar "Total: $", total Escribir "Total: $", total
CADENA nombre Definir nombre Como Caracter

Variante útil de PSeInt:

Escribir Sin Saltar "Nombre completo: "
Leer nombre

Sin Saltar deja el cursor en la misma línea, de modo que el usuario escribe junto al mensaje. No cambia la lógica: es solo una mejora de la traducción.

UAS - Lógica de Programación y Pensamiento Computacional

Actividad guiada

Pantalla esperada

UAS - Lógica de Programación y Pensamiento Computacional

Actividad guiada · Pantalla esperada

Un estacionamiento cobra una tarifa fija por hora.

Inicio
    REAL TARIFA_HORA = 18.50
    ENTERO horas
    REAL importe

    Mostrar "Horas de estancia: "
    Entrada: horas
    importe = horas * TARIFA_HORA
    Mostrar "Tarifa por hora: $", TARIFA_HORA
    Mostrar "Total a pagar: $", importe
Fin
  1. Con horas = 3, escribe exactamente lo que aparecerá en la pantalla, línea por línea.
  2. Haz lo mismo con horas = 0.
  3. Si la línea importe = horas * TARIFA_HORA se moviera debajo del último Mostrar, ¿qué mostraría la última línea? ¿Por qué?

Producto: pantalla esperada de los dos casos y respuesta a la pregunta 3.

UAS - Lógica de Programación y Pensamiento Computacional

Práctica

Depuración de entrada y salida

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · Depuración de entrada y salida

Este algoritmo debería calcular el rendimiento de un automóvil en kilómetros por litro. Tiene cuatro errores de entrada y salida.

Inicio
    REAL kilometros
    REAL litros
    REAL rendimiento

    rendimiento = kilometros / litros
    Entrada: kilometros
    Mostrar "Litros cargados: "
    Entrada: litros
    Mostrar "Rendimiento: "
    Entrada: rendimiento
    Mostrar "rendimiento"
Fin
  1. Localiza cada error y explica qué vería el usuario por su causa.
  2. Escribe el algoritmo corregido.
  3. Escribe la pantalla esperada con 420 km y 30 litros.

Producto: ficha de depuración con los cuatro errores, el algoritmo corregido y la pantalla esperada.

UAS - Lógica de Programación y Pensamiento Computacional

Errores frecuentes de entrada y salida

Error Síntoma en pantalla
Calcular antes de leer Resultado 0 o error de división por cero
Entrada sin mensaje de solicitud Pantalla en blanco esperando un dato
Pedir al usuario un resultado El usuario debe calcular lo que el algoritmo debía calcular
Variable entre comillas Aparece el nombre de la variable, no su valor
Mostrar antes de calcular Aparece 0 (PSeInt) o un valor indefinido
Valor sin etiqueta ni unidad Números sueltos que el usuario no sabe interpretar
UAS - Lógica de Programación y Pensamiento Computacional

Cierre del tema

  • [ ] Explico qué cambia en la memoria con Entrada: y qué no cambia con Mostrar.
  • [ ] Escribo un mensaje de solicitud antes de cada entrada.
  • [ ] Elijo el tipo de un dato por el uso que tendrá.
  • [ ] Distingo entre Mostrar "total" y Mostrar total.
  • [ ] Escribo la pantalla esperada de un algoritmo antes de ejecutarlo.
UAS - Lógica de Programación y Pensamiento Computacional

Resolución de problemas secuenciales

4.1.2

UAS - Lógica de Programación y Pensamiento Computacional

Propósito del tema

Al terminar este tema podrás:

  • reconocer si un problema se puede resolver con una estructura secuencial
  • identificar el patrón del problema: fórmula encadenada, porcentaje, cálculo inverso o descomposición
  • usar división entera y residuo para descomponer una cantidad
  • resolver el problema completo con la metodología de la Unidad III
  • explicar qué supuesto deja de cumplirse cuando la secuencia ya no basta
UAS - Lógica de Programación y Pensamiento Computacional

¿Qué es una estructura secuencial?

Una estructura secuencial es un conjunto de instrucciones que se ejecutan una sola vez cada una, en el orden en que están escritas.

 Inicio → Entrada → Proceso 1 → Proceso 2 → ... → Salida → Fin

Supuesto: el mismo procedimiento sirve para cualquier entrada válida. No hay que decidir nada ni repetir nada.

Consecuencia: si conoces las entradas, puedes predecir exactamente cada valor intermedio y la salida. Por eso la prueba de escritorio de una secuencia tiene una sola ruta.

UAS - Lógica de Programación y Pensamiento Computacional

¿Cuándo basta una secuencia?

Pregúntate antes de diseñar:

Pregunta Si la respuesta es sí
¿El cálculo cambia según el valor de un dato? Necesitas una condicional (bloque 4.2)
¿Hay que revisar si el dato es válido? Necesitas una condicional (bloque 4.2)
¿Hay que procesar varios datos del mismo tipo, sin saber cuántos? Necesitas una repetitiva (bloque 4.3)
Ninguna de las anteriores Una secuencia es suficiente

Ejemplo: "calcular el total de una compra de 3 productos" es secuencial. "Aplicar 10 % de descuento solo si el cliente es estudiante" ya no lo es.

UAS - Lógica de Programación y Pensamiento Computacional

Cuatro patrones de problemas secuenciales

Patrón Idea Ejemplo
Fórmula encadenada Un resultado intermedio alimenta el siguiente cálculo Recibo de luz
Porcentaje Una parte se calcula como fracción de un total Propina, IVA
Cálculo inverso Se despeja un dato que normalmente es entrada Precio sin IVA a partir del precio con IVA
Descomposición Una cantidad se reparte en unidades mayores y un sobrante Segundos en horas, minutos y segundos

Reconocer el patrón te dice qué operaciones necesitas antes de escribir el pseudocódigo.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo 1

Recibo de luz

UAS - Lógica de Programación y Pensamiento Computacional

Recibo de luz · Problema y análisis

Calcular el importe de un recibo de luz a partir de dos lecturas del medidor. El precio por kWh es fijo y se suma un cargo fijo por periodo.

Los valores de la tarifa son ficticios, solo para el ejercicio.

Elemento Contenido
Entradas lecturaAnterior, lecturaActual (kWh, enteros)
Datos conocidos PRECIO_KWH = 1.10, CARGO_FIJO = 35.00
Resultados consumo, importeEnergia, total
Proceso consumo → importe de energía → total (fórmula encadenada)
Restricción lecturaActual >= lecturaAnterior
UAS - Lógica de Programación y Pensamiento Computacional

Recibo de luz · Pseudocódigo

Inicio
    REAL PRECIO_KWH = 1.10
    REAL CARGO_FIJO = 35.00
    ENTERO lecturaAnterior
    ENTERO lecturaActual
    ENTERO consumo
    REAL importeEnergia
    REAL total

    Mostrar "Lectura anterior del medidor (kWh): "
    Entrada: lecturaAnterior
    Mostrar "Lectura actual del medidor (kWh): "
    Entrada: lecturaActual

    consumo = lecturaActual - lecturaAnterior
    importeEnergia = consumo * PRECIO_KWH
    total = importeEnergia + CARGO_FIJO

    Mostrar "Consumo del periodo: ", consumo, " kWh"
    Mostrar "Importe de energía: $", importeEnergia
    Mostrar "Cargo fijo: $", CARGO_FIJO
    Mostrar "Total a pagar: $", total
Fin
UAS - Lógica de Programación y Pensamiento Computacional

Recibo de luz · La memoria paso a paso

Tres columnas con las siete celdas de memoria del recibo. Después de declarar solo las constantes tienen valor. Después de las entradas, lecturaAnterior 15230 y lecturaActual 15488. Después del proceso, consumo 258, importeEnergia 283.8 y total 318.8
UAS - Lógica de Programación y Pensamiento Computacional

Recibo de luz · Prueba de escritorio

Caso lecturaAnterior lecturaActual consumo importeEnergia total
Normal 15230 15488 258 283.8 318.8
Límite (sin consumo) 15488 15488 0 0 35

Pantalla del caso normal (después de las entradas):

Consumo del periodo: 258 kWh
Importe de energía: $283.8
Cargo fijo: $35
Total a pagar: $318.8

Supuesto que no se puede revisar aquí: si el usuario invierte las lecturas, el consumo sale negativo (−258) y el total también. Detectarlo requiere una condicional.

UAS - Lógica de Programación y Pensamiento Computacional

Recibo de luz · Así se ve al ejecutarse

Ventana de ejecución del recibo de luz con las entradas 15230 y 15488 y el resultado Total a pagar: $318.8

La pantalla esperada de tu prueba de escritorio debe coincidir con esta ventana, línea por línea.

UAS - Lógica de Programación y Pensamiento Computacional

División entera y residuo

UAS - Lógica de Programación y Pensamiento Computacional

Repartir una cantidad en unidades mayores

¿Cuántas horas completas hay en 7385 segundos, y cuánto sobra?

7385 ÷ 3600 = 2.0513...

Necesitamos dos operaciones distintas:

Operación Notación Resultado Significado
División entera trunc(7385 / 3600) 2 Horas completas
Residuo 7385 % 3600 185 Segundos que sobran

trunc(x) es otra función predefinida: elimina la parte decimal sin redondear. El residuo % ya lo conoces de la Unidad II.

Comprobación: 2 * 3600 + 185 = 7385.

UAS - Lógica de Programación y Pensamiento Computacional

trunc no es redon

Para obtener cantidades completas siempre se usa trunc:

Segundos sobrantes x / 60 trunc(x / 60) redon(x / 60)
185 3.08 3 3
170 2.83 2 3 (incorrecto)

Con 170 segundos solo hay 2 minutos completos. redon diría 3, que es incorrecto.

Limitación: trunc de un número negativo elimina los decimales hacia el cero: trunc(-2.5) es -2. En estos problemas se supone que las cantidades no son negativas.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo 2

Segundos a horas, minutos y segundos

UAS - Lógica de Programación y Pensamiento Computacional

Segundos a horas, minutos y segundos · Análisis

Un cronómetro registra la duración de una actividad en segundos. Mostrarla en horas, minutos y segundos.

Elemento Contenido
Entrada totalSegundos (entero, no negativo)
Datos conocidos SEGUNDOS_HORA = 3600, SEGUNDOS_MINUTO = 60
Resultados horas, minutos, segundos
Proceso Descomposición: primero las horas, después con lo que sobra los minutos, al final los segundos

Estrategia: cada paso trabaja con lo que sobró del paso anterior. Por eso se guarda el residuo en una variable intermedia resto.

UAS - Lógica de Programación y Pensamiento Computacional

Segundos a horas, minutos y segundos · Pseudocódigo

Inicio
    ENTERO SEGUNDOS_HORA = 3600
    ENTERO SEGUNDOS_MINUTO = 60
    ENTERO totalSegundos
    ENTERO horas
    ENTERO minutos
    ENTERO segundos
    ENTERO resto

    Mostrar "Duración en segundos: "
    Entrada: totalSegundos

    horas = trunc(totalSegundos / SEGUNDOS_HORA)
    resto = totalSegundos % SEGUNDOS_HORA
    minutos = trunc(resto / SEGUNDOS_MINUTO)
    segundos = resto % SEGUNDOS_MINUTO

    Mostrar totalSegundos, " s equivalen a ", horas, " h ", minutos, " min ", segundos, " s"
Fin
UAS - Lógica de Programación y Pensamiento Computacional

Segundos a horas, minutos y segundos · Diagrama de flujo

Diagrama de flujo de la conversión de segundos. Primera columna: Inicio, proceso con las constantes SEGUNDOS_HORA = 3600 y SEGUNDOS_MINUTO = 60, Mostrar Duración en segundos, Entrada totalSegundos, conector A. Segunda columna: conector A, proceso horas = trunc(totalSegundos / SEGUNDOS_HORA), proceso resto = totalSegundos % SEGUNDOS_HORA, proceso minutos = trunc(resto / SEGUNDOS_MINUTO), proceso segundos = resto % SEGUNDOS_MINUTO, Mostrar el resultado, Fin

Un diagrama secuencial tiene una sola ruta de Inicio a Fin, sin decisiones.

UAS - Lógica de Programación y Pensamiento Computacional

Segundos a horas, minutos y segundos · Prueba de escritorio

Caso totalSegundos horas resto minutos segundos
Normal 7385 2 185 3 5
Menos de un minuto 59 0 59 0 59
Exactamente una hora 3600 1 0 0 0
Un día menos un segundo 86399 23 3599 59 59

Pantalla del caso normal:

7385 s equivalen a 2 h 3 min 5 s

Los casos límite se eligen en las fronteras de cada unidad: justo antes de un minuto, justo en una hora.

UAS - Lógica de Programación y Pensamiento Computacional

El mismo patrón, otros problemas

La descomposición con trunc y % aparece cada vez que una cantidad se reparte en unidades de distinto tamaño:

Problema Unidades
Duración de una película horas, minutos
Peso de un paquete en gramos kilogramos, gramos
Centímetros a medidas de obra metros, centímetros
Cifras de un número centenas, decenas, unidades
Cambio de una compra billetes y monedas

Lo que cambia es el tamaño de cada unidad, no el procedimiento.

UAS - Lógica de Programación y Pensamiento Computacional

Actividad guiada

Dividir la cuenta

UAS - Lógica de Programación y Pensamiento Computacional

Actividad guiada · Dividir la cuenta

Un grupo de amigos va a cenar. Quieren dividir la cuenta en partes iguales, incluyendo una propina expresada en porcentaje.

Construimos juntos la hoja de trabajo:

  1. Análisis: entradas, datos conocidos, resultados, patrón del problema
  2. Diseño de los datos y tipos (¿la cantidad de personas es REAL o ENTERO?)
  3. Pseudocódigo con mensajes de solicitud y salida legible
  4. Prueba con los casos:
Caso Cuenta Propina Personas Resultado esperado por persona
Normal 1240 10 % 4 341
Con decimales 1000 15 % 3 ?
UAS - Lógica de Programación y Pensamiento Computacional

Actividad guiada · Un centavo perdido

En el caso con decimales, cada persona paga 1150 / 3 = 383.333...

Si se redondea a centavos, cada persona paga 383.33.

383.33 * 3 = 1149.99

Falta un centavo para completar la cuenta.

  • ¿Es un error del algoritmo o una consecuencia del redondeo?
  • ¿Qué tendría que hacer el algoritmo para que una persona pague 383.34?
  • ¿Se puede resolver solo con una secuencia?

Discute con tu equipo y anota la conclusión.

UAS - Lógica de Programación y Pensamiento Computacional

Práctica

Cifras de un número

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · Cifras de un número

Desarrolla un algoritmo que reciba un número entero de tres cifras y muestre:

  • su cifra de las centenas, de las decenas y de las unidades
  • la suma de sus cifras
  • el número con las cifras en orden inverso
Caso Número Centenas Decenas Unidades Suma Inverso
Normal 472 4 7 2 13 274
Límite 100

Pista: la cifra de las unidades es lo que sobra al dividir entre 10.

Producto: hoja de trabajo completa, diagrama de flujo y traducción a PSeInt ejecutada con los dos casos.

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · ¿Qué pasa si se rompe el supuesto?

Ejecuta tu algoritmo con el número 85, que solo tiene dos cifras.

  1. ¿Qué cifras muestra? ¿Qué número inverso muestra?
  2. ¿El resultado es incorrecto, o es correcto para un problema distinto?
  3. ¿Qué tendría que decidir el algoritmo para manejar números de dos cifras?

Una secuencia funciona mientras se cumplan sus supuestos. Cuando el algoritmo necesita revisar un supuesto y actuar distinto según el resultado, necesita una estructura condicional.

UAS - Lógica de Programación y Pensamiento Computacional

Revisión del tema

Para cada problema, indica si se resuelve con una secuencia y, si es así, qué patrón utiliza:

Problema ¿Secuencia? Patrón o estructura necesaria
Convertir una distancia en kilómetros a millas
Calcular cuántas cajas de 12 piezas se llenan con un pedido y cuántas piezas sobran
Indicar si un año es bisiesto
Calcular el precio antes de un descuento conocido a partir del precio final
Sumar las calificaciones de un grupo cuyo tamaño no se conoce
UAS - Lógica de Programación y Pensamiento Computacional

Tareas

Desglose del cambio · Hora de llegada

UAS - Lógica de Programación y Pensamiento Computacional

Tareas del tema

Tarea Qué debes resolver Patrón
Desglose del cambio Calcular el cambio de una compra e indicar cuántos billetes y monedas de cada denominación se entregan Descomposición
Hora de llegada Calcular la hora de llegada de un autobús a partir de la hora de salida y la duración del viaje Descomposición

Cada tarea se entrega con su hoja de trabajo, prueba de escritorio y ejecución en PSeInt.

Las instrucciones completas están en la hoja de cada tarea.

UAS - Lógica de Programación y Pensamiento Computacional

Criterios con los que se revisarán las tareas

  • [ ] El análisis identifica entradas, datos conocidos, resultados, patrón y restricciones.
  • [ ] Cada entrada tiene un mensaje de solicitud.
  • [ ] Se usa trunc para cantidades completas y % para lo que sobra.
  • [ ] La salida tiene etiqueta y unidad en cada valor.
  • [ ] La prueba de escritorio incluye el caso normal y los casos límite pedidos.
  • [ ] La pantalla obtenida en PSeInt coincide con la pantalla esperada.
UAS - Lógica de Programación y Pensamiento Computacional

Relación con el Laboratorio 01

En el Laboratorio 01 · Ticket de un pedido aplicarás lo que viste en el bloque 4.1 al caso de la Cafetería El Byte:

  • entrada de las cantidades de un pedido
  • cálculo encadenado del total
  • cálculo inverso del IVA incluido
  • pago y cambio
  • un ticket legible en pantalla

Las instrucciones, los datos de prueba y la forma de entrega están en la guía del laboratorio.

UAS - Lógica de Programación y Pensamiento Computacional

Síntesis del bloque 4.1

ENTRADA                    PROCESO                         SALIDA
mensaje de solicitud  →    fórmula encadenada         →    etiqueta + valor + unidad
tipo según el uso          porcentaje                      en el orden que se necesita
                           cálculo inverso
                           descomposición (trunc, %)

Una estructura secuencial resuelve un problema cuando el mismo procedimiento sirve para todas las entradas válidas.

Cuando aparece un "solo si" o un "depende de", la secuencia ya no basta.

UAS - Lógica de Programación y Pensamiento Computacional

Estructuras condicionales

Bloque 4.2

UAS - Lógica de Programación y Pensamiento Computacional

Lo que la secuencia no pudo resolver

En el bloque 4.1 encontraste algoritmos correctos que fallaban cuando se rompía un supuesto:

Problema Lo que pasó Lo que faltaba
Recibo de luz con lecturas invertidas Consumo de −258 kWh Revisar las lecturas antes de calcular
Cifras del número 85 Inverso 580 Saber si tiene dos o tres cifras
Hora de llegada Se muestra 0:0 Agregar un cero solo si los minutos son menores que 10
Ticket con pago insuficiente Cambio de −$43 Avisar que falta dinero

En todos los casos el algoritmo necesitaba decidir.

UAS - Lógica de Programación y Pensamiento Computacional

¿Qué es una estructura condicional?

Una estructura condicional ejecuta un bloque de instrucciones solo si se cumple una condición.

La condición es una expresión lógica de la Unidad II: vale VERDADERO o FALSO.

subtotal < 300                    // relacional
semestre >= 1 Y semestre <= 10    // compuesta

Supuesto: la condición se puede evaluar con los datos disponibles en ese momento. Si depende de un dato que todavía no se lee o no se calcula, la decisión será incorrecta.

Consecuencia: a diferencia de la secuencia, ahora un algoritmo tiene varias rutas. La prueba de escritorio debe recorrer todas.

UAS - Lógica de Programación y Pensamiento Computacional

Cuatro formas de decidir

Forma Pregunta que responde Contenido
Simple ¿Hago algo adicional o no? 4.2.1
Doble ¿Hago esto o aquello? 4.2.2
Múltiple ¿Cuál de varias opciones, según un valor? 4.2.3
Anidada ¿Qué decido después de haber decidido otra cosa? 4.2.4

La notación completa, con su diagrama de flujo y su traducción a PSeInt, está en la especificación de estructuras de la unidad.

UAS - Lógica de Programación y Pensamiento Computacional

Condicional simple

4.2.1

UAS - Lógica de Programación y Pensamiento Computacional

Condicional simple

Si <condición> Entonces
    <instrucciones>
FinSi
  • Si la condición es verdadera, se ejecutan las instrucciones del bloque y después se sigue con lo que hay debajo de FinSi.
  • Si es falsa, el bloque se salta completo.

Se usa cuando existe una acción adicional que solo a veces ocurre: un cargo, un descuento, una advertencia.

Limitación: la condicional simple no dice qué hacer cuando la condición es falsa. Si ese caso necesita su propia acción, se requiere una condicional doble.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: envío gratis

Una tienda en línea cobra $79 de envío, excepto en compras de $300 o más. (Valores ficticios.)

Inicio
    REAL MINIMO_ENVIO_GRATIS = 300
    REAL COSTO_ENVIO = 79
    REAL subtotal
    REAL total

    Mostrar "Subtotal en pesos: "
    Entrada: subtotal

    total = subtotal
    Si subtotal < MINIMO_ENVIO_GRATIS Entonces
        total = total + COSTO_ENVIO
    FinSi

    Mostrar "Total a pagar: $", total
Fin

Patrón valor por omisión + condicional simple: total empieza igual al subtotal y solo cambia si hay que cobrar envío.

UAS - Lógica de Programación y Pensamiento Computacional

Envío gratis: diagrama y prueba

Diagrama de flujo del envío gratis. Después de leer el subtotal, total = subtotal. Decisión subtotal < MINIMO_ENVIO_GRATIS: por Sí, total = total + COSTO_ENVIO. Ambas ramas se unen y se muestra el total
Caso subtotal ¿Condición? total
Paga envío 250 Verdadera 329
Frontera 300 Falsa 300
Justo debajo 299.99 Verdadera 378.99
UAS - Lógica de Programación y Pensamiento Computacional

Las fronteras deciden

"Envío gratis desde $300" significa que 300 ya no paga envío.

Condición escrita ¿Qué pasa con 300? ¿Correcta?
subtotal < 300 No paga envío Sí
subtotal <= 300 Paga envío No

Cada vez que escribas una condición, prueba el valor exacto de la frontera y uno a cada lado. Ahí aparecen casi todos los errores de las condicionales.

UAS - Lógica de Programación y Pensamiento Computacional

Condicional doble

4.2.2

UAS - Lógica de Programación y Pensamiento Computacional

Condicional doble

Si <condición> Entonces
    <instrucciones si es verdadera>
Sino
    <instrucciones si es falsa>
FinSi

Se ejecuta exactamente una de las dos ramas, nunca las dos, nunca ninguna.

Se usa cuando los dos casos posibles necesitan acciones distintas.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: la hora con dos cifras

En la tarea "Hora de llegada" PSeInt mostraba 15:0. Ahora se puede decidir:

Si minutoLlegada < 10 Entonces
    Mostrar "Hora estimada de llegada: ", horaLlegada, ":0", minutoLlegada
Sino
    Mostrar "Hora estimada de llegada: ", horaLlegada, ":", minutoLlegada
FinSi
horaLlegada minutoLlegada Rama Pantalla
15 0 Verdadera Hora estimada de llegada: 15:00
8 45 Falsa Hora estimada de llegada: 8:45
1 9 Verdadera Hora estimada de llegada: 1:09
1 10 Falsa Hora estimada de llegada: 1:10

El valor no cambia. La decisión solo afecta cómo se muestra.

UAS - Lógica de Programación y Pensamiento Computacional

¿Dos simples o una doble?

Dos simples
Si nota >= 6 Entonces
    Mostrar "Acreditado"
FinSi
Si nota < 6 Entonces
    Mostrar "No acreditado"
FinSi

Evalúa dos condiciones. Si alguien escribe nota > 6 en la primera, el 6 no muestra nada.

Una doble
Si nota >= 6 Entonces
    Mostrar "Acreditado"
Sino
    Mostrar "No acreditado"
FinSi

Una sola condición. Es imposible que falten o sobren mensajes.

Cuando los casos son complementarios, usa una doble.

UAS - Lógica de Programación y Pensamiento Computacional

Actividad guiada

Recibo de luz con validación

UAS - Lógica de Programación y Pensamiento Computacional

Actividad guiada · Recibo de luz con validación

Retomamos el recibo de luz del bloque 4.1. Si las lecturas están invertidas, el algoritmo debe mostrar un error y no calcular el recibo.

  1. ¿Cuál es la condición? ¿Qué pasa si las dos lecturas son iguales?
  2. ¿Qué instrucciones van en cada rama? ¿Las entradas van dentro o fuera de la condicional?
  3. Escribe el pseudocódigo y dibuja el diagrama de flujo.
  4. Prueba con tres casos: normal (15230 y 15488), sin consumo (15488 y 15488) e invertidas (15488 y 15230).

Producto: pseudocódigo, diagrama y prueba de escritorio de las tres rutas.

UAS - Lógica de Programación y Pensamiento Computacional

Recibo de luz con validación: diagrama

Diagrama de flujo del recibo de luz con validación. Después de leer las dos lecturas, decisión lecturaActual >= lecturaAnterior. Rama Sí: calcular consumo, importeEnergia y total y mostrarlos. Rama No: mostrar Error: lecturas invertidas. Ambas ramas se unen antes de Fin

Las entradas quedan antes de la decisión: la condición necesita las dos lecturas.

UAS - Lógica de Programación y Pensamiento Computacional

Condiciones compuestas

Un rango se revisa con dos comparaciones:

Si semestre >= 1 Y semestre <= 10 Entonces
    Mostrar "Semestre registrado"
Sino
    Mostrar "El semestre debe estar entre 1 y 10"
FinSi
Escrito así Qué ocurre
1 <= semestre <= 10 No es una condición válida: hay que separar las dos comparaciones
semestre >= 1 O semestre <= 10 Siempre es verdadera: cualquier número cumple al menos una
semestre < 1 O semestre > 10 Correcta, pero describe lo contrario: el valor fuera del rango

Pregunta de control: con Y deben cumplirse todas, con O basta una.

UAS - Lógica de Programación y Pensamiento Computacional

Condicional múltiple

4.2.3

UAS - Lógica de Programación y Pensamiento Computacional

¿Qué problema resuelve?

Un cajero automático muestra un menú:

1. Consultar saldo
2. Depositar
3. Retirar

La acción depende del valor exacto de una variable. Con condicionales dobles habría que escribir Si opcion = 1 … Sino Si opcion = 2 … y repetir el nombre de la variable en cada comparación.

La condicional múltiple expresa directamente la idea: según el valor, haz esto.

UAS - Lógica de Programación y Pensamiento Computacional

Condicional múltiple: Segun

Segun <variable> Hacer
    <valor 1>:
        <instrucciones>
    <valor 2>, <valor 3>:
        <instrucciones>
    De Otro Modo:
        <instrucciones>
FinSegun
  • Se compara la variable con cada valor, de arriba hacia abajo, y se ejecuta solo el caso que coincide.
  • Un caso puede tener varios valores separados por coma.
  • De Otro Modo atiende cualquier valor no previsto. En la materia es obligatorio: el usuario puede escribir 7 en un menú de tres opciones.

Supuesto: la variable es entera o un carácter, y cada caso es un valor exacto. No admite rangos ni condiciones.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: cajero automático

Inicio
    ENTERO SALDO_INICIAL = 2500
    ENTERO saldo
    ENTERO opcion
    ENTERO monto

    saldo = SALDO_INICIAL
    Mostrar "1. Consultar saldo"
    Mostrar "2. Depositar"
    Mostrar "3. Retirar"
    Mostrar "Opción: "
    Entrada: opcion

    Segun opcion Hacer
        1:
            Mostrar "Saldo disponible: $", saldo
        2:
            Mostrar "Monto a depositar: "
            Entrada: monto
            saldo = saldo + monto
            Mostrar "Nuevo saldo: $", saldo
        3:
            Mostrar "Monto a retirar: "
            Entrada: monto
            saldo = saldo - monto
            Mostrar "Nuevo saldo: $", saldo
        De Otro Modo:
            Mostrar "Opción no válida"
    FinSegun
Fin
UAS - Lógica de Programación y Pensamiento Computacional

Cajero automático: prueba

Caso opcion monto Pantalla final
Consulta 1 — Saldo disponible: $2500
Depósito 2 500 Nuevo saldo: $3000
Retiro 3 700 Nuevo saldo: $1800
Opción inexistente 7 — Opción no válida
Retiro excesivo 3 3000 Nuevo saldo: $-500

El último caso muestra un saldo negativo: el retiro necesita otra decisión dentro del caso 3. Eso es una condicional anidada (4.2.4).

En un diagrama de flujo, Segun se dibuja como un rombo con la variable y una salida etiquetada por cada valor, más la salida De otro modo.

UAS - Lógica de Programación y Pensamiento Computacional

Variante: la cadena Sino Si

Cuando la decisión depende de rangos, Segun no sirve. Una empresa de paquetería cobra por peso (tarifas ficticias):

Si peso <= 0 Entonces
    Mostrar "Peso no válido"
Sino Si peso <= 1 Entonces
    tarifa = TARIFA_HASTA_1KG          // 90
Sino Si peso <= 5 Entonces
    tarifa = TARIFA_HASTA_5KG          // 150
Sino
    tarifa = TARIFA_MAS_5KG            // 250
FinSi

Las condiciones se revisan en orden y se ejecuta solo la primera verdadera. Por eso la segunda no necesita decir peso > 0 Y peso <= 1: si llegó ahí, peso <= 0 ya fue falsa.

UAS - Lógica de Programación y Pensamiento Computacional

En la cadena, el orden importa

Si peso <= 5 Entonces
    tarifa = TARIFA_HASTA_5KG
Sino Si peso <= 1 Entonces           // nunca se alcanza
    tarifa = TARIFA_HASTA_1KG
...

Un paquete de 0.5 kg cumple peso <= 5 y paga $150. La segunda condición jamás se evalúa como verdadera.

¿Cómo decide? Usa
Por el valor exacto de una variable (menú, código) Segun
Por rangos o condiciones distintas Cadena Sino Si, ordenada del rango más restrictivo al más amplio
UAS - Lógica de Programación y Pensamiento Computacional

Condicional anidada

4.2.4

UAS - Lógica de Programación y Pensamiento Computacional

Condicional anidada

Una condicional anidada es una condicional escrita dentro de una rama de otra.

Si <condición exterior> Entonces
    Si <condición interior> Entonces
        ...
    Sino
        ...
    FinSi
Sino
    ...
FinSi

La condición interior solo se evalúa cuando la exterior llevó a esa rama.

Se usa cuando una decisión depende de otra, o cuando cada falla necesita una respuesta distinta.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: retiro en el cajero

El cajero solo entrega billetes de $100 y no permite retirar más que el saldo.

3:
    Mostrar "Monto a retirar: "
    Entrada: monto
    Si monto <= saldo Entonces
        Si monto % 100 = 0 Entonces
            saldo = saldo - monto
            Mostrar "Retire su efectivo. Nuevo saldo: $", saldo
        Sino
            Mostrar "Solo se entregan billetes de $100"
        FinSi
    Sino
        Mostrar "Saldo insuficiente"
    FinSi
UAS - Lógica de Programación y Pensamiento Computacional

Retiro en el cajero: prueba

monto (saldo 2500) Exterior Interior Pantalla
700 Verdadera Verdadera Retire su efectivo. Nuevo saldo: $1800
750 Verdadera Falsa Solo se entregan billetes de $100
3000 Falsa No se evalúa Saldo insuficiente
2500 Verdadera Verdadera Retire su efectivo. Nuevo saldo: $0
UAS - Lógica de Programación y Pensamiento Computacional

¿Anidar o usar Y?

Con Y
Si monto <= saldo Y monto % 100 = 0 Entonces
    saldo = saldo - monto
Sino
    Mostrar "No se puede retirar"
FinSi

Más corta, pero el usuario no sabe por qué se rechazó.

Anidada

Cada falla tiene su propio mensaje. Además, el orden expresa una prioridad: primero se revisa el saldo.

Criterio: si todas las fallas llevan a la misma acción, usa Y. Si necesitan acciones distintas, anida.

Limitación: más de tres niveles de anidamiento vuelven el algoritmo difícil de leer y de probar. Es señal de que conviene reorganizarlo.

UAS - Lógica de Programación y Pensamiento Computacional

Traducción a PSeInt

Pseudocódigo PSeInt
Si … Entonces … Sino … FinSi Igual (Sino y SiNo son equivalentes)
Segun opcion Hacer … De Otro Modo: … FinSegun Igual
Cadena Sino Si Un Si dentro de cada SiNo, con un FinSi por cada Si
Si peso <= 0 Entonces
    Escribir "Peso no válido"
SiNo
    Si peso <= 1 Entonces
        tarifa = TARIFA_HASTA_1KG
    SiNo
        ...
    FinSi
FinSi

La traducción muestra lo que realmente es una cadena Sino Si: condicionales anidadas en la rama falsa.

UAS - Lógica de Programación y Pensamiento Computacional

Resolución de problemas con condicionales

4.2.5

UAS - Lógica de Programación y Pensamiento Computacional

Procedimiento

La metodología de la Unidad III no cambia. Se agregan tres preguntas al análisis:

  1. ¿Qué decisiones hay? Busca en el enunciado: "si", "solo si", "excepto", "según", "en caso de", "a partir de".
  2. ¿Qué tipo de decisión es cada una? Acción adicional (simple), dos caminos (doble), valor exacto (múltiple), rangos (encadenada), una decisión dentro de otra (anidada).
  3. ¿Cuáles son las rutas? Cada ruta necesita al menos un caso de prueba, más los valores de frontera.
Rutas del algoritmo Casos de prueba mínimos
Una doble 2 + frontera
Segun con 3 valores 4 (incluye De Otro Modo)
Doble con una doble anidada 3
UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo resuelto: estacionamiento con tolerancia

El estacionamiento de la actividad de pantalla esperada ahora tiene reglas:

  • Los primeros 15 minutos son gratis.
  • Después se cobra por hora o fracción a $18.50.
  • El cobro máximo del día es $150.
Elemento Contenido
Entrada minutos de estancia (entero, mayor o igual que 0)
Datos conocidos TOLERANCIA = 15, TARIFA_HORA = 18.50, TOPE_DIARIO = 150, MINUTOS_HORA = 60
Decisiones ¿Dentro de la tolerancia? (doble) · ¿Supera el tope? (simple, solo si se cobra)
Cálculo nuevo "Hora o fracción": 61 minutos son 2 horas
UAS - Lógica de Programación y Pensamiento Computacional

Hora o fracción

Para redondear hacia arriba se suma una hora menos un minuto antes de truncar:

horas = trunc((minutos + MINUTOS_HORA - 1) / MINUTOS_HORA)
minutos minutos + 59 / 60 trunc
16 75 1.25 1
60 119 1.98 1
61 120 2 2

No se necesita una condicional: el cálculo resuelve la fracción. Reconocer cuándo no hace falta decidir también es parte del diseño.

UAS - Lógica de Programación y Pensamiento Computacional

Estacionamiento: pseudocódigo

Inicio
    ENTERO TOLERANCIA = 15
    ENTERO MINUTOS_HORA = 60
    REAL TARIFA_HORA = 18.50
    REAL TOPE_DIARIO = 150
    ENTERO minutos
    ENTERO horas
    REAL importe

    Mostrar "Minutos de estancia: "
    Entrada: minutos

    Si minutos <= TOLERANCIA Entonces
        importe = 0
    Sino
        horas = trunc((minutos + MINUTOS_HORA - 1) / MINUTOS_HORA)
        importe = horas * TARIFA_HORA
        Si importe > TOPE_DIARIO Entonces
            importe = TOPE_DIARIO
        FinSi
    FinSi

    Mostrar "Total a pagar: $", importe
Fin
UAS - Lógica de Programación y Pensamiento Computacional

Estacionamiento: plan de pruebas

Caso minutos Ruta horas importe
Dentro de la tolerancia 10 Tolerancia — 0
Frontera de la tolerancia 15 Tolerancia — 0
Primer minuto cobrado 16 Cobro, sin tope 1 18.5
Hora exacta 60 Cobro, sin tope 1 18.5
Fracción 61 Cobro, sin tope 2 37
Justo debajo del tope 480 Cobro, sin tope 8 148
Aplica tope 481 Cobro con tope 9 150

Siete casos para tres rutas: cada frontera (15/16, 60/61, 480/481) se prueba de los dos lados.

UAS - Lógica de Programación y Pensamiento Computacional

Prácticas

Año bisiesto · Calculadora · Depuración

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · Año bisiesto

Un año es bisiesto si es divisible entre 4 y no entre 100, o si es divisible entre 400.

  1. Escribe la condición con %, Y, O y paréntesis.
  2. Desarrolla el algoritmo que indique si un año es bisiesto.
  3. Pruébalo con los cuatro casos:
Año ¿Bisiesto?
2024 Sí
2023 No
1900 No
2000 Sí

Producto: pseudocódigo, prueba de escritorio y ejecución en PSeInt.

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · Calculadora de dos números

Desarrolla un algoritmo que reciba dos números y una operación:

1. Sumar   2. Restar   3. Multiplicar   4. Dividir
  • La operación se elige con una condicional múltiple.
  • Si la operación es dividir y el divisor es cero, muestra "No se puede dividir entre cero".
  • Si la operación no existe, muestra "Operación no válida".
Caso a b Operación Resultado esperado
Cada operación 12 4 1, 2, 3, 4 16, 8, 48, 3
División entre cero 7 0 4 Mensaje de error
Operación inexistente 7 2 5 Operación no válida

Producto: pseudocódigo, diagrama de flujo y ejecución en PSeInt.

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · Depuración de condicionales

Un cine cobra $80 el boleto.

Edad Precio
Menos de 3 años Gratis
De 3 a 11 años Mitad
De 12 a 59 años Completo
Desde 60 años Mitad
Menor que 0 o mayor que 120 "Edad no válida", sin precio

El algoritmo de la siguiente lámina tiene cuatro errores.

Producto: ficha de depuración con los cuatro errores, el algoritmo corregido y un plan de pruebas con todas las fronteras.

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · Algoritmo con errores

Inicio
    REAL PRECIO_BOLETO = 80
    REAL FACTOR_MEDIO = 0.5
    ENTERO edad
    REAL precio

    Mostrar "Edad: "
    Entrada: edad
    Si edad < 0 Y edad > 120 Entonces
        Mostrar "Edad no válida"
    Sino Si edad > 60 Entonces
        precio = PRECIO_BOLETO * FACTOR_MEDIO
    Sino Si edad < 12 Entonces
        precio = PRECIO_BOLETO * FACTOR_MEDIO
    Sino Si edad < 3 Entonces
        precio = 0
    Sino
        precio = PRECIO_BOLETO
    FinSi
    Mostrar "Precio: $", precio
Fin
UAS - Lógica de Programación y Pensamiento Computacional

Errores frecuentes con condicionales

Error Ejemplo Consecuencia
Frontera mal escrita > en lugar de >= Falla exactamente en el valor límite
Y en lugar de O edad < 0 Y edad > 120 La condición nunca es verdadera
O en lugar de Y x >= 1 O x <= 10 La condición siempre es verdadera
Cadena mal ordenada <= 5 antes de <= 1 Una rama nunca se alcanza
Falta De Otro Modo Menú sin caso por omisión Un valor inesperado no produce respuesta
Instrucción fuera de la rama Mostrar después de FinSi Se ejecuta aunque la condición haya rechazado el dato
Decidir antes de leer Si antes de Entrada: Se decide con un valor que aún no existe
UAS - Lógica de Programación y Pensamiento Computacional

Tareas

Clasificación de triángulos · Recibo de luz por bloques

UAS - Lógica de Programación y Pensamiento Computacional

Tareas del bloque 4.2

Tarea Qué debes resolver Estructuras
Clasificación de triángulos Decidir si tres longitudes forman un triángulo y, en ese caso, si es equilátero, isósceles o escaleno Anidada, condiciones compuestas
Recibo de luz por bloques Calcular el recibo cuando el precio del kWh cambia por bloques de consumo Doble para validar, cadena Sino Si para los bloques

Cada tarea se entrega con su hoja de trabajo, diagrama de flujo, plan de pruebas que cubra todas las rutas y fronteras, y ejecución en PSeInt.

Las instrucciones completas están en la hoja de cada tarea.

UAS - Lógica de Programación y Pensamiento Computacional

Relación con el Laboratorio 02

En el Laboratorio 02 · Reglas de cobro tu programa de la Cafetería El Byte aprende a decidir:

  • detectar un pedido vacío
  • aplicar la promoción de combo desayuno
  • aplicar un descuento según el tipo de cliente
  • distinguir entre pago en efectivo y con tarjeta
  • avisar cuando el efectivo no alcanza

Partirás del programa que entregaste en el Laboratorio 01. Las instrucciones, las reglas exactas y los datos de prueba están en la guía del laboratorio.

UAS - Lógica de Programación y Pensamiento Computacional

Síntesis del bloque 4.2

Situación Estructura
Algo adicional que solo a veces ocurre Simple
Dos caminos complementarios Doble
Una opción según el valor exacto de una variable Múltiple (Segun)
Una opción según rangos Cadena Sino Si
Una decisión que depende de otra, o fallas con respuestas distintas Anidada

Una condicional se prueba por rutas y por fronteras: cada rama al menos una vez y cada valor límite de los dos lados.

UAS - Lógica de Programación y Pensamiento Computacional

Segundo examen parcial

Evalúa los bloques 4.1 y 4.2. Es escrito, sin computadora.

  • [ ] Escribir la pantalla esperada y el trazado de un algoritmo
  • [ ] Identificar qué estructura requiere un problema
  • [ ] Encontrar y corregir errores en un algoritmo
  • [ ] Completar un algoritmo
  • [ ] Construir algoritmos con la notación de la materia

Para prepararte, repasa las prácticas, las tareas y los dos laboratorios.

UAS - Lógica de Programación y Pensamiento Computacional

Estructuras repetitivas

Bloque 4.3

UAS - Lógica de Programación y Pensamiento Computacional

Lo que las condicionales no pudieron resolver

Problema Lo que pasó
Cifras de un número Solo funcionaba con exactamente tres cifras
Validar el semestre Si el dato era incorrecto, el algoritmo terminaba. No podía pedirlo otra vez
Cajero automático Hacía una sola operación por ejecución
Cafetería Cobra un pedido y termina. No puede atender un turno completo
Sumar las calificaciones de un grupo Hay que escribir una entrada por alumno, y el tamaño del grupo cambia

En todos los casos el algoritmo necesitaba repetir un bloque de instrucciones.

UAS - Lógica de Programación y Pensamiento Computacional

¿Qué es una estructura repetitiva?

Una estructura repetitiva (ciclo, loop) ejecuta un bloque de instrucciones varias veces, mientras una condición lo indique.

Elemento Qué es
Cuerpo Las instrucciones que se repiten
Iteración Cada ejecución del cuerpo
Condición de control Decide si se repite otra vez
Variable de control La variable de la que depende la condición

Supuesto: algo dentro del cuerpo cambia la variable de control. Si nada la cambia, la condición nunca deja de cumplirse y el algoritmo no termina: es un ciclo infinito.

UAS - Lógica de Programación y Pensamiento Computacional

Las tres partes de la variable de control

i = 1                      // 1. inicialización: antes del ciclo
Mientras i <= 5 Hacer      // 2. evaluación: en la condición
    Mostrar i
    i = i + 1              // 3. actualización: dentro del cuerpo
FinMientras
Falta Consecuencia
Inicialización La condición usa un valor indefinido (0 en PSeInt)
Actualización Ciclo infinito: muestra 1 para siempre
Condición con < en lugar de <= Una iteración menos: muestra del 1 al 4
UAS - Lógica de Programación y Pensamiento Computacional

Tres ciclos, tres preguntas

Ciclo ¿Cuándo evalúa? Mínimo de iteraciones Pregunta que responde Contenido
Mientras Antes del cuerpo 0 ¿Repito mientras se cumpla algo? 4.3.1
Repetir Después del cuerpo 1 ¿Repito hasta que se cumpla algo? 4.3.2
Desde Antes, con un contador 0 ¿Repito un número conocido de veces? 4.3.3
UAS - Lógica de Programación y Pensamiento Computacional

Mientras

4.3.1

UAS - Lógica de Programación y Pensamiento Computacional

Ciclo Mientras

Mientras <condición> Hacer
    <instrucciones>
FinMientras
  1. Se evalúa la condición.
  2. Si es verdadera, se ejecuta el cuerpo y se vuelve al paso 1.
  3. Si es falsa, el ciclo termina y se continúa después de FinMientras.

Como la condición se revisa antes, el cuerpo puede ejecutarse cero veces.

Se usa cuando el número de repeticiones no se conoce antes de empezar.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: registro de gastos (0 para terminar)

Inicio
    REAL gasto
    REAL total
    REAL mayor
    ENTERO cantidad

    total = 0
    cantidad = 0
    mayor = 0
    Mostrar "Gasto (0 para terminar): "
    Entrada: gasto
    Mientras gasto <> 0 Hacer
        total = total + gasto
        cantidad = cantidad + 1
        Si gasto > mayor Entonces
            mayor = gasto
        FinSi
        Mostrar "Gasto (0 para terminar): "
        Entrada: gasto
    FinMientras
    Mostrar "Total: $", total, " en ", cantidad, " gastos. Mayor: $", mayor
Fin
UAS - Lógica de Programación y Pensamiento Computacional

Centinela y lectura previa

El usuario captura sus gastos uno por uno. Al final se muestran el total, el número de gastos y el gasto mayor.

El 0 es un valor centinela: no es un gasto, solo indica el final.

Por eso hay dos entradas:

  • una antes del ciclo, para que la condición tenga un valor la primera vez
  • otra al final del cuerpo, para leer el siguiente dato antes de volver a evaluar
Iteración gasto total cantidad mayor
Antes del ciclo 120 0 0 0
1 45.5 120 1 120
2 300 165.5 2 120
3 0 465.5 3 300
Sale del ciclo

Pantalla final: Total: $465.5 en 3 gastos. Mayor: $300

Si el primer dato es 0, el ciclo se ejecuta cero veces: total 0, cantidad 0.

UAS - Lógica de Programación y Pensamiento Computacional

Registro de gastos: así se ve al ejecutarse

Ventana de ejecución del registro de gastos. El mensaje Gasto (0 para terminar) aparece cuatro veces. El usuario escribe 120, 45.5, 300 y 0. Al final se muestra Total: $465.5 en 3 gastos. Mayor: $300

El mismo mensaje aparece cuatro veces aunque en el pseudocódigo está escrito solo dos: una antes del ciclo y otra dentro, que se repite.

UAS - Lógica de Programación y Pensamiento Computacional

Tres patrones que aparecen en todo ciclo

Patrón Antes del ciclo Dentro del ciclo En el ejemplo
Contador cantidad = 0 cantidad = cantidad + 1 Cuántos gastos
Acumulador total = 0 total = total + gasto Cuánto se gastó
Máximo mayor = 0 Si gasto > mayor Entonces mayor = gasto El gasto mayor

mayor = 0 funciona porque los gastos son positivos. Si los datos pudieran ser negativos, habría que iniciar con el primer dato o con un valor imposible.

Un acumulador que se inicializa dentro del ciclo vuelve a cero en cada iteración y al final solo guarda el último dato.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: las cifras de cualquier número

En el bloque 4.1 el algoritmo de las cifras solo servía para tres cifras. Con Mientras se separa una cifra en cada iteración, sin importar cuántas tenga.

pendiente = numero
suma = 0
cifras = 0
Mientras pendiente > 0 Hacer
    suma = suma + pendiente % 10
    cifras = cifras + 1
    pendiente = trunc(pendiente / 10)
FinMientras
numero Iteraciones suma cifras
472 3 13 3
85 2 13 2
1000 4 1 4
0 0 0 0

pendiente es una copia: si el ciclo modificara numero, al final ya no se podría mostrar el número original.

UAS - Lógica de Programación y Pensamiento Computacional

Cifras de un número: diagrama

Diagrama de flujo de la suma de cifras. Después de leer numero e inicializar pendiente, suma y cifras, decisión pendiente > 0. Por Sí se suman la cifra, se cuenta y se quita la última cifra, y una línea regresa a la decisión. Por No se muestran la suma y las cifras

Limitación: con 0 el algoritmo dice "0 cifras", aunque el 0 se escribe con una. El supuesto del ciclo (pendiente > 0) no cubre ese caso. Se puede corregir con una condicional antes del ciclo.

UAS - Lógica de Programación y Pensamiento Computacional

Repetir

4.3.2

UAS - Lógica de Programación y Pensamiento Computacional

Ciclo Repetir

Repetir
    <instrucciones>
Hasta Que <condición>
  1. Se ejecuta el cuerpo.
  2. Se evalúa la condición.
  3. Si es falsa, se vuelve al paso 1. Si es verdadera, el ciclo termina.

Como la condición se revisa después, el cuerpo se ejecuta al menos una vez.

Mientras continúa cuando la condición es verdadera. Repetir termina cuando la condición es verdadera. Confundirlo es el error más frecuente con este ciclo.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: validar una entrada

En el bloque 4.2 el algoritmo solo podía avisar que el semestre era inválido. Ahora lo pide de nuevo:

Repetir
    Mostrar "Semestre (1 a 10): "
    Entrada: semestre
Hasta Que semestre >= 1 Y semestre <= 10
Mostrar "Semestre registrado: ", semestre
Diagrama de flujo de la validación del semestre. Se muestra el mensaje, se lee el semestre y se evalúa semestre >= 1 Y semestre <= 10. Por No regresa al mensaje. Por Sí muestra el semestre registrado
UAS - Lógica de Programación y Pensamiento Computacional

Validación: prueba

El usuario escribe ¿Condición de salida? Qué pasa
15 Falsa Pide otra vez
0 Falsa Pide otra vez
3 Verdadera Muestra Semestre registrado: 3

Repetir es natural aquí porque siempre hay que pedir el dato al menos una vez.

Con Mientras habría que leer el dato antes del ciclo y repetir la misma entrada dentro, como en el centinela.

Limitación: la validación revisa el rango, no el tipo. Si el usuario escribe "tres" en un ENTERO, PSeInt detiene la ejecución con un error de tipos.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: cajero con menú repetido

saldo = SALDO_INICIAL
Repetir
    Mostrar "1. Consultar saldo  2. Depositar  3. Retirar  4. Salir"
    Mostrar "Opción: "
    Entrada: opcion
    Segun opcion Hacer
        1:
            Mostrar "Saldo disponible: $", saldo
        2:
            // depósito, igual que en el bloque 4.2
        3:
            // retiro con las decisiones anidadas del bloque 4.2
        4:
            Mostrar "Gracias por usar el cajero"
        De Otro Modo:
            Mostrar "Opción no válida"
    FinSegun
Hasta Que opcion = 4
UAS - Lógica de Programación y Pensamiento Computacional

Cajero: el estado se conserva entre iteraciones

saldo se inicializa fuera del ciclo: así cada operación parte del saldo que dejó la anterior.

Secuencia de opciones Saldo final
2 (500), 3 (700), 1, 4 2300
UAS - Lógica de Programación y Pensamiento Computacional

Desde

4.3.3

UAS - Lógica de Programación y Pensamiento Computacional

Ciclo Desde

Desde i = <inicio> Hasta <fin> Con Paso <paso> Hacer
    <instrucciones>
FinDesde
  • i empieza con el valor de inicio.
  • Antes de cada iteración se revisa si i todavía no pasa del valor final.
  • Al terminar cada iteración, i aumenta en el valor del paso.

Se usa cuando el número de repeticiones se conoce antes de empezar: un valor fijo (10 renglones, 7 días) o un dato ya leído (el número de alumnos).

Es una forma compacta de escribir un Mientras con contador:

i = 1
Mientras i <= 10 Hacer
    ...
    i = i + 1
FinMientras
UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: tabla de multiplicar

Mostrar "Tabla del: "
Entrada: n
Desde i = 1 Hasta 10 Con Paso 1 Hacer
    Mostrar n, " x ", i, " = ", n * i
FinDesde
Variante Instrucción Valores de i
Paso 1 Desde i = 1 Hasta 10 Con Paso 1 1, 2, …, 10
Paso 2 Desde i = 1 Hasta 9 Con Paso 2 1, 3, 5, 7, 9
Paso negativo Desde i = 10 Hasta 1 Con Paso -1 10, 9, …, 1
Inicio mayor que el fin Desde i = 5 Hasta 1 Con Paso 1 Ninguno: cero iteraciones

Regla: no se modifica i dentro del cuerpo. El ciclo Desde ya lo actualiza.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo: calificaciones de un grupo

Mostrar "Número de alumnos: "
Entrada: alumnos
suma = 0
aprobados = 0
mayor = -1                      // menor que cualquier calificación válida
menor = 11                      // mayor que cualquier calificación válida
Desde i = 1 Hasta alumnos Con Paso 1 Hacer
    Mostrar "Calificación del alumno ", i, ": "
    Entrada: calificacion
    suma = suma + calificacion
    Si calificacion >= 6 Entonces
        aprobados = aprobados + 1
    FinSi
    Si calificacion > mayor Entonces
        mayor = calificacion
    FinSi
    Si calificacion < menor Entonces
        menor = calificacion
    FinSi
FinDesde
promedio = suma / alumnos
UAS - Lógica de Programación y Pensamiento Computacional

Calificaciones de un grupo: prueba y supuesto

Con 5 alumnos y las calificaciones 8, 5.5, 9.5, 7, 6: promedio 7.2, aprobados 4, mayor 9.5, menor 5.5.

Supuesto: alumnos >= 1. Con 0, el ciclo no se ejecuta y suma / alumnos es una división entre cero.

UAS - Lógica de Programación y Pensamiento Computacional

Actividad guiada

Interés compuesto año por año

UAS - Lógica de Programación y Pensamiento Computacional

Actividad guiada · Interés compuesto

Una inversión de $10,000 gana 10 % anual sobre el saldo acumulado (tasa ficticia). Queremos mostrar el saldo al final de cada año.

  1. ¿Cuántas veces se repite el cálculo? ¿Se conoce antes de empezar?
  2. ¿Qué ciclo conviene? ¿Qué variable acumula?
  3. Escribe el algoritmo para un número de años que proporciona el usuario.
  4. Completa la tabla para 3 años:
Año Saldo al final del año
1
2
3

Pregunta final: ¿cuántos años tarda en duplicarse la inversión? ¿Por qué esa pregunta ya no se resuelve bien con Desde?

Producto: pseudocódigo de las dos versiones y tabla completa.

UAS - Lógica de Programación y Pensamiento Computacional

Resolución de problemas con ciclos

4.3.5

UAS - Lógica de Programación y Pensamiento Computacional

¿Qué ciclo uso?

Pregunta Si 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.

UAS - Lógica de Programación y Pensamiento Computacional

Plan de pruebas para ciclos

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

Caso Por qué
Cero iteraciones Revela divisiones entre cero y variables sin valor
Una iteración Revela errores de inicialización de máximos y mínimos
Varias iteraciones El caso normal
La última iteración Revela 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.

UAS - Lógica de Programación y Pensamiento Computacional

Ejemplo resuelto: ¿es primo?

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.
UAS - Lógica de Programación y Pensamiento Computacional

¿Es primo?: plan de pruebas

numero Divisores revisados Iteraciones Resultado
1 Ninguno 0 No es primo
2 Ninguno (4 <= 2 es falso) 0 Primo
9 2, 3 2 No es primo
17 2, 3, 4 3 Primo
25 2, 3, 4, 5 4 No es primo

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

UAS - Lógica de Programación y Pensamiento Computacional

Prácticas

Factorial · Trazado · Depuración

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · Factorial

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:
n n!
0 1
1 1
5 120
10 3628800

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

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · Trazado de un ciclo

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.

UAS - Lógica de Programación y Pensamiento Computacional

Práctica · Depuración de ciclos

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.

UAS - Lógica de Programación y Pensamiento Computacional

Errores frecuentes con ciclos

Error Consecuencia
Falta la actualización de la variable de control Ciclo infinito
< en lugar de <= Una iteración de menos
Acumulador o contador inicializado dentro del ciclo Solo conserva el último dato
Acumulador de producto iniciado en 0 El resultado siempre es 0
Condición de Repetir escrita como si fuera de Mientras El ciclo termina en cuanto el dato es inválido
Centinela sin lectura previa La primera evaluación usa un valor indefinido
Centinela procesado como dato El 0 se cuenta como un gasto más
Dividir entre el contador sin revisar que sea mayor que 0 División entre cero cuando no hubo datos
UAS - Lógica de Programación y Pensamiento Computacional

Tareas

Ventas de la semana · Número inverso y palíndromo

UAS - Lógica de Programación y Pensamiento Computacional

Tareas del bloque 4.3

Tarea Qué debes resolver Estructuras
Ventas de la semana Capturar 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 ventas Desde, Repetir para validar, Segun
Número inverso y palíndromo Invertir las cifras de un entero de cualquier tamaño e indicar si se lee igual al revés Mientras, 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.

UAS - Lógica de Programación y Pensamiento Computacional

Relación con el Laboratorio 03

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.

UAS - Lógica de Programación y Pensamiento Computacional

Síntesis del bloque 4.3

Situación Ciclo
Número de repeticiones conocido antes de empezar Desde
Al menos una vez: validar, menú Repetir
Puede ser ninguna vez: centinela, condición inicial Mientras
Patrón Se inicializa Se actualiza
Contador En 0, antes del ciclo + 1 dentro
Acumulador En 0 (suma) o en 1 (producto), antes Con cada dato, dentro
Máximo, mínimo Con un valor imposible o con el primer dato Con una condicional simple, dentro
Bandera En VERDADERO o FALSO, antes Cuando se cumple la condición buscada

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

UAS - Lógica de Programación y Pensamiento Computacional

Proyecto integrador

En equipos de 4 completarás el Sistema de la Cafetería El Byte: el programa del Laboratorio 03 más un módulo a elegir.

Módulo Qué agrega
A. Inventario del turno Existencias que se descuentan y avisos de producto agotado
B. Promociones por horario Hora feliz del café y servicio de cierre
C. Menú ampliado Productos nuevos, captura producto por producto y tamaños de bebida
D. Reporte de ventas Piezas por producto, producto más vendido y porcentajes del turno
E. Pago mixto Una parte en efectivo y el resto con tarjeta

Entregas la propuesta algorítmica, el programa en PSeInt, las pruebas y la documentación, y lo expones en equipo. Las reglas, los entregables y la forma de evaluación están en la guía del proyecto.

UAS - Lógica de Programación y Pensamiento Computacional

Cierre de la Unidad IV

Lo que construiste

Algoritmos con las tres estructuras: secuencias con entrada y salida claras, decisiones probadas por rutas y fronteras, y ciclos probados con cero, una y varias iteraciones.

Lo que sigue

En el proyecto integrarás las tres estructuras en el sistema de la Cafetería El Byte. En Programación estructurada implementarás estas mismas estructuras en un lenguaje formal.

UAS - Lógica de Programación y Pensamiento Computacional

estado: BORRADOR — bloques 4.1 (Estructuras secuenciales), 4.2 (Estructuras condicionales) y 4.3 (Estructuras repetitivas). El proyecto se documenta aparte. unidad: IV — Estructuras algorítmicas estructura: por tema, sin numerar sesiones (criterio heredado de U3 D-012) correspondencia con PLAN_SEMESTRAL.md: tema 4.1.1 → sesiones 50–51, tema 4.1.2 → 52–53, Laboratorio 01 → 54, cierre de 4.1 → 55, 4.2.1 → 56–57, 4.2.2 → 58–59, 4.2.3 → 60–61, 4.2.4 → 62–63, 4.2.5 y Laboratorio 02 → 64–66, segundo parcial → 67, 4.3.1 → 70–71, 4.3.2 → 72–73, 4.3.3 → 74–75, 4.3.5 y Laboratorio 03 → 76 fuentes: - programa/programa-oficial.md (Unidad IV, 4.1–4.3.5) - unidad04/CONTEXTO_UNIDAD.md (RA4.1, RA4.2, caso canónico §9, notación §11) - unidad03/material/unidad03_especificacion_pseudocodigo.md (notación heredada) - unidad03/material/traduccion-a-pseint.md (perfil Flexible, D-009, D-013) - unidad03/material/especificacion-diagramas-flujo.md (símbolos, D-008, D-015) - unidad04/material/unidad04_especificacion_estructuras.md (notación de 4.2, D-002, D-005, D-009) material del estudiante (tareas): unidad04/tareas/ laboratorios: unidad04/laboratorios/unidad04_lab01_ticket_cafeteria.md, unidad04_lab02_reglas_cobro.md, unidad04_lab03_cierre_caja.md evaluación: unidad04/evaluacion/unidad04_examen_parcial.md (clave: unidad04_examen_parcial_clave.md) material del profesor: unidad04/material/unidad04_solucionario_profesor.md trazabilidad de ejercicios (los códigos no se muestran al estudiante, criterio U3 D-014): - 4.1.1 Instrucciones de entrada/salida: U4-001 (ejemplo), U4-002 (guiada), U4-003 (práctica) - 4.1.2 Resolución de problemas: U4-004, U4-005 (ejemplos), U4-006 (guiada), U4-007 (práctica), U4-008, U4-009 (tareas) - Laboratorio 01: LAB01 verificación PSeInt: PENDIENTE DE VERIFICACIÓN (CONTEXTO_UNIDAD R-003)

bloque 4.2 — RA4.3 a RA4.6. Sesiones del plan: 56–66 (temas), 67 segundo parcial. trazabilidad (los códigos no se muestran al estudiante): - 4.2.1 Simples: U4-010 (ejemplo) - 4.2.2 Dobles: U4-011 (ejemplo), U4-012 (guiada), U4-013 (ejemplo condiciones compuestas) - 4.2.3 Múltiples: U4-014 (ejemplo Segun), U4-015 (ejemplo encadenada) - 4.2.4 Anidadas: U4-016 (ejemplo) - 4.2.5 Resolución de problemas: U4-017 (ejemplo), U4-018, U4-019, U4-020 (prácticas), U4-021, U4-022 (tareas) - Laboratorio 02: LAB02

bloque 4.3 — RA4.7 a RA4.10. Sesiones del plan: 70–76. trazabilidad (los códigos no se muestran al estudiante): - 4.3.1 Mientras: U4-023 (ejemplo centinela), U4-024 (ejemplo cifras) - 4.3.2 Repetir: U4-025 (ejemplo validación), U4-026 (ejemplo menú) - 4.3.3 Desde: U4-027 (ejemplo tabla), U4-028 (ejemplo grupo), U4-029 (guiada interés) - 4.3.5 Resolución de problemas: U4-030 (ejemplo primo), U4-031, U4-032, U4-033 (prácticas), U4-034, U4-035 (tareas) - Laboratorio 03: LAB03