Lógica de Programación: Tu Primer Paso en el Mundo del Software

Esta guía interactiva te llevará de la mano por los fundamentos esenciales para pensar como una computadora. No necesitas experiencia previa, solo curiosidad y ganas de construir cosas geniales. ¡Prepárate para desatar tu creatividad lógica!

Los Conceptos Fundamentales: La Base de Todo

Antes de sumergirnos en el código, es crucial entender tres pilares que sostienen el universo de la programación. Estos conceptos te ayudarán a entender el "porqué" detrás de cada línea de código.

Lógica

En su esencia, la lógica es el arte de razonar de manera coherente y sensata. Como menciona Omar Trejos Buriticá, la lógica es "la forma más OBVIA y FÁCIL de hacer cualquier cosa"[1]. Carlos Salazar Guaña la define como el "modo de pensar y de actuar sensato, de sentido común"[2]. En programación, se traduce en encontrar el camino más sencillo y eficiente para resolver un problema. Es el sentido común aplicado a las instrucciones que le darás a una máquina.

Programación

La programación es el proceso de crear un conjunto de instrucciones que una computadora puede seguir para realizar una tarea. Omar Trejos Buriticá la describe como el "conocimiento de técnicas e instrucciones de un determinado lenguaje a través de los cuales se hace sencillo lograr que el computador obtenga unos resultados mucho más rápido que nosotros"[3]. Carlos Salazar Guaña añade que "la programación se la relaciona con la creación de aplicaciones o programas informáticos que permitan resolver un problema en particular, valiéndose de lenguajes de programación como, por ejemplo, Java, C#, PHP, etc., a través de un Integrated Development Environment (IDE)"[4]. Permiten a la máquina automatizar procesos, resolver cálculos complejos o crear aplicaciones interactivas.

Lógica de Programación

Es el puente entre el problema y su solución computacional. La lógica de programación es la habilidad de diseñar el plan detallado y organizado para resolver un problema, *antes* de siquiera pensar en el lenguaje de programación. Omar Trejos Buriticá enfatiza que "la segunda [Lógica de Programación] involucra, de una manera técnica y organizada, los conceptos que nos permiten diseñar, en términos generales, la solución a problemas que pueden llegar a ser implementados a través de un computador"[5]. Carlos Salazar Guaña refuerza que es "el paso previo a la construcción de un programa informático; únicamente busca una solución en términos generales para resolver un problema"[6]. Es la fase de "pensar" el problema para que luego la "programación" lo ejecute.

¡Desmintiendo Mitos! Lo que NO necesitas para empezar

Para adentrarte en la lógica de programación, no requieres conocimientos previos de computadoras, tecnología avanzada, ni de ningún lenguaje de programación específico. Como se menciona en el material, "No se requieren conocimientos previos sobre computadores o tecnología en general. No se requieren conocimientos de un lenguaje de programación en particular."[7] Omar Trejos Buriticá también afirma que "El estudio de la Lógica de Programación no exige ningún conocimiento previo de computadores ni de tecnología en general; tampoco exige la presencia de algún lenguaje de programación específico"[8]. Lo único indispensable es tu tiempo, tu disposición para practicar y, sobre todo, ¡muchas ganas de aprender!

El Corazón de la Lógica: Los Algoritmos

Un algoritmo es la secuencia de pasos claros, precisos y finitos para resolver un problema. Es la receta detallada que le damos a la computadora. Omar Trejos Buriticá lo define como "un conjunto de pasos secuenciales y ordenados que permiten lograr un objetivo"[9]. Carlos Salazar Guaña lo describe de manera similar: "Un algoritmo no es más que un conjunto de pasos secuenciales y ordenados que permiten lograr un objetivo. Todos los algoritmos tienen un inicio y un fin."[10] Si te sientes perdido al crear uno, significa que tu objetivo aún no está lo suficientemente claro.

Las 3 Partes Esenciales de un Algoritmo (Sistema de Información)

Todo algoritmo, sin importar su complejidad, se puede descomponer en estas tres fases fundamentales, planteadas como un sistema de información[11]:

1. ENTRADA

Se refiere a toda la información, datos o "ingredientes" que el algoritmo necesita para comenzar su ejecución. Como menciona Regino, "La entrada hace referencia a la información proporcionada al algoritmo, la cual debe sufrir un proceso para obtener los resultados. Un algoritmo tiene cero o más datos de entrada."[12] Puede ser desde un número ingresado por el usuario hasta datos complejos de una base de datos.

2. PROCESO

Son las acciones, cálculos u operaciones que el algoritmo realiza con los datos de entrada para transformar la información y acercarse al objetivo. Regino lo describe como los "cálculos necesarios para que a partir de un dato de entrada se llegue a los resultados"[13]. Aquí es donde ocurre la "magia" lógica.

3. SALIDA

Es el resultado final del algoritmo, la información que se obtiene después de que el proceso ha sido completado. Regino la define como los "resultados finales o transformaciones que ha sufrido la información de entrada a través del proceso"[14]. Es la solución al problema planteado inicialmente.

Ejemplos de Algoritmos en la Vida Diaria

Los algoritmos no son solo para computadoras; los usamos constantemente en nuestro día a día sin darnos cuenta. Son secuencias de acciones con un objetivo claro.

Ejemplo 1: Preparar un café ☕

Objetivo: Obtener una taza de café caliente.

  1. Inicio
  2. Llenar la cafetera con agua. (ENTRADA: Agua)
  3. Poner el filtro en la cafetera. (ENTRADA: Filtro)
  4. Añadir café molido al filtro. (ENTRADA: Café molido)
  5. Encender la cafetera. (PROCESO: Calentar agua, pasarla por el café)
  6. Esperar a que el café termine de prepararse. (PROCESO)
  7. Servir el café en una taza. (SALIDA: Café caliente)
  8. Fin

Ejemplo 2: Cruzar la calle 🚶‍♀️

Objetivo: Cruzar la calle de forma segura.

  1. Inicio
  2. Llegar a la esquina.
  3. Observar el semáforo para peatones: (ENTRADA: Estado del semáforo)
  4. ¿Está en verde? (PROCESO - Decisión)
  5. Si sí, cruzar la calle.
  6. Si no, esperar. (PROCESO - Ciclo: Repetir hasta que esté en verde o no haya tráfico)
  7. Observar el tráfico: (ENTRADA: Flujo de vehículos)
  8. ¿Vienen carros? (PROCESO - Decisión)
  9. Si no, cruzar la calle.
  10. Si sí, esperar. (PROCESO - Ciclo: Repetir hasta que no vengan carros)
  11. Llegar al otro lado de la calle. (SALIDA: Estar al otro lado)
  12. Fin

Tipos de Algoritmos

Existen dos tipos principales de algoritmos[15]:

  • Informales: Aquellos que son preferiblemente realizables por el ser humano (ej. dar un beso, cocinar). Omar Trejos Buriticá los describe como "aquellos algoritmos... que no son fácilmente implementables en un computador"[10]. Aunque la tecnología avanza, la ejecución humana sigue siendo la más natural.
  • Computacionales: Aquellos que deben ser preferiblemente implementados en un computador para aprovechar su velocidad de procesamiento (ej. generar los primeros 100 números primos). Son el foco principal de la programación.

Todo algoritmo debe ser preciso (indicar el orden), definido (mismo resultado si se repite), y finito (debe terminar en algún momento)[16].

La Prueba de Escritorio

La "prueba de escritorio" es la simulación manual de un algoritmo para verificar si cumple su objetivo. Omar Trejos Buriticá la define como "la simulación de la puesta en marcha de un algoritmo"[11]. Carlos Salazar Guaña la describe como "la simulación de la puesta en marcha de un algoritmo con el fin de conocer si el algoritmo que se ha diseñado logra el objetivo"[12]. Es la "prueba reina" que nos permite saber si el algoritmo está bien *antes* de codificarlo. Si el algoritmo no cumple el objetivo en esta prueba, debe corregirse.

Guardando Información: Variables y Constantes

Para que un algoritmo trabaje, necesita guardar y manipular datos. Aquí es donde entran en juego las variables y las constantes, que son "campos de memoria" donde se almacena información.

Variables

Imagina una variable como una caja en la memoria de la computadora[13]. Esta caja tiene un nombre y puede guardar un valor que puede cambiar a lo largo de la ejecución del programa. Carlos Salazar Guaña las describe como "pequeñas cajas de diferentes tamaños, lo que se debe aclarar previamente para que el computador asigne las dimensiones de memoria de acuerdo con las necesidades"[14]. Por ejemplo, la edad de una persona, el total de una compra, o un contador.

Tipos de Datos Comunes[14]:

  • Entero (Integer): Números sin punto decimal (ej. 5, -10, 1000). En sus operaciones "jamás va a generar decimales"[15].
  • Real (Float/Decimal): Números con punto decimal (ej. 3.14, 0.5, -9.99). En sus operaciones "puede generar decimales"[16].
  • Carácter (String): Texto, letras, palabras, frases (ej. "Hola", "A", "Python"). Se encierran entre comillas. Pueden almacenar letras, signos de puntuación, números. El computador "no evalúa las cadenas"[17].
  • Lógico (Boolean): Solo dos valores posibles: Verdadero (True) o Falso (False).
