Diagramas de flujo
Representación visual de algoritmos mediante diagramas de flujo para comprender y planificar la lógica de un programa.
Introducción
Antes de escribir un programa, es fundamental comprender la lógica del problema que se quiere resolver. Una de las herramientas más úctiles y potentes para representar esa lógica de forma clara y visual son los diagramas de flujo. Estos diagramas permiten representar procesos o algoritmos utilizando símbolos gráficos conectados por flechas que indican el flujo de la ejecución.
Gracias a los diagramas de flujo, podemos entender y comunicar la secuencia de pasos de un algoritmo sin necesidad de escribir código, facilitando la planificación, el análisis y la detección de errores en fases tempranas del desarrollo.
Conocimiento previo
Referencias
- Wikipedia - Diagrama de flujo
- Wikipedia - Diagrama Nassi-Shneiderman
- Lucidchart - Flowchart Symbols
- Baskanderi, N. (2017). UX Glossary: Task Flows, User Flows, Flowcharts and some new-ish stuff
Índice
- ¿Qué es un diagrama de flujo?
- Usos habituales
- Elementos de un diagrama de flujo
3.1. Simbolos básicos
3.2. Otros símbolos - Diagrama de Nassi-Shneiderman
- Sintaxis y estructuras de programación
5.1. Instrucciones básicas
5.2. Estructuras de control
5.3. Estructuras iterativas
5.4. Estructuras modulares - Ejemplos
- Consideraciones para diseñar diagramas
- Herramientas para trabajar diagramas de flujo
- Ejercicios
1. ¿Qué es un diagrama de flujo?
Un diagrama de flujo, ordinograma o flujograma es una representación gráfica que utiliza símbolos para mostrar la secuencia lógica de pasos que se deben seguir para resolver un problema o realizar una tarea. Es una herramienta visual para planificar algoritmos y procesos, facilitando la comprensión y comunicación de ideas complejas. Puede ser utilizado en diversas áreas como la programación, la ingeniería, la gestión de proyectos y más. Además, puede ser un complemento útil para el pseudocódigo, ya que ambos sirven para representar la lógica de un algoritmo antes de implementarlo en un lenguaje de programación.
2. Usos habituales
Como ya se ha mencionado, los diagramas de flujo se utilizan en diversas áreas y contextos. Algunos de los usos más habituales que nos podemos encontrar son:
-
Diagrama de flujo de procesos (DFP) Representa de forma gráfica los pasos secuenciales de un proceso general o empresarial. Se usa mucho en gestión de calidad o análisis de procesos.
-
Diagrama de flujo de datos (DFD) Representa cómo circula la información dentro de un sistema, identificando entradas, procesos, almacenamiento y salidas. Es muy usado en ingeniería de software y análisis de sistemas.
-
Diagrama de flujo de trabajo (workflow) Describe el flujo de tareas o actividades entre personas, departamentos o sistemas, mostrando cómo se coordina el trabajo.
-
Diagrama de flujo de control (DFC) Representa el flujo de control de un programa, mostrando las decisiones, bifurcaciones y ciclos de ejecución. Se enfoca en la estructura lógica.
-
Diagrama de flujo de sistemas (DFS) Muestra cómo interactúan los componentes de un sistema, incluyendo software, hardware, usuarios y procesos.
-
Diagrama de flujo de negocio (DFN) Específico del ámbito empresarial, describe procesos clave de negocio de forma visual y comprensible.
-
Diagrama de flujo de decisiones Similar a un diagrama de flujo convencional, pero centrado en representar visualmente decisiones complejas y sus posibles consecuencias o caminos.
-
Diagrama de flujo de programación Se utiliza para describir la lógica de un algoritmo o programa de manera visual antes de implementarlo en código. Es muy habitual en la enseñanza de la programación y en fases de diseño.
-
Diagrama de actividad (UML) Es un tipo especial de diagrama dentro de UML (Unified Modeling Language) , utilizado para representar flujos de trabajo o procesos dentro del desarrollo de software. Aunque no es estrictamente un diagrama de flujo tradicional, se le considera un derivado adaptado a metodologías orientadas a objetos.
En este recurso nos centraremos en los diagramas de flujo de programación, que son útiles para:
- Planificar y diseñar algoritmos antes de escribir código.
- Visualizar la lógica de un programa de manera clara y ordenada, identificando entradas, procesos, deciones y salidas.
- Facilitar la comunicación como parte documental entre desarrolladores y otros interesados que necesiten entender la lógica de un proceso sin visualizar el código fuente.
- Detectar errores o inconsistencias en la lógica antes de implementar el código.
- Documentar procesos y sistemas existentes, permitiendo su análisis, mejora o mantenimiento posterior.
3. Elementos de un diagrama de flujo
Los diagramas de flujo utilizan una simbología estandarizada para representar los distintos tipos de acciones, decisiones y conexiones que forman parte de un proceso o algoritmo. Cada símbolo tiene un significado específico, y es fundamental respetar estos estándares para garantizar que cualquier persona pueda interpretar el diagrama correctamente, independientemente de su contexto o experiencia previa.
El uso de esta simbología está regulado por el American National Standards Institute (ANSI) X3.5-1970 , que establece las normas oficiales sobre cómo deben representarse los elementos de un diagrama de flujo. Estas normas aseguran que los diagramas sean claros, coherentes y universales, facilitando la comunicación entre profesionales de diferentes áreas y mejorando la documentación de procesos.
3.1. Simbolos básicos
Los símbolos más comunes en los diagramas de flujo son:
- Óvalo: Terminaciones que se utiliza para indicar el punto de inicio y el punto de finalización del diagrama de flujo. Es obligatorio en cualquier diagrama y suele tener solo una entrada (para el inicio) y una salida (para el fin).
- Rectángulo: Representa un proceso, instrucción o acción específica. Dentro de un algoritmo, suele corresponderse con cálculos, asignaciones de variables, llamadas a funciones o cualquier operación secuencial.
- Rombo: Representa una pregunta o condición que puede tener dos salidas: “Sí” y “No” (true/false).
- Paralelogramo: Representa entrada o salida de datos, como leer información del usuario o mostrar resultados en pantalla.
- Rectangulo con borde superior curvado (cóncavo): Representa una salida por pantalla. Se puede utilizar de esta forma o con el paralelogramo.
- Rectángulo con un borde superior inclinado: Representa una entrada manual. Se solicita al usuario que introduzca datos manualmente, por ejemplo, por consola.
- Flechas: Indican la secuencia y dirección del flujo de ejecución. Conectan el resto de símbolos entre sí y muestran el orden en el que deben ejecutarse las instrucciones. Pueden aparecer flechas que no indiquen la dirección, en estos casos, la dirección siempre será de arriba hacia abajo o de izquierda a derecha.
- Rectángulo con líneas dobles: Representa un subproceso, módulo o función, es decir, un proceso que se detalla en otro diagrama o parte del sistema.

Con estos simbolos son suficiente para representar la mayoría de los algoritmos básicos.
3.2. Otros símbolos
Existen otros símbolos menos comunes pero útiles en diagramas de flujo más complejos:
- Círculo: Conector para conectar diferentes partes del diagrama, especialmente en diagramas grandes donde no es práctico dibujar flechas largas.
- Pentágono: Otro conector, pero este sirve para especificar diferentes páginas o secciones de un diagrama de flujo.
- Rectángulo con un borde inferior ondulado (curvado): Representa un documento o informe generados, recibido o utilizado en un proceso.
- Varios documentos: Representan varios elementos de documentos superpuestos.
- Semicírculo en forma de “D”: Representa un retraso, pausa o período de espera en un proceso. Sirve para detener temporalmente el flujo de ejecución.
- Cilindro: Representa el almacenamiento en una base de datos.

4. Diagrama de Nassi-Shneiderman
Existe otro diagrama muy parecido a los diagramas de flujo, pero que se utiliza menos. Se trata del diagrama de Nassi-Shneiderman, también conocido como diagramas estructurados o diagramas de bloques. Aunque ambos tipos de diagramas sirven para representar la lógica de un algoritmo, tienen enfoques y estilos diferentes.
Su principal objetivo es representar la estructura de un algoritmo de manera jerárquica y ordenada, evitando las ambigüedades que pueden surgir en los diagramas de flujo tradicionales. Su principal diferencia es que no utilizan flechas para conectar los pasos, sino que se organizan en bloques anidados que representan la jerarquía y el flujo de control de manera más clara.
Sus principales características son:
- Los procesos se representan con bloques rectangulares anidados.
- La secuencia se expresa de arriba hacia abajo, de forma ordenada.
- Las estructuras condicionales y los bucles se integran de forma estructurada mediante divisiones en el bloque.
- No existen bifurcaciones arbitrarias; todo sigue una jerarquía lógica.
Este tipo de diagramas es muy útil para programadores, porque se parece mucho a la estructura real de un programa en pseudocódigo o código fuente. También favorece el diseño de algoritmos sin desviaciones innecesarias en el flujo, lo que promueve buenas prácticas de programación.
A continuación se muestran sus elementos principales:
- Función o Programa: Representa un bloque que contiene un conjunto de instrucciones, funciones o procedimientos. Puede incluir otros bloques anidados.
- Proceso: Es la unidad más simple de un algoritmo, un único paso que representa una acción o instruccion. No puede contener otros elementos dentro.
- Condición (Decisión o Rama): Permite elegir entre diferentes caminos según una condición. Las opciones se muestran en bloques horizontales, uno al lado del otro.
- Bucle (Repetición): Representa un bloque que se ejecuta mientras se cumple una condición. La condición se puede comprobar antes o después de ejecutar el bloque. Puede contener otros elementos en su interior (el cuerpo del bucle).
- Procesos Concurrentes (Paralelo): Representa acciones que se ejecutan al mismo tiempo. Los bloques paralelos se colocan uno al lado del otro, de forma horizontal

5. Sintaxis y estructuras de programación
Como se ha explicado previamente, mediante un diagrama de flujo es posible representar gráficamente cualquier elemento relacionado con la programación, tal y como se explica en el recurso pseudocódigo.
5.1. Instrucciones básicas
En los diagramas, al igual que ocurre en la estructura secuencial de cualquier programa, el flujo de ejecución transcurre de arriba hacia abajo. Las instrucciones comienzan tras el terminador de inicio y finalizan al llegar al terminador de fin.
Forma clásica

Nassi-Shneiderman

Mediante las instrucciones es posible representar distintas acciones, como por ejemplo:
- Declaración de variables
- Asignación de valores
- Operaciones lógicas, matemáticas, etc.
Además, se pueden añadir comentarios, que aunque no tienen ningún efecto sobre la ejecución del programa, sirven para aclarar el funcionamiento del algoritmo o explicar pasos complejos. Los comentarios son útiles para mejorar la comprensión y el mantenimiento del código.
Forma clásica

Nassi-Shneiderman

5.2. Estructuras de control
Las estructuras de control alternativas permiten que un programa tome decisiones y ejecute diferentes caminos según ciertas condiciones. Se pueden representar de diversas formas:
- Alternativa simple (Si)
Conocida como if
en inglés, se utiliza cuando se desea ejecutar una instrucción o un bloque de instrucciones solo si se cumple una condición.
Forma clásica

Nassi-Shneiderman

- Alternativa doble (Si/No)
En inglés if-else
, permite ejecutar un bloque de instrucciones si se cumple una condición y, en caso contrario, ejecutar un bloque diferente.
Forma clásica

Nassi-Shneiderman

- Alternativa multiple (Según)
Se utiliza cuando existen varias opciones posibles. Según el valor evaluado, se ejecuta uno de los casos disponibles. Es la representación gráfica del switch/case
en muchos lenguajes de programación.
Forma clásica

Nassi-Shneiderman

