Semana 2: Profundizando en Lógica de Programación
Esta semana, exploraremos cómo la lógica se une con la tecnología para crear programas funcionales. Abordaremos la metodología completa para resolver problemas computables y profundizaremos en las estructuras de control de flujo que permiten a nuestros programas tomar decisiones y repetir acciones.
1. La Tecnología en la Programación
La tecnología es el puente que permite que nuestros algoritmos cobren vida y sean ejecutados por las computadoras a velocidades asombrosas. Un lenguaje de programación es ese "puente perfecto" que permite al computador ejecutar lo que concebimos como algoritmo[1].
Lenguajes de Bajo Nivel
Son lenguajes cuyas instrucciones son complejas de entender para los humanos, pero muy sencillas para el computador. El ejemplo más claro es el Lenguaje Ensamblador (Assembler), que es el "lenguaje verdadero de los computadores"[2]. La programación a bajo nivel era la utilizada en los inicios de la programación, requiriendo programadores muy especializados debido a su complejidad.
mov bp, sp ; Ejemplo de instrucción en Ensamblador
Lenguajes de Alto Nivel
Fueron creados para ser más entendibles al ser humano, facilitando la programación. Sin embargo, el computador necesita un programa adicional para "traducir" este código a lenguaje de bajo nivel. Aquí es donde entran los intérpretes y compiladores[3].
- Lenguajes Interpretados: Un programa "intérprete" convierte y ejecuta el código línea por línea. Si hay un error, se detiene al llegar a esa línea. Ej: Python (en su ejecución interactiva), JavaScript.
- Lenguajes Compilados: Un programa "compilador" revisa todo el código (programa fuente) y, si no hay errores, lo convierte a un "objeto compilado" y luego a un "programa ejecutable". Esto reduce el riesgo de interrupciones durante la ejecución. Ej: C++, Java.
Errores en un Programa
Existen dos tipos principales de errores que podemos encontrar al programar[4]:
¡Ejercicio en Clase! 🧑💻
Discute con tu compañero:
- ¿Por qué es importante la "prueba de escritorio" si el compilador ya nos dice los errores de sintaxis?
- Si escribes `print("Hola" + 5)` en Python, ¿qué tipo de error esperarías? ¿Humano o detectado por el compilador? (Pista: Python es un lenguaje interpretado, pero tiene verificaciones).
2. Metodología para Solucionar un Problema Computable
Para resolver cualquier problema en el mundo de la programación, seguimos una metodología estructurada que nos asegura llegar a una solución eficiente y confiable[11].
Pasos Clave de la Metodología
- Clarificación del Objetivo: El primer y más importante paso. Debes tener "muy claro no solo hacia dónde debemos ir, sino hasta dónde debemos llegar"[12]. Un objetivo claro es el "faro" que ilumina el camino[13].
- Algoritmo: Es el conjunto de pasos secuenciales y ordenados para lograr el objetivo. Solo se puede vislumbrar claramente cuando el objetivo es claro[14].
- Prueba de Escritorio: La "prueba reina" de un algoritmo. Simulación manual para verificar si el algoritmo logra el objetivo propuesto[15]. Aquí se detectan los errores lógicos.
- Transcripción (Codificación): Convertir el algoritmo (informal o pseudocódigo) en un listado de instrucciones entendibles por un computador, ajustándose a las reglas sintácticas de un lenguaje de programación. El algoritmo escrito con estas reglas se llama programa[16].
- Digitación: Escribir el programa en el computador usando un editor de texto o un Entorno Integrado de Desarrollo (IDE)[17].
- Compilación: El computador revisa que el programa se ajuste a las reglas sintácticas del lenguaje. Lo realiza un "compilador", que detecta errores de sintaxis y de precaución[18].
- Ejecución o Puesta en Marcha: Una vez sin errores de compilación, el programa se "pone a correr" en el computador[19].
- Verificación de Resultados: Comprobar si la salida del programa cumple con el objetivo inicial. Si no, se debe revisar el objetivo, la prueba de escritorio o la transcripción[20].
Ejemplo: Determinar si un Número es Par
Vamos a aplicar la metodología para resolver un problema clásico: leer un número entero y determinar si es par.
Pseudocódigo (Versión Técnica)[21]:
Proceso Numero_Par
Variables
Entero : num
Inicio
Escriba "Digite un número entero"
Lea num
Si num < 0 Entonces
Escriba "El número debe ser positivo"
Sino
Si num / 2 * 2 = num Entonces
Escriba "El número leído es par"
Sino
Escriba "El número leído no es par"
FinSi
FinSi
Fin
Código Python:
num = int(input("Digite un número entero: "))
if num < 0:
print("El número debe ser positivo")
else:
# La lógica para saber si es par en aritmética entera
if num // 2 * 2 == num: # Usamos // para división entera
print("El número leído es par")
else:
print("El número leído no es par")
¡Prueba este código!
Copia el código Python en tu entorno de desarrollo o en la consola simulada de la clase anterior para ver cómo funciona.
¡Ejercicio en Clase! 🧑💻
En parejas, apliquen la metodología completa para el siguiente problema:
- Problema: Leer dos números enteros y determinar si el último dígito de un número es igual al último dígito del otro.
- Pasos:
- Clarificación del Objetivo (Análisis: Entrada, Proceso, Salida).
- Diseño del Algoritmo (en pseudocódigo).
- Realización de la Prueba de Escritorio (con al menos dos escenarios: dígitos iguales y diferentes).
- (Opcional para los más avanzados) Transcripción a Python.
3. Decisiones: Controlando el Flujo Condicional
Una decisión es la elección de uno entre varios caminos lógicos, dependiendo de una condición[22]. En programación, esto nos permite que el programa reaccione de diferentes maneras según los datos o el estado actual.
Estructura `Si-Entonces-Sino` (if-else)
Es la estructura de decisión más común. Permite ejecutar un bloque de código si una condición es verdadera, y otro bloque si es falsa[23].
Pseudocódigo Básico:
Si Condicion Entonces
// Instrucciones si la condición es Verdadera
Sino
// Instrucciones si la condición es Falsa
FinSi
Variaciones Comunes:
- Decisión Simple: Solo tiene el bloque `Si-Entonces`. No hay `Sino` si no se necesita una acción para el caso falso[24].
- Decisión en Cascada (`elif`): Múltiples `Si-Entonces` anidados en los `Sino`, para evaluar varias condiciones en orden. Si una se cumple, las demás no se evalúan[25].
- Decisión en Secuencia: Varios `Si` independientes. Todas las condiciones se evalúan, y se ejecutan los bloques correspondientes si son verdaderos. Se usa cuando las condiciones no son mutuamente excluyentes o cuando se necesita evaluar todas[26].
- Decisión Anidada: Un `Si-Entonces-Sino` completo dentro de otro `Si-Entonces-Sino`. Permite evaluar condiciones más complejas donde una depende de la otra[27].
Estructura `Casos` (Selección Múltiple)
Esta estructura permite abreviar una serie de decisiones en cascada o en secuencia cuando se compara una variable con múltiples valores específicos. Ejecuta instrucciones que coinciden con el valor de una variable[28].
Pseudocódigo:
Evalúe (variable)
Si vale (valor_1) : Instrucciones para valor_1
Si vale (valor_2) : Instrucciones para valor_2
...
Si vale (valor_n) : Instrucciones para valor_n
Sino : Instrucciones si no coincide con ningún valor anterior
Fin_Evalúe
Ventaja: Más legible y eficiente que muchos `if-elif-else` anidados para comparaciones de igualdad.
Ejemplo: Día de la Semana con `Casos`
Lee un número del 1 al 7 y muestra el día de la semana correspondiente.
Proceso dia_de_la_semana
Definir dia Como Entero
Escribir "Ingrese un número del 1 al 7:"
Leer dia
Segun dia Hacer
1: Escribir "Lunes"
2: Escribir "Martes"
3: Escribir "Miércoles"
4: Escribir "Jueves"
5: Escribir "Viernes"
6: Escribir "Sábado"
7: Escribir "Domingo"
De Otro Modo: Escribir "No pertenece a un día de la semana"
Fin Segun
FinProceso
¡Ejercicio en Clase! 🧑💻
En pseudocódigo, resuelve el siguiente problema utilizando la estructura de decisión más adecuada:
- Problema: Una frutería ofrece descuentos según la cantidad de manzanas compradas:
- 0-4 manzanas: 0% de descuento
- 5-8 manzanas: 10% de descuento
- 9-12 manzanas: 15% de descuento
- 13 o más manzanas: 20% de descuento
- Tarea: Elabora un algoritmo que pida la cantidad de manzanas y el precio por manzana, y determine cuánto pagará el cliente.
4. Ciclos: Automatizando Tareas Repetitivas
Los ciclos, también conocidos como estructuras repetitivas o bucles, permiten ejecutar un conjunto de acciones las veces que sea necesario, siempre y cuando se cumpla una condición[29]. Son fundamentales para automatizar tareas y evitar escribir código repetitivo.
Conceptos Clave en Ciclos
- Contador: Una variable de tipo entero que se incrementa o disminuye en un valor constante en cada repetición. Se usa para "conocer el número de veces que se repite un procedimiento"[30]. Ej: `contador = contador + 1`.
- Acumulador (o Totalizador): Una variable que almacena cantidades resultantes de procesos sucesivos. Se incrementa con un valor variable en cada repetición[31]. Ej: `total = total + valor_venta`.
Tipos de Ciclos
La mayoría de lenguajes de programación ofrecen tres formas principales de ciclos[32]:
- Ciclo `Mientras` (While): Controla la ejecución de instrucciones basándose en una expresión lógica. El bloque de código se repite mientras la condición sea verdadera. La condición se evalúa antes de cada iteración.
- Ciclo `Repetir` (Do-While / Repeat-Until): Primero realiza las acciones y después comprueba la expresión lógica. Esto garantiza que las acciones se ejecuten al menos una vez. El bloque se repite hasta que la condición sea verdadera.
- Ciclo `Para` (For): Permite implementar un conjunto de instrucciones un número predeterminado de veces. Utiliza una variable de control con un valor de inicio, un valor final y un incremento/decremento.
Ejemplos en Pseudocódigo y Python
Ciclo `Mientras` (Mostrar números del 1 al 10)[33]:
Proceso ImprimirNumerosMientras
Definir num Como Entero;
num = 1;
Mientras num <= 10 Hacer
Escribir num;
num = num + 1;
FinMientras
FinProceso
Ciclo `Repetir` (Mostrar números del 1 al 10)[34]:
Proceso ImprimirNumerosRepetir
Definir num Como Entero;
num = 1;
Repetir
Escribir num;
num = num + 1;
Hasta Que num > 10
FinProceso
Ciclo `Para` (Mostrar números del 1 al 10)[35]:
Proceso ImprimirNumerosPara
Definir num Como Entero;
Para num = 1 Hasta 10 Con Paso 1 Hacer
Escribir num;
FinPara
FinProceso
¡Ejercicio en Clase! 🧑💻
En pseudocódigo, resuelve el siguiente problema utilizando los tres tipos de ciclos (`Mientras`, `Repetir`, `Para`).
- Problema: Crear un algoritmo que capture un número entero y realice la tabla de multiplicar de dicho número del 1 al 10.
Notas al Pie
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 95)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 96)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 97)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 99)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 100)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 100)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 101)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 102)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 103)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 103)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 109)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 110)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 28)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 28)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 30)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 32)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 32)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 33)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 34)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 34)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 117)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 149)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 45)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 46)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 49)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 53)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 56)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 61)
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 171); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 64)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 64)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 64)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 176)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 67)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 70)
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 73)
Referencias
- Diccionario de la Lengua Española. (2019). *Real Academia Española*. Recuperado de https://dle.rae.es/
- García Cano, E. E. (s.f.). *Guía práctica de estudio 04: Pseudocódigo*.
- Regino, E. M. (s.f.). *Lógica de programación*.
- Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD.
- Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U.
- WIKIPEDIA. (2019). *WIKIPEDIA*. Recuperado de https://es.wikipedia.org/wiki/L%C3%B3gica