Diagramas de flujo


Además de pseudocódigo algunas veces es importante utilizar diagramas de flujo, los que nos muestran una descripción gráfica de un procedimiento en la resolución de un problema. Son usados para describir algoritmos y programas de computador. Los diagramas de flujo de datos están conformados por distintas figuras conectadas con flechas. 

 

Para ejecutar un proceso descrito por un diagrama de flujo de datos se comienza por el INICIO y se siguen las flechas de figura a figura, ejecutándose las acciones indicadas por cada figura; el tipo de figura indica el tipo de paso que representa. Los diagramas de flujo son frecuentemente usados debido a que pueden suprimir detalles innecesarios y tienen un significado preciso, si son usados correctamente.

 

Las instrucciones disponibles en un lenguaje de programación dependen del lenguaje, pero de una manera general en la secuencia de resolución de un problema utilizando computadoras tenemos:

 

Instrucciones de inicio/fin

Instrucciones de asignación o proceso

Instrucciones de entrada de datos

Instrucciones de salida de datos

Instrucciones de bifurcación

 

Instrucciones/acciones

Objetivos de un diagrama de flujo

  • Estructurar la solución del problema independiente del lenguaje a utilizar.
  • Mostrar una visión general de la solución del problema al programador .
  • Propiciar una compresión más rápida del programa.

Simbología de los diagramas de flujo

Por convención se han definido distintos símbolos por el comité sobre computadoras y procesadores de información de la Asociación Norteamericana de Normas. Esa normalización permite comprender cualquier diagrama de flujo que use los símbolos establecidos.

 

En la descripción de los algoritmos o de los programas existen varios formalismos. Pero, de una manera general, las reglas comunes a todos para expresar algoritmos, según el paradigma de la programación estructurada, son:

  • Un diagrama de flujo se lee de arriba hacia abajo.
  • Un diagrama se compone de bloques entre los cuales existen flechas que indican el sentido de lectura o de ejecución. Esas Líneas de flujo muestran la dirección del proceso. Cada línea de flujo conecta dos bloques.

Estructuras secuenciales

Es el conjunto de acciones (instrucciones) que se ejecutan el orden en el que están escritas. Su representación en un diagrama de flujo es semejante al de la derecha. 

 

Ejemplo 1.

Leer una variable x y calcular el cuadrado de x, mostrando su resultado.

Solución:

Variables: De entrada: x y de salida: ncuad

 

 

 

El ejemplo anterior es un diagrama de flujo lineal y muy simple su: lectura, cálculo y escritura.

 

Elementos fundamentales de un programa

Si tenemos claridad de los conceptos, instrucciones y elementos básicos de un algoritmo de manera general, ello conlleva para que la implementación del mismo en un lenguaje de programación sea más sencilla.

 

Los lenguajes computacionales como cualquier lenguaje, tienen elementos básicos y reglas conocidas como reglas de sintaxis para las que los elementos se combinan.

 

Solamente las instrucciones sintácticamente correctas pueden ser interpretadas por la computadora y los programas que contengan errores de sintaxis son rechazados por la máquina.(Joyanes, 2008)

 

Esto quiere decir que, al igual que en cualquier lenguaje las palabras utilizadas y la sintaxis correcta son importantes para comprender lo que decimos al comunicarnos,  para que la computadora logre interpretar y ejecutar correctamente nuestro algoritmo las instrucciones que escribimos deben estar escritas correctamente o en otras palabras deben tener una sintaxis correcta.

 

Palabras reservadas: Son palabras especiales utilizadas solo por el lenguaje para ejecutar una función específica y que no podemos utilizar en el desarrollo del programa para un fin distinto, por ejemplo (Inicio, fin, escribir, leer, si-entonces, por ejemplo).

 

Identificadores: Los identificadores son los nombres que les damos a las variables, funciones, al programa, subprocesos) para identificarlos.

 

Caracteres especiales: Son elementos como comas, comillas, punto y coma, paréntesis, que son parte del lenguaje algorítmico o de programación.

 

Constantes: Son datos que no van a modificarse en la ejecución de programa.

 

Variables: Datos cuyo valor se puede modificar en la ejecución del programa.

 

Expresiones: Son combinaciones de constantes, variables y operadores para ejecutar una operación.

 

Instrucciones: Son las sentencias o podríamos decir pasos, que se ejecutan en un programa.

 

Es importante mencionar otros elementos que también forman parte de los programas y utilizaremos más adelante en el diseño de nuestros algoritmos:

 

Bucles

Contadores

Acumuladores

Interruptores

Estructuras

Secuenciales

Selectivas

Repetitivas

 

Desarrollo por refinamientos sucesivos

El diseño de algoritmos mediante refinamientos sucesivos es la metodología que se sigue en programación estructurada. Esta técnica consiste en expresar el programa como una acción global que se descompone en acciones más sencillas hasta llegar a acciones que pueden ser expresadas directamente como sentencias del lenguaje de programación. 

 

Para poder cumplir con ese proceso de descomposición requerimos:

  • Identificar las acciones componentes.
  • Identificar la manera de combinar las acciones componentes para conseguir el efecto global.

La forma en que varias acciones se combinan en una acción compuesta constituye el esquema de la acción compuesta. Por el momento solo hemos tratado el denominado esquema secuencial, que consiste en realizar una acción compuesta a base de realizar una tras otra, en secuencia, dos o más acciones componentes.

 

Para desarrollar una acción compuesta según un esquema secuencial se necesitará:

 

Identificar las acciones componentes de la secuencia. Identificar las variables necesarias para disponer de la información adecuada al comienzo de cada acción, y almacenar el resultado.

 

Identificar el orden en que deben ejecutarse las acciones componentes.

Para ilustrar esta técnica consideremos el siguiente ejemplo: Obtener la suma de dos números enteros, leídos por teclado. Así tenemos:

 

Acciones componentes

Entrada: leer datos

Escribir ( "Teclee dos números: " );

Leer (num1);

Leer (num2 );

 

Cálculos: Obtener la suma

suma = num1 + num2

 

Salida: imprimir resultado

Escribir( “La suma es “, suma);

 

Variables necesarias: datos y resultado

int num1, num2, suma

(b) Orden de ejecución

1) Leer los datos

2) Calcular la suma

3) Imprimir el resultado

 

Así vemos que la acción global del problema se va descomponiendo en acciones cada vez más sencillas:

Acción compuesta →

Acción1

Acción2

…etc

 

Aplicando esta notación en el ejemplo anterior, tenemos:

Obtener la suma de dos números →

Leer los datos

Calcular la suma

Imprimir resultado

Se refinamos hasta llegar a las sentencias de C++ tendremos: