Desarrollo en curso, en breve se publicarán el resto de temas.

Capítulo 2: El Lenguaje del Pensamiento. Representando Algoritmos

2.1. Introducción: Visualizando la Lógica

Antes de traducir un algoritmo a un lenguaje de programación, es fundamental tener una forma clara de representarlo y comunicarlo. Escribir la lógica en un formato intermedio nos ayuda a pensar, a detectar errores y a colaborar con otros. Las dos herramientas más extendidas para esta tarea son los diagramas de flujo y el pseudocódigo. Cada uno ofrece una perspectiva diferente: el primero es eminentemente gráfico y visual, mientras que el segundo se acerca más a la estructura del código real. Dominar ambos te dará una gran flexibilidad para diseñar soluciones.


2.2. Diagramas de Flujo: Una Visión Gráfica

Un diagrama de flujo es una representación gráfica de un algoritmo. Utiliza una serie de símbolos estandarizados conectados por flechas para mostrar la secuencia de operaciones y el flujo de control del programa. Es una herramienta excelente para visualizar la lógica general de un vistazo.

La simbología estándar incluye:

Símbolo
Nombre
Función

Terminal

Representa el inicio o el final del algoritmo.

Ej: INICIO, FIN.

Línea de Flujo

Indica el orden de ejecución y conecta los demás símbolos.

Entrada/Salida

Representa la lectura de datos o la presentación de resultados.

Ej: Leer número.

Proceso

Representa cualquier operación o cálculo.

Ej: suma = a + b.

Decisión

Representa una bifurcación en el flujo basada en una condición.

Ej: ¿edad >= 18?.

🟢 Ventajas

  • Claridad Visual: Facilitan la comprensión rápida del flujo lógico.

  • Comunicación: Son universalmente entendidos, incluso por personas sin perfil técnico.

  • Detección de Errores: Los bucles infinitos o flujos incorrectos a menudo son evidentes visualmente.

🔴 Limitaciones

  • Complejidad: Para algoritmos grandes, los diagramas se vuelven enormes y difíciles de manejar.

  • Modificación: Un pequeño cambio en la lógica puede requerir redibujar una gran parte del diagrama.

Ejemplo: Diagrama de Flujo para Determinar si un Número es Par

Aunque son muy útiles para visualizar algoritmos sencillos, su rigidez y dificultad de modificación para problemas complejos nos llevan a buscar una alternativa más flexible: el pseudocódigo.


2.3. Pseudocódigo: Lógica en Lenguaje Humano

El pseudocódigo es un puente entre el lenguaje natural humano y el lenguaje de programación. Es una forma de describir un algoritmo utilizando una mezcla de palabras comunes (como "Si", "Mientras", "Leer") y una estructura similar a la del código, pero sin ceñirse a la sintaxis estricta de ningún lenguaje en particular.

Características Principales:

  • Lenguaje Natural Estructurado: Usa palabras clave en español o inglés para denotar acciones y estructuras lógicas.

  • Flexibilidad: No tiene reglas sintácticas estrictas. El objetivo es la claridad, no la compilación.

  • Facilidad de Traducción: Su estructura lógica facilita enormemente la posterior escritura del código real en cualquier lenguaje.

Sintaxis de Referencia para Pseudocódigo

Nota: No existe un estándar universal para el pseudocódigo. Lo importante no es seguir una sintaxis al pie de la letra, sino ser claro y consistente en la forma de expresar la lógica. A continuación, se muestra una posible sintaxis como referencia.

Palabras Clave:

  • PROGRAM, BEGIN, END: Para delimitar el programa y bloques de código.

  • IN(): Para representar la entrada de datos (leer del usuario).

  • OUT(): Para representar la salida de datos (mostrar en pantalla).

  • IF ... THEN ... ELSE: Para estructuras condicionales.

  • WHILE ... THEN: Para bucles (mientras se cumpla una condición).

  • AND, OR, NOT: Operadores lógicos.

Utilizaremos pues la siguiente estructura a nivel de algoritmo:

PROGRAM NombreAplicacion
BEGIN
    [instrucciones]
    
    WHILE condicion==True THEN
    BEGIN
        [instrucciones del bucle]
    END
    
    IF condicion THEN
    BEGIN
        [instrucciones si verdadero]
    END
    ELSE
    BEGIN
        [instrucciones si falso]
    END
    
END

Ejemplo 1: Programa de Zapping de TV

Este pseudocódigo describe la lógica de una persona que hace zapping hasta que encuentra un canal que le gusta o se cansa.

PROGRAM TVZapping
BEGIN
    // Inicializamos las variables de estado
    Gustar_Canal = "no"
    Cansado = "no"

    // Empezamos la secuencia
    Iniciar_TV()
    Seleccionar_canal_aleatorio()

    // Bucle principal: seguimos haciendo zapping mientras no nos guste el canal Y no estemos cansados
    WHILE Gustar_Canal=="no" AND Cansado=="no" THEN
    BEGIN
        // Cambiamos de canal y preguntamos al usuario
        Seleccionar_canal_aleatorio()
        Gustar_Canal = IN("¿Te gusta este canal? (si/no)") == "si"
        Cansado = IN("¿Estás cansado? (si/no)") == "si"
    END

    // Decisión final basada en cómo salimos del bucle
    IF Gustar_Canal=="si" THEN
        // Si encontramos un canal que nos gusta, lo vemos
        Mirar_Programa()
    ELSE
        // Si nos cansamos, apagamos la tele y hacemos otra cosa
        Parar_TV()
        Leer_Libro()
    END
