IDS Guía de estudio

Semana 1 · Módulo 1

Pensamiento computacional, entorno y control de versiones

Antes de escribir código hay que saber describir un proceso sin ambigüedad. Esta semana aprendes a convertir una regla de negocio en un algoritmo, a dibujarla como diagrama de flujo, a ejecutar tu primer programa de Python y a guardar tu trabajo con Git.

Pregunta orientadora¿Cómo le explico a una computadora un proceso de negocio de forma que no pueda malinterpretarlo, y cómo guardo cada versión de ese trabajo?

Lecturas
BOU 1 · PCC 1 + Apéndice D · GIT 1
Proyecto
Fase 1 (esta semana)
Evaluación
Control 1: la próxima semana

Cómo usar esta guía

El curso es aula invertida: el libro es la primera fuente, la clase es laboratorio. Usa esta página en cuatro momentos:

Antes de claseLee los capítulos de la lista y responde el reading checkpoint. Es el mismo tipo de control que tendrás en Moodle.
Durante el laboratorioTenla abierta junto a VS Code: comandos de terminal, comandos de Git, símbolos de diagramas.
Después de claseLlena las tablas de traza a mano y resuelve los ejercicios antes de abrir la solución.
Antes de evaluarRepasa la lista de “puedo…” y las preguntas de defensa del proyecto.

Cada tema sigue el mismo ciclo. Acostúmbrate a él: es la forma en la que se resuelve un problema real y la forma en que te van a preguntar en la defensa.

  • Pregunta
  • →
  • Exploración
  • →
  • Implementación
  • →
  • Resultado
  • →
  • Interpretación
  • →
  • Verificación

Qué puedes usar esta semana

Regla de progresión: en esta guía nunca se usa algo que el curso enseña en una semana posterior. Si lo ves antes, está marcado como adelanto opcional.

Sí, desde ahora

  • Pseudocódigo y diagramas de flujo
  • Terminal: moverte entre carpetas y ejecutar python archivo.py
  • Python: print() con texto y comentarios #
  • Git: config, init, status, add, commit, log, branch, switch, merge, remote, push, pull, clone
  • .gitignore y README.md

Todavía no

  • Variables y tipos de Python → semana 2
  • if / elif / else en Python → semana 2
  • input() y bucles → semana 3
  • Funciones propias (def) → semana 4

En pseudocódigo sí puedes decidir y repetir: el algoritmo es independiente del lenguaje.

Lecturas de preparación

Marca cada lectura cuando la termines. Tu avance se guarda en este navegador.

Reading checkpoint

Responde después de leer y sin volver al libro. Cada respuesta muestra por qué es correcta o no.

Un gerente te da estas instrucciones para programar. ¿Cuál no puede ser un paso de un algoritmo tal como está escrita?

Un algoritmo exige pasos precisos: ¿qué es “razonable”? ¿quién es un “cliente bueno”? Dos personas lo ejecutarían distinto. Las otras tres opciones se pueden ejecutar sin interpretar.

En un diagrama de flujo, ¿qué símbolo representa una decisión (una pregunta de sí/no)?

Rombo = decisión (tiene dos salidas: sí/no). Rectángulo = proceso o cálculo. Paralelogramo = entrada o salida de datos. Óvalo = inicio o fin.

“Leer el precio y la cantidad que digita el cajero” se dibuja con…

Todo dato que entra al algoritmo o que se muestra al usuario va en paralelogramo. El cálculo del subtotal, en cambio, sería un rectángulo.

¿Qué distingue a un sistema de control de versiones distribuido como Git de uno centralizado?

En un sistema distribuido cada clon es un respaldo completo: puedes hacer commits sin red y, si el servidor se pierde, cualquier copia puede restaurarlo. En uno centralizado, el historial vive solo en el servidor.

¿Qué hace exactamente git add informe.md?

add prepara; commit guarda en el historial local; push sube al remoto. Son tres pasos distintos y en la defensa te lo van a preguntar.

Modificas README.md y ejecutas git commit -m "Actualiza README" sin hacer git add. ¿Qué pasa?

Un commit guarda solo lo que está en staging. Sin add, el staging está vacío y Git responde algo como “no changes added to commit”. Tus cambios siguen en el archivo, intactos.

¿Qué es una rama en Git?

Crear una rama es barato: Git solo crea un apuntador nuevo. Por eso el flujo profesional es “una rama por tarea” y luego merge a main.

Tienes hola.py en la carpeta actual de la terminal. ¿Cómo lo ejecutas?

El intérprete de Python recibe el nombre del archivo y ejecuta sus instrucciones de arriba hacia abajo. Si responde “no se reconoce el comando”, Python no está en el PATH: revisa la instalación (PCC cap. 1).

En el ciclo de vida del software, ¿en qué fase se comprueba que el programa cumple lo que el negocio pidió?

Los requerimientos dicen qué debe hacer; las pruebas comprueban que lo hace. Por eso el proyecto exige casos de borde desde la Fase 2 y pruebas automáticas en la Fase 5.

El ciclo de vida del software

En palabras simples

Hacer software se parece a construir una casa: primero preguntas qué necesita la familia (requerimientos), dibujas los planos (diseño), construyes (implementación), inspeccionas antes de entregar (pruebas), entregas las llaves (despliegue) y luego haces reparaciones (mantenimiento). Arreglar un plano es barato; tumbar una pared ya construida, no.

Un programa no empieza en el teclado. Empieza en una necesidad del negocio y termina (si termina) cuando nadie lo usa. Las fases básicas:

Ciclo de vida del software: requerimientos, diseño, implementación, pruebas, despliegue y mantenimiento; el mantenimiento vuelve a requerimientos.
Las pruebas están antes del despliegue: ahí es barato encontrar errores. El mantenimiento reinicia el ciclo.
FasePregunta que respondeEjemplo: sistema de facturación
1. Requerimientos¿Qué necesita el negocio?“Calcular el total con IVA y aplicar descuento por volumen.”
2. Diseño¿Cómo se va a resolver?Algoritmo en pseudocódigo + diagrama de flujo.
3. Implementación¿Cómo se escribe en código?El programa en Python.
4. Pruebas¿Hace lo que se pidió?Casos como “subtotal exactamente $50”.
5. Despliegue¿Cómo llega a quien lo usa?Instalarlo en las cajas.
6. Mantenimiento¿Qué cambia después?Cambia la tasa del IVA o la política de descuentos.
Por qué le importa a un negocio Un error encontrado en la fase de diseño cuesta un borrador. El mismo error encontrado después del despliegue cuesta facturas mal cobradas, clientes molestos y horas de corrección. Diseñar y probar antes es ahorro, no burocracia.

Algoritmos y diagramas de flujo

En palabras simples

Un algoritmo es una receta tan clara que cualquiera la sigue igual. “Agrega sal al gusto” no sirve para una computadora; “agrega 5 gramos de sal” sí. Un diagrama de flujo es esa misma receta dibujada con flechas.

Un algoritmo es una secuencia finita de pasos precisos que transforma unas entradas en unas salidas. Tres pruebas rápidas para saber si lo que escribiste es un algoritmo:

  1. Precisión: dos personas distintas que lo sigan obtienen lo mismo.
  2. Finitud: termina siempre, para cualquier entrada válida.
  3. Entradas y salidas definidas: sabes qué datos necesita y qué entrega.
Los cuatro símbolos del diagrama de flujo: óvalo para inicio o fin, paralelogramo para entrada o salida, rectángulo para proceso y rombo para decisión.
Los cuatro símbolos que necesitas para cualquier diagrama de flujo del curso.

Caso: el total de una factura en la Distribuidora La Ceiba

Pregunta

La distribuidora vende al por mayor. Regla de negocio: si el subtotal de la compra es de $50 o más, se descuenta el 10 %; luego se cobra el IVA del 13 % sobre el monto con descuento. ¿Cuánto paga el cliente?

Exploración

Antes de escribir nada, identifica:

  • Entradas: precio unitario, cantidad.
  • Salida: total a pagar.
  • Decisión: ¿el subtotal llega a $50?
  • Orden importa: primero descuento, luego IVA. Si lo haces al revés, el cliente paga IVA sobre dinero que no pagó.
  • Frontera: “$50 o más” incluye el 50 exacto. Es un caso borde.
Implementación (pseudocódigo)
INICIO
  LEER precio_unitario, cantidad
  subtotal ← precio_unitario × cantidad
  SI subtotal ≥ 50 ENTONCES
      descuento ← subtotal × 0.10
  SINO
      descuento ← 0
  FIN SI
  base  ← subtotal − descuento
  iva   ← base × 0.13
  total ← base + iva
  MOSTRAR total
FIN
Diagrama de flujo de la factura: leer precio y cantidad, calcular subtotal, decidir si el subtotal es mayor o igual a 50 para aplicar 10 % de descuento, calcular base, IVA y total, y mostrar el total.
El mismo algoritmo que el pseudocódigo. Fíjate en la frontera: con un subtotal de exactamente $50 se toma la rama Sí.
Resultado

Con precio $12.50 y cantidad 4: subtotal $50.00 → descuento $5.00 → base $45.00 → IVA $5.85 → total $50.85.

Interpretación

El cliente que compra justo $50 paga $50.85, pero uno que compra $49 paga $55.37 ($49 × 1.13). ¡Comprar un poco más le sale más barato! Eso no es un error del algoritmo: es una consecuencia de la regla de negocio. Un buen analista la detecta y se la comunica al gerente.

Verificación — ¿cómo sé que es correcto?
  • Recórrelo a mano con al menos un caso de cada rama (sí / no) y el caso frontera ($50 exacto). Eso es una tabla de traza.
  • Compara contra una calculadora o una hoja de cálculo.
  • Pregúntate: ¿el total es siempre mayor que la base? (Debe serlo, porque el IVA es positivo.)

Entorno y terminal

En palabras simples

La terminal es hablarle a la computadora por escrito en lugar de hacer clic. cd es “entra a esta carpeta” y python archivo.py es “lee este archivo y haz lo que dice, de arriba hacia abajo”.

La terminal es una forma de darle órdenes a la computadora escribiendo. Vas a usarla para ejecutar Python y para Git. Los comandos mínimos:

Quiero…Windows (PowerShell)macOS / Linux
ver en qué carpeta estoypwdpwd
listar archivosdir o lsls
entrar a una carpetacd proyectocd proyecto
subir un nivelcd ..cd ..
crear una carpetamkdir proyectomkdir proyecto
ver la versión de Pythonpython --versionpython3 --version
ejecutar un programapython hola.pypython3 hola.py

Tu primer programa (PCC cap. 1). Créalo en VS Code, guárdalo como hola.py y ejecútalo desde la terminal integrada (Ctrl+ñ o menú Terminal → New Terminal):

# Mi primer programa en Python
print("Hola, Distribuidora La Ceiba")
print("Sistema de facturación v0.1")
Hola, Distribuidora La Ceiba
Sistema de facturación v0.1
Errores frecuentes del primer día
  • python: command not found / “no se reconoce como comando” → Python no está instalado o no se marcó “Add Python to PATH” al instalar en Windows.
  • can't open file 'hola.py': No such file or directory → la terminal no está en la carpeta del archivo. Usa pwd y cd.
  • SyntaxError → olvidaste una comilla o un paréntesis. Python señala la línea con ^.
  • NameError: name 'Print' is not defined → Python distingue mayúsculas: es print.

Git y GitHub

En palabras simples

Git es el botón de “guardar partida” de un videojuego, pero para tu código. git add es meter cosas al carrito; git commit es pagar y quedarte con el recibo (queda registrado con fecha y autor); git push es enviar una copia del recibo al equipo. Una rama es un borrador paralelo donde puedes probar sin arruinar la versión buena.

Caso: cuatro personas, un mismo sistema

Pregunta

Tu equipo de cuatro va a construir el proyecto integrador durante 11 semanas. ¿Cómo trabajan sin pisarse los cambios, sin mandarse archivos final_v3_ahora_si.py por WhatsApp y demostrando quién hizo qué?

Exploración: los tres lugares de Git
LugarQué hay ahíAnalogía contable
Directorio de trabajoTus archivos tal como los editas.El borrador en tu escritorio.
Área de preparación (staging)Los cambios que irán en el próximo commit.Los documentos que metes al sobre para archivar.
Repositorio (.git)El historial de commits, cada uno con autor, fecha y mensaje.El libro mayor: cada asiento queda registrado y no se borra.

Por eso un archivo puede estar: sin seguimiento (Git no lo conoce), modificado, preparado o confirmado.

Los lugares de Git: el directorio de trabajo pasa al área de preparación con git add, al repositorio local con git commit y a GitHub con git push; git pull trae los cambios del remoto.
add prepara, commit guarda en tu historial local, push lo comparte en GitHub. Son tres pasos distintos.
Implementación: configuración inicial (una sola vez por computadora)
git config --global user.name "Tu Nombre Apellido"
git config --global user.email "tu_correo@esen.edu.sv"
git config --global init.defaultBranch main
git config --list          # para comprobar

El correo debe ser el mismo de tu cuenta de GitHub; así tus commits aparecen a tu nombre (y eso cuenta en la rúbrica).

Flujo diario:

mkdir la-ceiba && cd la-ceiba
git init                           # crea el repositorio (.git)
git status                         # ¿qué cambió? úsalo TODO el tiempo
git add README.md                  # prepara un archivo
git add .                          # prepara todo lo que cambió (revisa antes con status)
git commit -m "Agrega ficha técnica del proyecto"
git log --oneline                  # historial resumido

Ramas: una rama por tarea; main siempre debe funcionar.

git branch feature/ficha-tecnica   # crea la rama
git switch feature/ficha-tecnica   # cámbiate a ella (en versiones viejas: git checkout)
# ... editas, add, commit ...
git switch main                    # vuelves a main
git merge feature/ficha-tecnica    # integras el trabajo
git branch -d feature/ficha-tecnica  # borra la rama ya integrada
Una rama feature sale del commit C2 de main, recibe los commits F1 y F2, y se integra de vuelta a main con un merge en el commit M.
Una rama por tarea. git switch -c nombre equivale a git branch nombre + git switch nombre.

GitHub (repositorio remoto):

git remote add origin git@github.com:usuario/la-ceiba.git   # con SSH
git push -u origin main            # la primera vez; después basta con: git push
git pull                           # trae lo que subieron tus compañeros
git clone git@github.com:usuario/la-ceiba.git   # tus compañeros, para obtener copia
Autenticación: SSH o token

GitHub ya no acepta tu contraseña para push. Tienes dos opciones:

  • SSH (recomendada en tu computadora): generas un par de llaves, subes la pública a GitHub → Settings → SSH and GPG keys.
    ssh-keygen -t ed25519 -C "tu_correo@esen.edu.sv"
    # muestra la llave pública para copiarla a GitHub:
    cat ~/.ssh/id_ed25519.pub
    ssh -T git@github.com              # prueba: debe saludarte por tu usuario
  • Token de acceso personal (HTTPS): útil en computadoras del laboratorio. Lo creas en Settings → Developer settings → Personal access tokens y lo pegas cuando Git pida contraseña. Trátalo como una contraseña: nunca lo subas al repositorio.
Resultado

git log --oneline muestra algo así (los códigos cambian en tu máquina):

3f2a9c1 (HEAD -> main) Integra ficha técnica
8b41e07 Agrega .gitignore para Python
c05d2aa Crea README inicial
Interpretación

Cada línea es un punto al que puedes volver. El historial es evidencia: la rúbrica del proyecto revisa que los commits estén distribuidos entre los cuatro y a lo largo de las 11 semanas. Un solo commit gigante la noche antes se califica como deficiente.

Verificación — ¿cómo sé que salió bien?
  • git status dice “nothing to commit, working tree clean”.
  • git log --oneline muestra tu commit con tu mensaje.
  • En GitHub, el commit aparece con tu foto/usuario (si no, revisa user.email).
Buenos mensajes de commit Imperativo, específico, corto: Agrega cálculo de IVA, Corrige descuento en subtotal de $50. Evita cambios, asdf, final. En la defensa te pueden pedir que expliques un commit concreto.

Tablas de traza

Una traza es ejecutar el algoritmo tú, paso a paso, anotando el valor de cada variable. Llena las celdas, pulsa Comprobar y solo al final mira la solución. Usa punto decimal (5.85).

Traza 1 · Factura con descuento

Usa el pseudocódigo de factura.pseudo. En “¿≥ 50?” escribe sí o no.

precio × cantidadsubtotal¿≥ 50?descuentobaseivatotal
12.50 × 4
8.00 × 3
30.00 × 2

Traza 2 · El estado de un archivo en Git

Después de cada comando, ¿en qué estado queda README.md? Opciones: sin seguimiento, modificado, preparado, confirmado, o combinaciones como preparado y modificado.

#AcciónEstado de README.md
1Creas README.md en un repo recién iniciado
2git add README.md
3git commit -m "Crea README"
4Editas una línea del README y guardas
5git add README.md
6Editas otra línea y guardas (sin add)
7git commit -m "Actualiza README"
¿Por qué los pasos 6 y 7 dan eso?

git add toma una foto del archivo en ese instante. En el paso 6 el staging tiene la foto del paso 5 y el archivo en disco tiene un cambio más: está preparado y modificado a la vez. El commit del paso 7 guarda solo la foto preparada; el segundo cambio sigue pendiente como “modificado”. Moraleja: revisa git status antes de cada commit.

Ejercicios

Intenta cada uno en papel primero. Abre la pista solo si llevas 10 minutos atascado; abre la solución solo después de tener tu versión.

E1 · Cobro de parqueo

pseudocódigo + diagrama · ★★

El parqueo de un centro comercial cobra: $1.00 la primera hora y $0.75 cada hora adicional o fracción. El cobro máximo del día es $6.00. Si el cliente presenta un sello de compra, se le descuenta $1.00.

  1. Escribe el pseudocódigo (entrada: minutos, tiene_sello; salida: cobro).
  2. Dibuja el diagrama de flujo (puedes usar draw.io).
  3. Calcula el cobro para 60, 61 y 600 minutos sin sello, y 30 y 600 minutos con sello.
Pista

“Fracción” significa que 61 minutos cuentan como 2 horas: redondeas hacia arriba (función techo). Y hay una ambigüedad escondida: ¿el sello se descuenta antes o después de aplicar el máximo de $6.00?

Solución
INICIO
  LEER minutos, tiene_sello
  horas ← techo(minutos / 60)
  cobro ← 1.00 + (horas − 1) × 0.75
  SI cobro > 6.00 ENTONCES
      cobro ← 6.00
  FIN SI
  SI tiene_sello ENTONCES
      cobro ← cobro − 1.00
  FIN SI
  SI cobro < 0 ENTONCES
      cobro ← 0
  FIN SI
  MOSTRAR cobro
FIN
minutossellohorasantes del topecobro
60no11.00$1.00
61no21.75$1.75
600no107.75$6.00
30sí11.00$0.00
600sí107.75$5.00

La ambigüedad: con 600 minutos y sello, si se aplica el sello antes del tope, el cliente paga $6.00 (7.75 − 1 = 6.75 → tope 6.00); si se aplica después, paga $5.00. Ambas son “correctas” según cómo se lea el enunciado. No lo decide el programador: se pregunta al negocio y se documenta como supuesto. Esta solución eligió “después del tope”.

Verificación: 60 y 61 minutos prueban la frontera de la fracción; 600 prueba el tope; 30 con sello prueba que el cobro nunca sea negativo.

E2 · Instrucciones del gerente

pensamiento algorítmico · ★

El gerente de ventas manda esto para que lo programen:

“Si el cliente es frecuente, dale descuento. Si compra mucho, también. Al final, cobra el IVA.”

Lista todas las ambigüedades y reescribe la regla como pasos precisos (inventa valores razonables y márcalos como supuestos).

Pista

Busca cada palabra que admita dos lecturas: “frecuente”, “descuento”, “mucho”, “también”, “al final”.

Solución
  • “frecuente”: ¿cuántas compras y en qué periodo? → Supuesto: 5 o más compras en los últimos 90 días.
  • “descuento”: ¿cuánto? ¿porcentaje o monto fijo? → Supuesto: 5 %.
  • “mucho”: ¿en dólares o en unidades? → Supuesto: subtotal ≥ $100.
  • “también”: si cumple ambas, ¿se suman los descuentos (10 %), se aplica el mayor o se aplican en cadena? → Supuesto: se suman.
  • “al final”: ¿el IVA va sobre el monto con o sin descuento? → Supuesto: sobre el monto con descuento.
LEER subtotal, compras_90_dias
tasa ← 0
SI compras_90_dias ≥ 5 ENTONCES tasa ← tasa + 0.05
SI subtotal ≥ 100      ENTONCES tasa ← tasa + 0.05
base  ← subtotal × (1 − tasa)
total ← base × 1.13
MOSTRAR total

Verificación: cuatro casos cubren todas las combinaciones (frecuente sí/no × monto alto sí/no).

E3 · Flujo de ramas completo

Git · ★★

Escribe, en orden, los comandos para: (1) crear la carpeta ceiba e iniciar un repositorio; (2) crear un README.md y hacer el primer commit; (3) crear la rama feature/ficha-tecnica, cambiarte a ella, crear ficha.md y hacer commit; (4) volver a main e integrar la rama; (5) conectar con GitHub y subir main.

Solución
mkdir ceiba
cd ceiba
git init
# crea README.md en VS Code
git add README.md
git commit -m "Crea README inicial"
git branch feature/ficha-tecnica
git switch feature/ficha-tecnica
# crea ficha.md en VS Code
git add ficha.md
git commit -m "Agrega ficha técnica del proyecto"
git switch main
git merge feature/ficha-tecnica
git remote add origin git@github.com:usuario/ceiba.git
git push -u origin main

Verificación: después del merge, ls en main debe mostrar ficha.md, y git log --oneline los dos commits. En GitHub deben verse ambos archivos.

E4 · Ticket de caja con print

Python · ★

Solo con print() (todavía no hay variables), escribe ticket.py que muestre un ticket de la Distribuidora La Ceiba con encabezado, dos productos, subtotal, IVA y total, usando los números de la traza 1 (primer caso).

Solución
# Ticket de caja: solo texto por ahora (las variables llegan en la semana 2)
print("==============================")
print("   DISTRIBUIDORA LA CEIBA")
print("==============================")
print("4 x Aceite 1 L @ 12.50  50.00")
print("Descuento 10 %          -5.00")
print("Base                    45.00")
print("IVA 13 %                 5.85")
print("------------------------------")
print("TOTAL                   50.85")

Interpretación: este ticket es correcto solo para ese caso. Si cambia la cantidad, hay que reescribirlo. Esa es exactamente la limitación que resuelven las variables de la semana 2.

E5 · Auditoría: la comisión que desaparece

auditoría · ★★

Alguien escribió este algoritmo de comisiones. Encuentra el error con una traza, no a ojo:

LEER ventas
SI ventas > 1000 ENTONCES
    comision ← ventas × 0.05
FIN SI
SI ventas > 5000 ENTONCES
    comision ← ventas × 0.08
SINO
    comision ← 0
FIN SI
MOSTRAR comision

¿Qué comisión recibe un vendedor con ventas de $2,000? ¿Cuál debería recibir?

Pista

Traza con ventas = 2000. El primer SI asigna algo… ¿qué hace el SINO del segundo?

Solución

Con 2000: el primer SI asigna 100; el segundo SI es falso, así que su SINO sobrescribe la comisión con 0. Resultado: $0 en lugar de $100. El error es tener dos decisiones independientes cuando la regla es una sola con tres tramos. Corrección: una sola cadena, del tramo más alto al más bajo.

LEER ventas
SI ventas > 5000 ENTONCES
    comision ← ventas × 0.08
SINO SI ventas > 1000 ENTONCES
    comision ← ventas × 0.05
SINO
    comision ← 0
FIN SI
MOSTRAR comision

Verificación: traza 500, 1000, 1001, 5000 y 5001. Las fronteras son donde viven los errores. Esta es la estructura if/elif/else de la semana 2.

Práctica intensiva

Más práctica para asegurar lo básico: primero ejercicios rápidos que se corrigen solos, luego problemas tipo examen con casos de prueba. Resuélvelos en papel antes de abrir la solución.

Ejercicios rápidos · ¿Qué comando uso?

Escribe solo el comando (sin URL, sin mensaje, sin nombre de archivo, salvo que se pida). Se corrige solo.

CódigoTu respuesta
# Quiero ver qué archivos cambiaron y en qué estado están
# Quiero preparar TODOS los cambios de la carpeta
# Quiero ver el historial, una línea por commit
# Quiero crear un repositorio en la carpeta actual
# Quiero subir mis commits a GitHub
# Quiero traer lo que subieron mis compañeros
# Quiero cambiarme a la rama main
# Quiero crear la rama "reportes" y cambiarme a ella en un solo comando

Problemas tipo examen

P1 · Planilla semanal con horas extra

pseudocódigo + diagrama · ★★★

Una bodega paga por hora. Hasta 40 horas semanales se pagan a la tarifa normal; de la hora 41 a la 48, al 150 %; desde la hora 49, al 200 %. Si alguien reporta más de 60 horas o un número negativo, el sistema no calcula: marca “revisar”. Escribe el pseudocódigo y dibuja el diagrama.

Tu programa debe cumplir estos casos de prueba:

HorasTarifaResultado esperado
40$5.00$200.00
45$5.00$237.50
50$5.00$280.00
48$5.00$260.00
61$5.00revisar
0$5.00$0.00
Pista

Parte las horas en tres “bolsas”: normales (máximo 40), extra al 150 % (máximo 8) y extra al 200 % (lo que sobre). Cada bolsa se paga distinto y al final se suman.

Solución
INICIO
  LEER horas, tarifa
  SI horas < 0 O horas > 60 ENTONCES
      MOSTRAR "revisar"
  SINO
      SI horas <= 40 ENTONCES
          pago <- horas * tarifa
      SINO SI horas <= 48 ENTONCES
          pago <- 40 * tarifa + (horas - 40) * tarifa * 1.5
      SINO
          pago <- 40 * tarifa + 8 * tarifa * 1.5 + (horas - 48) * tarifa * 2
      FIN SI
      MOSTRAR pago
  FIN SI
FIN

Verificación (50 h): 40 × 5 = 200; 8 × 7.50 = 60; 2 × 10 = 20; total 280 ✔. Las fronteras que deben estar en tu tabla son 40, 41, 48, 49 y 60.

P2 · Semáforo de crédito

decisiones en cadena · ★★★

Una cooperativa clasifica solicitudes de crédito. Regla: si el cliente tuvo más de 2 atrasos en 12 meses → ROJO. Si no, se calcula la carga = (deudas actuales + cuota nueva) / ingreso mensual: si la carga es mayor que 0.40 → ROJO; si es mayor que 0.30 → AMARILLO (revisión manual); si no → VERDE. Escribe el algoritmo y explica por qué el orden de las preguntas importa.

Tu programa debe cumplir estos casos de prueba:

IngresoCuotaDeudasAtrasosEsperado
$1,000$150$1000VERDE (0.25)
$1,000$150$2000AMARILLO (0.35)
$800$200$1501ROJO (0.44)
$2,000$100$03ROJO (atrasos)
$1,000$300$1000AMARILLO (0.40 exacto)
Pista

Pregunta primero lo que descarta de inmediato (atrasos): así no calculas nada innecesario. Luego los tramos de carga del más exigente al menos exigente. Ojo con el último caso: 0.40 no es “mayor que” 0.40.

Solución
INICIO
  LEER ingreso, cuota, deudas, atrasos
  SI atrasos > 2 ENTONCES
      MOSTRAR "ROJO"
  SINO
      carga <- (deudas + cuota) / ingreso
      SI carga > 0.40 ENTONCES
          MOSTRAR "ROJO"
      SINO SI carga > 0.30 ENTONCES
          MOSTRAR "AMARILLO"
      SINO
          MOSTRAR "VERDE"
      FIN SI
  FIN SI
FIN

¿Y si el ingreso es 0? La división falla. Un algoritmo completo lo valida antes: SI ingreso <= 0 ENTONCES MOSTRAR "datos inválidos". Encontrar ese caso es exactamente lo que te piden en la matriz de casos borde del proyecto.

P3 · Resolver un conflicto de Git

Git en equipo · ★★

Tú y un compañero modificaron la misma línea de config.py en ramas distintas. Al hacer git merge feature/impuestos, Git se detiene y el archivo queda así:

<<<<<<< HEAD
TASA_IVA = 0.13
=======
TASA_IVA = 0.15
>>>>>>> feature/impuestos

Explica qué significa cada parte, decide qué conservar (en El Salvador el IVA es 13 %) y escribe los comandos para terminar el merge.

Tu programa debe cumplir estos casos de prueba:

PreguntaLo que debes poder responder
¿Qué hay entre <<<<<<< y =======?La versión de tu rama actual (HEAD)
¿Y entre ======= y >>>>>>>?La versión de la rama que integras
¿Quién decide?Una persona, con la regla de negocio: Git no sabe cuál es correcta
Pista