Ejemplo de Clasificación de Datos[18]:
Dato Tipo
25Entero
'A'Carácter
-4Entero
2.5Real
':'Carácter

Constantes

Una constante es como una caja sellada que guarda un valor que NO puede cambiar una vez que ha sido definido[19]. Son útiles para valores fijos que se usan repetidamente en el programa, como el valor de PI ($\pi$), una tasa de impuestos fija o el número de días en una semana.

Al igual que las variables, las constantes también tienen un tipo de dato asociado, que define qué tipo de valor pueden almacenar (entero, real, carácter, lógico).

Ejemplos de Constantes:

  • `PI = 3.14159` (Real)
  • `DIAS_SEMANA = 7` (Entero)
  • `MENSAJE_BIENVENIDA = "Bienvenido al sistema"` (Carácter)

Asignaciones: El Operador `=`

El signo igual (`=`) en programación es el operador de asignación. Significa que el computador va a realizar lo que está a la derecha del igual y lo va a almacenar en la variable que se encuentre a la izquierda[20]. Carlos Salazar Guaña afirma que "el operador de asignación funciona para todos los tipos de datos"[21]. Cada vez que se asigna un nuevo valor a una variable, el valor anterior se pierde[22].

  • A la izquierda del `=` solo puede haber una variable.
  • A la derecha del `=` puede haber una constante, otra variable o una expresión.
Ejemplo de Asignación:
A = 8       # Guarda la constante 8 en A
B = A       # Guarda el contenido de A (8) en B
C = A + B   # Guarda el resultado de (8 + 8 = 16) en C
B = 9       # El valor anterior de B (8) se pierde, ahora B es 9

Ejemplos Prácticos: Variables y Constantes

Veamos cómo se declaran y usan en pseudocódigo y luego en Python. La prueba de escritorio es crucial para entender el flujo de valores.

Pseudocódigo: Declaración y Asignación

Así es como se vería la definición y uso de variables y constantes en un pseudocódigo. La declaración indica el tipo de dato que almacenarán[23].

Proceso EjemploVariablesConstantes
    // Declaración de variables
    Definir edad Como Entero;
    Definir precio_producto Como Real;
    Definir nombre_usuario Como Caracter;
    Definir es_activo Como Logico;

    // Declaración de constantes (por convención, no hay 'Constante' en PSeInt)
    Definir TASA_IVA Como Real;
    TASA_IVA = 0.12; // 12%

    // Asignación de valores a variables
    edad = 25;
    precio_producto = 99.99;
    nombre_usuario = "Ana Perez";
    es_activo = Verdadero;

    // Operaciones con variables y constantes
    precio_final = precio_producto * (1 + TASA_IVA);

    // Mostrar valores
    Escribir "Edad: ", edad;
    Escribir "Producto: ", precio_producto;
    Escribir "IVA: ", TASA_IVA;
    Escribir "Precio Final (con IVA): ", precio_final;
    Escribir "Usuario activo: ", es_activo;
FinProceso

Python: Declaración y Asignación

En Python, la declaración es más implícita (se infiere el tipo al asignar), y las constantes se definen por convención (letras mayúsculas)[24].

num1 = float(input("Ingresa el primer número: "))
num2 = float(input("Ingresa el segundo número: "))

suma = num1 + num2
resta = num1 - num2
multiplicacion = num1 * num2

# Condición: Si el segundo número no es cero, realiza la división
if num2 != 0:
    division = num1 / num2
else:
    division = "Indefinida (división por cero)"

print(f"Suma: {suma}")
print(f"Resta: {resta}")
print(f"Multiplicación: {multiplicacion}")
print(f"División: {division}")
Salida de este código:
Edad: 25 Producto: 99.99 IVA: 0.12 Precio Final (con IVA): 111.9888 Usuario activo: True

Operadores Aritméticos y Prioridad

Los operadores son signos que permiten expresar relaciones entre variables y/o constantes[25]. Es crucial entender la jerarquía de operadores para evitar ambigüedades en las expresiones matemáticas[26].

Categoría Operador Prioridad
Aritmético (Potencia)^1 (Derecha a izquierda)
Aritmético (Mult/Div)*, /, %2 (Izquierda a derecha)
Aritmético (Suma/Resta)+, -3 (Izquierda a derecha)
Relacionales<, <=, >, >=4
Igualdad==, !=5
Lógico ANDY (AND)6
Lógico ORO (OR)7
Asignación=8