Esta estructura evalúa una expresión única y compara su resultado con los diferentes valores definidos en los diferentes casos. No se trata de una serie de condiciones booleanas independientes, sino de un único proceso de selección basado en el valor del evaluador. Si no existe un caso definido, cogera la opción alternativa default que en la imagen se puede ver con el texto De otro modo
.
5.3. Estructuras iterativas
Las estructuras iterativas permiten que un programa repita un bloque de instrucciones varias veces, siempre bajo unas condiciones determinadas. Son fundamentales para automatizar tareas repetitivas, evitando tener que escribir el mismo código múltiples veces.
Podemos encontrar diferentes formas de representar la repetición:
- Iteración con salida al principio (Mientras)
Conocido en inglés como while
, esta estructura evalúa la condición de repetición al principio del ciclo. Si la condición se cumple, se ejecutan las instrucciones del bucle. En caso contrario, el ciclo no se ejecuta y el flujo continúa.
Esto significa que puede ocurrir que las instrucciones a repetir no se ejecuten nunca, si desde el inicio la condición resulta falsa.
Forma clásica

Nassi-Shneiderman

- Iteración con salida al final (Repetir)
A diferencia del mientras
, la estructura repetir
(en algunos lenguajes conocida como do...while
) evalúa la condición al final del ciclo.
Esto significa que el bloque de instrucciones se ejecuta al menos una vez, ya que la condición se comprueba después de la primera ejecución.
Forma clásica

Nassi-Shneiderman

- Iteración con contador (Para)
La estructura para
(for
en inglés) permite repetir un bloque de instrucciones un número conocido y controlado de veces.
Es muy similar al mientras
, pero está orientada a bucle con contador, donde se sabe de antemano cuántas veces se repetirá la operación.
Forma clásica

Nassi-Shneiderman

Como se puede ver en la imagen, para esta estructura es necesario:
- Identificador variable Es la variable que actúa como índice o contador del bucle y controla el avance de la repetición.
- Valor inicial Define el valor por el que empezará el contador.
- Incremento/Decremento Es la operación que modifica el valor de la variable contador en cada repetición. Puede ser positivo (incremento) o negativo (decremento).
- Valor final Indica el límite que determina cuándo debe finalizar el bucle. Cuando la variable contador alcanza este valor, el ciclo se detiene.
5.4. Estructuras modulares
Hasta ahora, hemos visto diagramas de flujo que representan programas donde todas las instrucciones se encuentran en un único bloque. El flujo comenzaba después de la instrucción Inicio
y terminaba con Fin
. Sin embargo, en la programación modular, las instrucciones no siempre están en el mismo bloque de código.
En lugar de un único algoritmo, podemos tener varios bloques o módulos independientes, cada uno con su propio nombre y funcionalidad. Esto es muy útil porque permite dividir el programa en partes más pequeñas y fáciles de entender, reutilizar y mantener.
Para trabajar con estructuras modulares, las instrucciones de inicio y fin pueden ir acompañadas de un nombre que identifica el bloque. Por ejemplo:
Inicio Principal
–Fin
Algoritmo Nombre
–Fin Algoritmo
Proceso Nombre
–Fin Proceso
SubProceso Nombre
–Fin SubProceso
Esto nos ayuda a saber qué instrucciones pertenecen a cada bloque y cómo se llaman.
Cada uno de estos bloques independientes se puede invocar (llamar) desde otro bloque, simplemente escribiendo su nombre. De esta forma, un algoritmo principal puede delegar tareas concretas a otros módulos.
Podemos encontrar dos tipos principales de bloques modulares:
- Procedimientos
Un procedimiento es un bloque de instrucciones que realiza una acción concreta. Cuando termina su ejecución, no devuelve ningún valor al bloque que lo llamó. Su función es realizar tareas como mostrar información, calcular un valor o modificar datos, pero sin retornar un resultado explícito.
Forma clásica

Nassi-Shneiderman