END

Ejemplo 2: Validación de Email (con Corrección Crítica)

A veces, el pseudocódigo nos ayuda a detectar errores lógicos antes de escribir código. Veamos un ejemplo.

Versión Original (con error lógico):

PROGRAM Ex8-MailCheck
BEGIN
    cont = 5
    mail = IN("Introduce una dirección de correo electrónico")

    // ERROR LÓGICO AQUÍ
    WHILE textoContiene(mail,"@")==True AND esDominioValido(mail)==True THEN
    BEGIN
        cont = cont - 1
        IF cont==-1 THEN
            OUT("No tienes más intentos, inténtalo de nuevo más tarde.")
        ELSE
            mail = IN("Correo electrónico incorrecto, vuelve a intentarlo.")
        END
    END

    IF cont>=0 THEN
        OUT("Correo electrónico correcto")
    END
END

Análisis del Error: La condición WHILE dice: "mientras el email contenga '@' Y el dominio sea correcto, ejecuta el bucle". Esto es lo contrario de lo que queremos. El bucle debería ejecutarse cuando el email es incorrecto para pedir al usuario que lo reintente. El código original solo entraría en el bucle si el email ya es válido, lo cual no tiene sentido.

Versión Corregida:

PROGRAM Ex8-MailCheck
BEGIN
    cont = 5
    mail = IN("Introduce una dirección de correo electrónico")

    // CONDICIÓN CORREGIDA
    WHILE NOT(textoContiene(mail,"@")==True AND esDominioValido(mail)==True) THEN
    BEGIN
        cont = cont - 1
        IF cont==-1 THEN
            OUT("No tienes más intentos, inténtalo de nuevo más tarde.")
        ELSE
            mail = IN("Correo electrónico incorrecto, vuelve a intentarlo.")
        END
    END

    IF cont>=0 THEN
        OUT("Correo electrónico correcto")
    END
END

Explicación de la Corrección: La nueva condición WHILE NOT (...) invierte la lógica. Ahora el bucle se ejecuta si la condición de email válido no se cumple, que es exactamente el comportamiento deseado para una validación.

Del Pseudocódigo al Código Real

El paso final es traducir el pseudocódigo a un lenguaje de programación. Observa la similitud:

Pseudocódigo:

PROGRAM CalculoPerimetro
BEGIN
    radio = IN("Introduce el radio del círculo")
    perimetro = 2 * 3.14159 * radio
    OUT("El perímetro es: " + perimetro)
END

Código Python Equivalente:

# Definición de constantes
PI = 3.14159

# Entrada de datos (traducción de IN())
# Es necesario convertir el texto a un número flotante (float)
radio = float(input("Introduce el radio del círculo: "))

# Proceso
perimetro = 2 * PI * radio

# Salida de datos (traducción de OUT())
print(f"El perímetro es: {perimetro}")

El proceso de convertir pseudocódigo a código real implica:

  1. Adaptar Sintaxis: Cambiar las palabras clave del pseudocódigo por la sintaxis del lenguaje objetivo

  2. Especificar Tipos de Datos: Definir explícitamente los tipos de variables si el lenguaje lo requiere

  3. Manejar Entrada/Salida: Reemplazar IN() y OUT() por las funciones específicas del lenguaje

  4. Optimizar: Aplicar mejoras específicas del lenguaje de programación


Resumen del Capítulo

En este capítulo, hemos explorado las dos herramientas principales para representar algoritmos: los diagramas de flujo y el pseudocódigo. Los diagramas de flujo ofrecen una visión gráfica excelente para algoritmos simples, mientras que el pseudocódigo proporciona una forma más flexible, detallada y cercana al código final, ideal para algoritmos complejos y para detectar errores lógicos en la fase de diseño.

💡 Conceptos Clave

  • Diagrama de Flujo: Representación gráfica de un algoritmo. Ideal para visualización.

  • Pseudocódigo: Descripción de un algoritmo en lenguaje natural estructurado. Ideal para el diseño lógico detallado.

  • Ventajas y Desventajas: Cada método tiene sus fortalezas y es más adecuado para diferentes fases o tipos de problemas.

🤔 Preguntas de Reflexión

  1. ¿En qué tipo de problema crees que un diagrama de flujo sería más útil que el pseudocódigo, y viceversa?

  2. ¿Por qué el proceso de escribir pseudocódigo puede ayudar a un equipo de programadores a trabajar de forma más coordinada?

  3. Toma el algoritmo de tu desayuno del capítulo anterior y represéntalo primero con un diagrama de flujo y luego con pseudocódigo.

🎬 Vídeo de Resumen:


Última actualización

¿Te fue útil?