Después de editar el archivo, Git necesita que le digas “ya lo resolví”: eso se hace preparando el archivo y confirmando.

Solución
# 1. Editar config.py: dejar solo la línea correcta y borrar los marcadores
TASA_IVA = 0.13

# 2. Marcar el conflicto como resuelto y cerrar el merge
git add config.py
git commit -m "Resuelve conflicto: IVA vigente de 13 %"
git log --oneline      # verificación: aparece el commit de merge

Prevención: ramas pequeñas, git pull antes de empezar a trabajar y acordar quién toca cada archivo. En la defensa del proyecto es común que pregunten cómo resolvieron un conflicto.

Proyecto integrador · Fase 1

Semana 1 · Definición del problema y setup del repositorio. El proyecto vale el 30 % de la nota y se construye durante todo el ciclo, no al final.

Entregables de esta fase

Punto de partida para el .gitignore (GitHub mantiene una plantilla completa: github/gitignore → Python.gitignore):

# Archivos generados por Python
__pycache__/
*.pyc
.pytest_cache/

# Entornos virtuales
.venv/
venv/

# Sistema operativo
.DS_Store
Thumbs.db

Estructura sugerida del README.md (inspirada en lo que pide la Fase 6):

# Nombre del sistema

## Problema de negocio
Quién lo usa, qué decisión le ayuda a tomar, qué proceso manual reemplaza.

## Dominio
Finanzas / retail / logística / servicios…

## Equipo
- Integrante 1 — usuario de GitHub
- …

## Cómo ejecutarlo
(se completa en fases posteriores)

## Supuestos del negocio
Reglas que el equipo decidió y por qué (ej.: el sello se descuenta después del tope).

## Uso de IA
Declaración de qué partes fueron asistidas y cómo se verificaron (obligatorio por política del curso).

Preguntas de defensa (practica en voz alta)

En la sustentación de la semana 11 cada integrante responde preguntas individuales sobre todo el sistema. Empieza a practicar desde ya:

¿Qué problema de negocio resuelve su sistema y quién toma decisiones con él?

Responde con un usuario concreto (“el encargado de bodega”), una decisión concreta (“cuándo reordenar”) y el costo de no tener el sistema (“se quedan sin stock / compran de más”).

¿Por qué usan Git y no una carpeta compartida en la nube?

Historial de cada cambio con autor y fecha; poder volver a una versión que funcionaba; ramas para trabajar en paralelo sin romper main; y evidencia verificable de la contribución de cada integrante.

¿Qué diferencia hay entre commit y push?

commit registra los cambios preparados en el historial local. push envía esos commits al repositorio remoto (GitHub) para que el equipo los vea. Puedes tener commits que aún no subiste.

¿Qué pusieron en el .gitignore y por qué?

Archivos que se generan solos (__pycache__), entornos virtuales y archivos del sistema operativo: no aportan al código, cambian en cada máquina y generan conflictos. También nunca se suben contraseñas ni tokens.

¿Qué pasa si dos integrantes modifican la misma línea del mismo archivo?

Al integrar, Git no puede decidir cuál versión conservar y marca un conflicto. Una persona abre el archivo, elige o combina las versiones, borra los marcadores <<<<<<<, =======, >>>>>>> y hace un commit. Se evita trabajando en ramas pequeñas y haciendo pull seguido.

Rumbo al Control 1

El programa ubica el Control 1 en la semana 2. El temario exacto lo confirma el docente en Moodle; esta lista cubre lo de la semana 1. Recuerda: en controles y exámenes no se permite IA.

Fuentes

  • [BOU] Bouna, P. (2022). Fundamentals of Programming Using Flowchart and Pseudocode. Packt / O’Reilly. Cap. 1.
  • [PCC] Matthes, E. (2023). Python Crash Course, 3.ª ed. No Starch Press / O’Reilly. Cap. 1 y Apéndice D.
  • [GIT] Chacon, S. y Straub, B. (2014). Pro Git, 2.ª ed. Apress. Libre en git-scm.com/book/es/v2. Cap. 1, 2.2 y 3.1.
  • GitHub Docs: SSH · repositorios remotos.

Esta guía resume los temas asignados por el programa del curso; no reproduce el contenido de los libros ni cita páginas. Los libros de O’Reilly son la fuente principal.