En el ejemplo, podemos ver un subproceso llamado Procedimiento
. Desde el programa principal se invoca escribiendo su nombre seguido de paréntesis vacíos.
- Funciones
Las funciones son muy similares a los procedimientos, pero tienen una diferencia importante: al finalizar su ejecución, devuelven un valor al bloque que las llamó.
Forma clásica

Nassi-Shneiderman

En el diagrama podemos observar que, además del bloque llamado Funcion
, aparece una referencia a una variable donde se guardará el valor que devuelve la función.
Además, es obligatorio que se incluya una instrucción de retorno al final de su bloque, indicando qué dato va a devolver al invocante.
Parámetros o Argumentos
Tanto los procedimientos como las funciones pueden recibir información de entrada, conocida como parámetros o argumentos. Esto les permite trabajar con datos concretos, haciendo el bloque más flexible y reutilizable.
Para definir un parámetro, se escribe después del nombre del bloque, entre paréntesis y separados por comas si hay varios. Cada parámetro recibe un nombre y se comporta como una variable local, es decir, se podrá utilizar dentro del propio bloque modular como si fuera una variable propia.
A la hora de invocar un procedimiento o función, se debe indicar su nombre seguido de paréntesis, y dentro de ellos se pasarán los valores concretos (uno por cada parámetro definido). Estos valores se asignarán en el mismo orden en el que se declararon los parámetros.
Forma clásica

Nassi-Shneiderman

6. Ejemplos
- Ejemplo 1
Solicitar un número al usuario y lo muestra por pantalla.
Forma clásica

Nassi-Shneiderman

- Ejemplo 2
Se muestra por pantalla la cuenta atrás de 10.
Forma clásica

Nassi-Shneiderman

- Ejemplo 3
Solicita un número entero positivo al usuario y muestra por pantalla los dígitos que tiene. La funcionalidad de conocer los dígitos que hay se realiza en un bloque aparte.
Forma clásica

Nassi-Shneiderman

7. Consideraciones para diseñar diagramas
Antes de ponerte a diseñar un diagrama de flujo, es importante tener en cuenta algunos aspectos para evitar errores y ahorrar tiempo. Un mal planteamiento puede provocar que el diagrama resulte confuso o poco útil, incluso aunque técnicamente sea correcto.
A continuación, tienes algunos consejos prácticos:
-
Aunque existen herramientas que facilitan su creación, elaborar un diagrama de flujo requiere tiempo y atención al detalle. Por eso, es recomendable dejar su diseño para el final, una vez que tengas claro cómo funciona el programa.
-
Primero escribe el pseudocódigo. Cuando tengas una versión definitiva y revisada, entonces es el momento adecuado para crear el diagrama de flujo.
-
En las primeras versiones del diagrama, intenta reflejar todas las instrucciones completas. Más adelante, cuando comprendas bien el funcionamiento, podrás simplificar o resumir algunos bloques, omitiendo detalles evidentes para centrarte en la lógica principal.
Además de seguir los consejos anteriores, debes respetar algunas reglas y buenas prácticas para que el diagrama sea claro, ordenado y fácil de entender:
- Debe haber un único punto de inicio y un único punto de fin.
- Nombra adecuadamente cada bloque, proceso o algoritmo.
- Las flechas deben indicar de forma clara la dirección del flujo. En las decisiones (por ejemplo, un IF), siempre debe haber al menos dos salidas: verdadero y falso.
- Dibuja el diagrama de arriba hacia abajo o de izquierda a derecha, siguiendo un orden lógico y evitando cambios de dirección innecesarios.
- Usa símbolos estándar reconocidos internacionalmente, para que cualquier persona pueda interpretar tu diagrama sin dificultad.
- Evita cruzar flechas siempre que sea posible. Los cruces pueden hacer que el diagrama sea confuso o difícil de seguir.
- Etiqueta o comenta claramente cada paso o decisión, escribiendo descripciones breves pero precisas dentro de cada símbolo.
- Si el diagrama es muy grande, utiliza conectores de página. Estos sirven para enlazar partes del diagrama que están en páginas diferentes o muy alejadas en el mismo documento.
8. Herramientas para trabajar diagramas de flujo
Existen múltiples herramientas tanto gratuitas como de pago que permiten crear diagramas de flujo con distintas funcionalidades adaptadas a diferentes necesidades: desde el uso educativo hasta la documentación profesional de procesos.
A continuación, se describen algunas de las más utilizadas:
- Draw.io (diagrams.net) 👉 https://app.diagrams.net/ 👈
Actualmente conocido como diagrams.net, es una de las herramientas más populares para crear diagramas de flujo y otros tipos de esquemas gráficos. Es gratuita y no requiere registro permite trabajar de forma online con el navegador y con su aplicación de escritorio. Además, se puede integrar con servicios de almacenamiento en la nube como Google Drive, OneDrive o Dropbox.

