Algoritmos 8: Diagramas de Flujo

Aquí aprenderás a crear el famoso diagrama de flujo, algo que permite pensar un algoritmo de forma visual, más fácil de entender y útil para comunicarnos con otros programadores. Te explicaré cuáles son los símbolos, elementos, que se usan y haremos varios ejercicios, de lo fácil a lo difícil. También vamos a comparar código con diagrama de flujo.

Introducción a diagramas de flujo

Uno de los sistemas de representación (la manera en que percibimos las cosas que suceden en el mundo) es el sistema visual.

Según la programación neurolingüística (PNL), en los que predomina el sistema visual, comprenden mejor las cosas a través de gráficos e imágenes.

Si estás dentro de este grupo, los diagramas de flujo van a ayudarte a comprender mejor la programación.

¿Qué es un diagrama de flujo?

Un diagrama de flujo es una representación gráfica de un algoritmo, o sea, mediante un dibujo modelamos un proceso, y de esta manera podemos pensarlo, verlo y entenderlo, sin tener leer el código.

Cuando hablo de proceso  me refiero al algoritmo completo, o a partes del algoritmo, en programas grandes a veces se modelan solo las partes mas complejas o algunas funciones particulares. 

Símbolos usados en los diagramas de flujo

Para armar un diagrama de flujo se usa un conjunto estándar de símbolos que corresponden a figuras geométricas:

introducción a la programación
  • El óvalo o terminal → marca el “inicio”, y el “fin” de un proceso
  • El paralelogramo → Entrada/Salida (leemos datos o imprimimos resultados)
  • El rectángulo → Proceso (cualquier operación que cambie algún valor,operaciones aritméticas, de transferencia,  asignaciones)
  • El rombo → Decisión (representa operaciones lógicas o de comparación y según del resultado de la misma indica el camino a seguir). Por ejemplo  Edad>18 si la respuesta es SI imprimo (“Es Mayor de edad”) si la respuesta es NO imprimo “Es Menor de edad”
  • La flecha → Indica en qué sentido van las operaciones.
  • La Linea → que sirve para conectar dos símbolos
  • El rectángulo con bordes → Llamada a un proceso (un módulo independiente del que estamos modelando) puede representar una llamada a una función
  • El circulo → Conector (sirve para conectar dos o mas entradas a una misma salida) dentro de la misma pagina
  • El pentágono → Otro conector, conecta dos puntos al cambiar de página

Ejercicio Simple – Cálculo salario bruto y neto

introducción a la programación

Lo primero que hacemos es marcar el inicio, empezamos con el óvalo. Debemos  leer el nombre, las horas y el valor_hora, usamos un paralelogramo (nombre, horas y valor_hora son 3 variables).

Ahora hacemos el calculo del salario bruto, mediante un proceso (el rectángulo), a la variable salario_bruto le asignamos horas * valor_hora.

Vamos a calcular los impuestos para obtener el salario neto, mediante otro proceso, a la variable impuestos le asignamos 0.3 * salario_bruto.

Y abrimos otro proceso a la variable salario_neto le asignamos salario_bruto menos impuestos.

Finalmente queda mostrar los resultados, con un paralelogramo imprimimos nombre, salario_bruto y salario_neto.

Y terminamos el programa o proceso con un óvalo de fin.

introducción a la programación

Este es el diagrama de flujos de este proceso simple, es secuencial.

Con practica, viendo esto entendemos cómo es el algoritmo o cómo implementarlo.

En algunas empresas los analistas arman diagramas como estos y los programadores lo traducen a código.

¡Algo importante! Podemos hacer el diagrama de flujo antes de programar, por ahí resulta mas fácil pensar un algoritmo complejo de forma gráfica, y también puedo hacerlo después, para documentar el código y lo entienda otro programador.

Ejercicio Medio – Cálculo del promedio de una serie de números

introducción a la programación

Tenemos que pedir que ingrese un numero esto es un ciclo.

Vamos a tener que sumar todos los números y dividirlos por la cantidad de números ingresados:

  • Leemos el numero
  • Si es distinto de cero, hay que sumar el numero a todos los anteriores, un acumulador, una variable suma
  • Vamos a incrementar el numero de elementos ingresados, un contador
  • Volvemos a pedir que ingrese un numero
  • Y repetimos el ciclo
  • Si es cero salimos del ciclo, hacemos el calculo del promedio y mostramos resultados.