Los paréntesis `()` se usan para alterar esta jerarquía, forzando un orden específico de evaluación[27].

Las Estructuras del Pensamiento: Controlando el Flujo

Los algoritmos no son solo una lista de pasos; necesitan lógica para tomar decisiones y repetir acciones. El pensamiento humano se mueve entre tres estructuras básicas[28]:

1. Secuencia

Es la estructura más básica. Las instrucciones se ejecutan una tras otra, en el orden exacto en que están escritas. Cada paso se completa antes de pasar al siguiente[29]. Carlos Salazar Guaña la define como "ejecutar un conjunto de acciones una tras otra hasta alcanzar el objetivo"[30]. Piensa en una línea de ensamblaje o los pasos para encender tu computadora.

Paso 1: Abrir navegador
Paso 2: Escribir URL
Paso 3: Presionar Enter

Pseudocódigo de Secuencia:

Proceso MiSecuencia
    Escribir "Hola";
    Escribir "Mundo";
    Leer miVariable;
    miVariable = miVariable + 1;
FinProceso

2. Decisión (Condición)

Permite al algoritmo elegir un camino a seguir basándose en si una pregunta es Verdadera o Falsa. Siempre hay al menos dos caminos lógicos para elegir[31]. Omar Trejos Buriticá la describe como "la escogencia de uno de entre varios caminos lógicos dependientes todos de una condición"[32]. Es el "Si... Entonces... Sino..." de la programación.

Inicio
¿Número == 10?
No
"Es igual a 10"
"No es igual a 10"
Fin

Existen variantes como el "Si-Entonces simple" (solo actúa si la condición es verdadera), "Si-Entonces cascada" (múltiples decisiones encadenadas) y "Si-Entonces anidado" (un Si dentro de otro Si)[33]. Carlos Salazar Guaña también menciona la "Selección Múltiple" o "Estructura de Casos" para cuando se compara una variable con un determinado valor[34].

Operadores Relacionales y Lógicos:

Permiten comparar valores y combinar expresiones lógicas[35]:

  • Relacionales: `==` (igual), `!=` (diferente), `>` (mayor), `<` (menor), `>=` (mayor o igual), `<=` (menor o igual). "Al utilizar este tipo de operadores, el resultado siempre será un valor lógico: Verdadero (1) o Falso (0)"[36].
  • Lógicos (Booleanos): "Pueden o no trabajar en conjunto con los operadores relacionales permitiendo combinar expresiones lógicas sencillas para generar expresiones lógicas complejas"[37].
    • `Y` (AND): Verdadero si *ambas* condiciones son Verdaderas.
    • `O` (OR): Verdadero si *al menos una* condición es Verdadera.
    • `NO` (NOT): Invierte el valor de una condición.

Pseudocódigo de Decisión:

Si Condicion Entonces
    // Instrucciones si es Verdadero
Sino
    // Instrucciones si es Falso
FinSi

3. Ciclo (Repetición)

Permite ejecutar un conjunto de acciones las veces que sea necesario, siempre y cuando se cumpla una condición[38]. Son fundamentales para automatizar tareas repetitivas.

Los tipos comunes son "Mientras" (repite mientras la condición sea verdadera), "Repetir" (ejecuta al menos una vez y luego verifica la condición), y "Para" (repite un número fijo de veces)[39]. Carlos Salazar Guaña destaca que "la estructura Mientras está formada por dos partes: Expresión de tipo lógico y Conjunto de instrucciones"[40].

Pseudocódigo de Ciclos:

Ciclo Mientras:
Mientras Condicion Hacer
    // Cuerpo del ciclo
FinMientras
Ciclo Repetir:
Repetir
    // Cuerpo del ciclo
Hasta Que Condicion // Se ejecuta hasta que la condición sea verdadera
Ciclo Para:
Para Var = inicio Hasta fin Con Paso incremento Hacer
    // Cuerpo del ciclo
FinPara

¡A Programar! Ejemplos en Python

Ahora que conoces los conceptos, veamos cómo se aplican en código real. ¡Puedes interactuar con estos ejemplos para ver la lógica en acción! Recuerda la importancia del pseudocódigo como paso previo a la codificación[41].

Calculadora Simple 🧮

Este programa te permite ingresar dos números y realiza las operaciones básicas: suma, resta, multiplicación y división. Observa cómo el código maneja la división por cero usando una condición[42].

Pseudocódigo:

Proceso CalculadoraSimple
    Definir num1, num2, suma, resta, multiplicacion, division Como Real;
    Escribir "Ingresa el primer número: ";
    Leer num1;
    Escribir "Ingresa el segundo número: ";
    Leer num2;

    suma = num1 + num2;
    resta = num1 - num2;
    multiplicacion = num1 * num2;

    Si num2 != 0 Entonces
        division = num1 / num2;
    Sino
        Escribir "División Indefinida (división por cero)";
        division = 0; // O manejar de otra forma, por ejemplo, un mensaje
    FinSi

    Escribir "Suma: ", suma;
    Escribir "Resta: ", resta;
    Escribir "Multiplicación: ", multiplicacion;
    Si num2 != 0 Entonces
        Escribir "División: ", division;
    FinSi
FinProceso

Código Python:

num1 = float(input("Ingresa el primer número: "))
num2 = float(input("Ingresa el segundo número: "))

suma = num1 + num2
resta = num1 - num2
multiplicacion = num1 * num2

# Condición: Si el segundo número no es cero, realiza la división
if num2 != 0:
    division = num1 / num2
else:
    division = "Indefinida (división por cero)"

print(f"Suma: {suma}")
print(f"Resta: {resta}")
print(f"Multiplicación: {multiplicacion}")
print(f"División: {division}")

Verificador de Edad 🧑‍🎓

Este programa simple te pide tu edad y, usando una condición, determina si eres mayor o menor de edad (mayor a 17 años). Es un ejemplo clásico de cómo la lógica de decisión se aplica en el código[43].

Pseudocódigo:

Proceso VerificaEdad
    Definir edad Como Entero;
    Escribir "Por favor, ingresa tu edad: ";
    Leer edad;

    Si edad > 17 Entonces
        Escribir "Eres mayor de edad.";
    Sino
        Escribir "Eres menor de edad.";
    FinSi
FinProceso

Código Python:

edad = int(input("Por favor, ingresa tu edad: "))

# Condición: Si la edad es mayor a 17
if edad > 17:
    print("Eres mayor de edad.")
else: # Si la edad no es mayor a 17 (es 17 o menos)
    print("Eres menor de edad.")

Tabla de Multiplicar con Ciclo "Para" 🔄

Este programa genera la tabla de multiplicar de un número que elijas, del 1 al 10. Utiliza un ciclo "Para" para repetir la operación de multiplicación 10 veces, mostrando cómo automatizar tareas repetitivas[44].

Pseudocódigo:

Proceso TablaMultiplicar
    Definir numero, i Como Entero;
    Escribir "Ingresa un número para su tabla de multiplicar: ";
    Leer numero;

    Para i = 1 Hasta 10 Con Paso 1 Hacer
        Escribir numero, " x ", i, " = ", numero * i;
    FinPara
FinProceso

Código Python:

numero = int(input("Ingresa un número para su tabla de multiplicar: "))

# Ciclo "Para" que va de 1 a 10
for i in range(1, 11): # range(1, 11) genera números del 1 al 10
    resultado = numero * i
    print(f"{numero} x {i} = {resultado}")

Notas al Pie

  1. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 21)
  2. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 17, citando Diccionario de la Lengua Española, 2019)
  3. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 16)
  4. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 17)
  5. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 16)
  6. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 18)
  7. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 18)
  8. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 16)
  9. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 28)
  10. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 19)
  11. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 20)
  12. Regino, E. M. (s.f.). *Lógica de programación*. (citado en Salazar Guaña, C. E., 2022, p. 21)
  13. Regino, E. M. (s.f.). *Lógica de programación*. (citado en Salazar Guaña, C. E., 2022, p. 21)
  14. Regino, E. M. (s.f.). *Lógica de programación*. (citado en Salazar Guaña, C. E., 2022, p. 21)
  15. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 20)
  16. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 20)
  17. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 30)
  18. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 21)
  19. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 37)
  20. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 27)
  21. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 38)
  22. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 38)
  23. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 39); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 28)
  24. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 28)
  25. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 40)
  26. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 27)
  27. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 39); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 28)
  28. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 28)
  29. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 40)
  30. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 45); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 28)
  31. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 46); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 31)
  32. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 49); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 31)
  33. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 58); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 22)
  34. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 58); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 23)
  35. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 32)
  36. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 59); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 45)
  37. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 149)
  38. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 49-56)
  39. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 61)
  40. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 85-87); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 29-30)
  41. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 29)
  42. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 30)
  43. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 61); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 64)
  44. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 176); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 65)
  45. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 65)
  46. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 25)
  47. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 47)
  48. Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 59)
  49. Trejos Buriticá, O. I. (2017). *Lógica de programación*. Ediciones de la U. (p. 177); Salazar Guaña, C. E. (2022). *Lógica de Programación*. Instituto Superior Tecnológico CEMLAD. (p. 72)

Referencias