- Lucidchart 👉 https://lucid.app/ 👈
Lucidchart es una herramienta online muy utilizada en entornos profesionales y educativos para crear diagramas de flujo, organigramas, mapas mentales y otros esquemas visuales. Dispone de una interfaz intuitiva y permite la colaboración en tiempo real, lo que facilita el trabajo en equipo. Cuenta con una versión gratuita con ciertas limitaciones y varias opciones de pago para usos más avanzados.

- Canva 👉 https://www.canva.com/ 👈
Canva es una plataforma de diseño gráfico online que, además de permitir crear presentaciones, infografías y otros contenidos visuales, ofrece la opción de crear diagramas de flujo de forma sencilla y atractiva. Es especialmente útil si se quiere dar un enfoque estético o visual al diagrama, ya que combina facilidad de uso con una gran cantidad de elementos gráficos y plantillas. Dispone de versión gratuita y de opciones premium.

- PseInt 👉 https://pseint.sourceforge.net/ 👈 PseInt es una herramienta diseñada principalmente para aprender programación mediante pseudocódigo. Aunque su enfoque principal no son los diagramas, permite generar automáticamente y editar diagramas de flujo a partir del pseudocódigo escrito. Es gratuita y solo cuenta con aplicación de escritorio.

- Word 👉 https://www.office.com/?omkt=es 👈
Aunque Microsoft Word no es una herramienta específica para diagramas de flujo, permite crear esquemas sencillos utilizando las formas prediseñadas (rectángulos, óvalos, flechas, etc.). Es útil cuando se necesita incluir diagramas básicos dentro de un documento de texto sin recurrir a herramientas externas. Word forma parte de la suite ofimática de Microsoft, por lo que requiere licencia o suscripción.

9. Ejercicios
Ejercicio 1: Operaciones Básicas
Declara tres variables numéricas: a
, b
y resultado
. Pide al usuario que introduzca los valores de a
y b
, y luego muestra en pantalla la suma, resta y multiplicacion de ambos.
Ejercicio 2: Operaciones para la figura de un círculo
Define una constante llamada PI
. Pide al usuario que introduzca el radio de un círculo y calcula su área utilizando la fórmula área = PI * radio².
Ejercicio 3: Control de mayoría de edad
Pide al usuario una edad y muestra un mensaje que indique si es mayor de edad o no.
Ejercicio 4: Login
Pide al usuario una contraseña y verifica si coincide con la cadena “1234”. Repite la solicitud hasta que acierte.
Ejercicio 5: Cuadrado de un número
Crea una función llamada Cuadrado
que reciba un número y devuelva su cuadrado. Luego, en el algoritmo principal, pide un número al usuario, llama a la función y muestra el resultado.
Ejercicio 6: Saludar Usuario
Define un procedimiento llamado SaludarUsuario
que pida el nombre del usuario y lo salude. Llama al procedimiento desde el algoritmo principal.
🧠 Estos ejercicios son solo una pequeña introducción. Para dominar la lógica de programación, es fundamental seguir practicando de forma constante.
🛠️ Puedes encontrar más actividades para desarrollar tus habilidades en el siguiente enlace: 👉ejercicios👈