Debemos tener en cuenta que no podemos dividir por 0, así que si la cantidad es cero le tenemos que asignar un 1. Vamos a hacer el diagrama:

introducción a la programación

Con un óvalo marcamos el inicio. Vamos a necesitar una variable contador y una variable de suma. Con un proceso las inicializamos en cero. Leemos el número,  un paralelogramo.

Tenemos una condición, un rombo, número <> 0. Y acá vamos a abrir dos caminos el → si es distinto de cero, suamos el número a la variable suma,  incremento el contador, y volvemos a leer el número.

Para el camino de numero distinto de ceo en NO → tenemos que hacer el cálculo del promedio, suma dividido contador, pero si contador es cero no se puede hacer (no se puede dividir por cero), así que vamos a contemplar el caso contador igual a cero. Armamos un rombo, si contador es cero, a contador le asigno 1, y sino continuamos.

Vamos a unir las dos salidas. la del SI y la del NO con una línea, ya que siguen por el mismo camino.

Hacemos el cálculo, a promedio le asignamos suma dividido contador, imprimimos el valor del promedio y terminamos el proceso.

El pseudocodigo del programa, para que comparemos, quedaría así:

introducción a la programación
  • Creamos las variables, inicializamos contador y suma en cero.
  • Leemos numero
  • Mientras numero sea distinto de cero, la sumamos a la variable suma, incrementamos el contador y volvemos a leer el numero siguiente
  • Cuando termina el ciclo, porque numero es cero,  si contador es 0 le asignamos 1m para poder hacer la división
  • Calculamos el promedio
  • Imprimimos el resultado.

Este ejemplo fue más amplio, acá tenemos condiciones y ciclos.

Con esto podemos entender un poco mejor los diagramas de flujo.

Ejercicio avanzado – Juego de acertar un número

Y para terminar vamos a hacer un ejercicio mucho más difícil y completo.

introducción a la programación

Acá estamos ante un juego, lo primero que debemos hacer es cargar los dos nombres y las rondas máximas. Vamos a necesitar un contador de rondas.

Tenemos un ciclo, hasta que alguien acierte o que las rondas superen el máximo. Para esto vamos a necesitar una variable booleana que indique si hubo acierto. Inicialmente huboAcierto es falso y el contador de rondas arranca en cero.

Vamos a preguntar ¿huboAcierto es falso y rondas es menor que RondasMaximas?

Por el SI → Generamos el numero a adivinar del programa con la función random, se lo asignamos a la variable num.

Leemos los dos números que ingresan los jugadores: num1 y num2

Comparamos num1 igual a num: por el SI, hay mínimo un ganador, así que asignamos a huboAcierto, true, puede haber ganado el 1, tenemos que ver si el 2 también acertó, porque si los dos acertaron hay empate.

Comparamos num2 con num: por el SI, imprimimos “EMPATE”, por el NO imprimimos “GANÓ EL 1”.

Volviendo, si num1 es distinto a num: el 1 no acertó. Comparamos num2 con num, si son iguales, a la variable huboAcierto le asignamos true e imprimo “GANÓ EL 2”, sino no ganó ninguno de los dos, así que por el NO incrementamos el contador de rondas.

Unimos todas estas lineas a la linea que vuelve a evaluar la condición del ciclo.

Ya habíamos visto el lado del SI, nos queda ver el lado del NO, si salió por acá es porque huboAcierto es verdadero o porque pasamos las rondas máximas. Comparamos huboAcierto con true, si hubo acierto, no hago nada, voy al final. Si no hubo acierto, quiere decir que ninguno de los dos acertó, y se terminaron los rondas, así que imprimo “PERDIERON LOS DOS”  y voy al final.

Y así completamos nuestro diagrama:

 

introducción a la programación

Resumen

En este capitulo vimos los diagramas de flujo, una herramienta que nos ayuda a representar algoritmos de una forma gráfica, lo que nos da otra manera de pensarlos y documentarlos.

Como toda herramienta  puede ser más o menos útil, según cada uno. A algunas personas las ayuda, a otras les puede parecer una perdida de tiempo.

Personalmente, me parece una herramienta muy útil, la uso cuando debo pensar algoritmos complejos.

Recursos utilizados