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:
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
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
ENDEjemplo 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
ENDEjemplo 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
ENDAná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
ENDExplicació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)
ENDCó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:
Adaptar Sintaxis: Cambiar las palabras clave del pseudocódigo por la sintaxis del lenguaje objetivo
Especificar Tipos de Datos: Definir explícitamente los tipos de variables si el lenguaje lo requiere
Manejar Entrada/Salida: Reemplazar IN() y OUT() por las funciones específicas del lenguaje
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
¿En qué tipo de problema crees que un diagrama de flujo sería más útil que el pseudocódigo, y viceversa?
¿Por qué el proceso de escribir pseudocódigo puede ayudar a un equipo de programadores a trabajar de forma más coordinada?
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?