You are on page 1of 29

Qu es un diagrama?

Cuando se disea un programa para computadora, los programadores piensan detenidamente en el orden y en las instrucciones correctas para que el programa funcione como ellos esperan. Para lograr lo anterior, utilizan los diagramas de flujo, que son representaciones grficas de los pasos a seguir para lograr el resultado.

Los diagramas tienen las siguientes funciones:

1. Muestran grficamente las acciones que se realizarn de acuerdo con el

programa. 2. Ayudan a pensar claramente. 3. Ayudan a detectar errores. 4. Facilitan cambios en el programa.

Para indicarnos el sentido del movimiento de los datos y las operaciones en un programa, los diagramas de flujo utilizan algunos smbolos especiales.

Principio o fin de programa Proceso / operacin Decisiones lgicas Direccin

Imagina que quieres hacer un programa en la computadora para que las amas de casa puedan hacer un pastel .

Lo primero que debes hacer es el diagrama de flujo, para que las instrucciones

para hacer el pastel sean las correctas y estn en orden.

Diagramas de flujo

Bases para la diagramacin de algoritmos

Juan Luis Campos Salcedo

Ingeniero en Telemtica
Introduccin Un diagrama de flujo es la representacin grfica de un proceso. Un diagrama de flujo tiene como objetivo facilitarnos la comprensin de un algoritmo o simplificar el anlisis de un proceso. El diagrama de flujo consta de smbolos como cuadros, rombos, valos, etc. que representan a cada uno de los pasos a seguir durante un proceso. Estos smbolos estn conectados por flechas de un solo sentido y nos indican la secuencia en que se van desarrollando las distintas tareas. Los diagramas de flujo se desarrollaron con la idea de representar procesos en reas como la administracin de empresas, la planeacin de proyectos, la manufactura de productos, la planificacin de estrategias de ventas y muchas reas ms, no obstante, han cobrado un inters muy especial en el anlisis y planeacin de procesos para el desarrollo de sistemas computacionales. Y al mismo tiempo han demostrado tener una gran utilidad en el proceso de aprendizaje y formacin de futuros desarrolladores de software. Los diagramas facilitan la comprensin de mtodos de solucin para problemas matemticos y lgicos, permitiendo a los estudiantes abstraerse de un lenguaje determinado y enfocarse en el procedimiento de solucin. De este modo, la posterior etapa de codificacin se simplifica enormemente al tener ya resuelta la metodologa a travs de un diagrama de flujo. Existen diferentes smbolos utilizados en la diagramacin, de los cuales podemos destacar cinco smbolos bsicos con los cuales se puede representar prcticamente cualquier algoritmo informtico por muy complejo que ste sea. Estos smbolos son los siguientes

Simbolo

Descripcin Inicio / Terminacin. Este smbolo se utiliza para sealar el comienzo as como el final de un diagrama. Tradicionalmente se colocan las palabras INICIO FIN dentro de la figura para hacerlo ms explcito.

Es el nico smbolo que solamente tiene una conexin (flecha) ya sea de salida, en el de inicio, o de entrada, para el de fin. Entrada de datos. En este smbolo se indican los valores iniciales que deber recibir el proceso. Esto se hace asignndoles letras o nombres de variables para cada uno de los valores y anotando estas letras en el interior de la figura. Existen otros smbolos que tambin representan una entrada de datos pero no consideramos que su utilizacin, o combinacin, aporte mayor utilidad al objetivo intrnseco de ejemplificar una entrada de datos. Este smbolo siempre deber tener al menos una conexin entrante (generalmente del inicio) y una de salida. Proceso de datos. Este smbolo lo utilizaremos para sealar operaciones matemticas, aritmticas o procesos especficos que se realicen con nuestros datos. La manera de anotar dichos procesos, puede ser mediante una descripcin breve de la operacin o mediante una asignacin de dicha operacin hacia una variable como por ejemplo: R A + B Este smbolo siempre deber tener al menos una conexin de entrada y una de salida. Decisin. Este smbolo nos representa una disyuntiva lgica o decisin. En su interior se anota una instruccin o pregunta que pueda ser evaluada como cierta o falsa y que determine el flujo del programa. Este smbolo es el nico que puede contener dos salidas y en cada una de las salidas se suele poner un rtulo de si/no o cierto/falso indicando con esto cual de ellas se tomar segn el resultado de la evaluacin de la funcin. Es una buena prctica de diagramacin utilizar siempre el mismo lado para los positivos siempre que esto sea posible. Desplegado de informacin. Este smbolo se utiliza para mostrar un resultado, el cual puede representar la solucin al problema que se pretende resolver y que fue conseguida a travs del resto del diagrama. Dentro de su interior se anotar la variable con el resultado final o el mensaje que represente el resultado del algoritmo. Generalmente veremos este smbolo muy cerca del final del proceso y precedido por el smbolo de terminacin. Este smbolo siempre deber tener al menos una conexin de entrada y una de salida.

En la diagramacin, tambin contamos con una serie de smbolos auxiliares que no intervienen en el proceso del algoritmo, pero que pueden ser tiles para ayudarnos a dar claridad a nuestros diagramas, algunos de ellos son los siguientes:
Simbolo Descripcin

Conector. Este smbolo se utiliza para indicar un salto dentro del diagrama. Se utiliza con el propsito de facilitar la disposicin plana de un diagrama y evitar el cruce excesivo de lneas a travs del mismo. Este conector va asociado a un conector gemelo y junto con l, representa una puerta de entrada y de salida para el flujo del diagrama, es decir que cuando una flecha termina en un conector marcado con la letra A, se continuar el diagrama a partir de otro conector marcado con la misma letra tal como si se tratara de una lnea continua in interrumpida. Conector de pgina. Este conector es idntico en funcionamiento que el anterior, pero su forma pentagonal lo distingue y nos indica que debemos buscar el gemelo en una pgina distinta de la actual. Este conector lleva asociado una especie de salto entre pginas.

Cabe mencionar que no se debe abusar del uso de conectores pues de lo contrario comenzara a perderse la claridad que se pretende alcanzar con el diagrama.

Ejemplo de un diagrama de flujo simple:

Consideraciones Aprovecharemos el diagrama anterior, para mencionar algunas consideraciones importantes:

El diagrama puede desarrollarse en cualquier direccin, sin embargo es aconsejable que el desarrollo se realice en lo posible de arriba hacia abajo y de izquierda a derecha.

Debe procurarse que el smbolo de inicio se encuentre en la parte superior o superiorizquierda del diagrama.

El final se debe procurar que quede en la parte inferior o inferior-derecha. Si esto no es posible, debe separarse ligeramente del cuerpo del diagrama a fin de que sea fcilmente identificado.

Se pueden utilizar palabras para especificar la accin dentro del smbolo como es el caso de Introducir A y B, aunque esto es innecesario ya que con poner simplemente A, B se sobreentiende. Es el mismo caso de poner Comparar si A>B o simplemente A > B.

Es vlido hacer que dos flechas apunten a un smbolo, aunque es ms esttico hacer que la segunda flecha apunte a la primera que si est apuntando al smbolo, tal como se hace en el caso del FIN.

Smbolos compuestos (complejos) En diagramacin se acostumbra tambin el uso de smbolos compuestos que nos reduzcan la complejidad y el tamao del diagrama. Estos smbolos representan estructuras de uso comn y que ya estn adecuadamente definidos. Este es el caso del smbolo de Ciclo automtico que es como sigue:

El smbolo del Ciclo automtico representa al ciclo for de la mayora de los lenguajes. Para entender mejor este smbolo, veamos el siguiente ejemplo:

En este caso inicialic la variable n con el valor de 1. Y cambi la condicin de salida para que comparara con menor o igual (<=) en lugar de menor que (<). El mismo diagrama se puede tambin realizar con los objetos bsicos, lo cual se puede dejar como ejercicio para apreciar la ventaja de utilizar smbolos compuestos.

Diagramas de procesos Los diagramas de procesos son diagramas simplificados en los cuales se utiliza nicamente el smbolo de proceso (rectngulo). Se utilizan para indicar un algoritmo a grandes rasgos o los pasos para realizar una actividad. Estos diagramas te dicen que cosa se hace en cada etapa, sin meterse en detalles de cmo se hace. Ejemplo de un diagrama de procesos:

Estos diagramas no son de mayor inters para el estudio de algoritmos ya que, como se podr apreciar, estos se omiten del mismo. Ejercicios propuestos

1. Hacer un diagrama para calcular el rea de un triangulo.

2. Hacer un diagrama para convertir de grados centgrados a grados Fahrenheit.

3. Hacer un diagrama para imprimir la suma de los nmeros del 1 al 100.

4. Hacer un diagrama que te pida un nmero y te diga si es par, es non y/o es primo.

5. Hacer un diagrama para imprimir la sucesin de Fibonacci.

6. Hacer un diagrama que pida 10 nmeros y muestre el promedio.

7. Hacer un diagrama que pida 3 nmeros y diga cual es el mayor.

8. Hacer un diagrama que pida la edad y despliegue si es menor de edad (<18), mayor (>=18) o si pertenece a la 3 edad.(>=60)

9. Hacer un diagrama que te pida un nmero y te diga si es par, es non y/o es primo.

10. Hacer un diagrama para calcular el factorial de un nmero.

11. Hacer un diagrama que calcule e imprima N nmeros primos.

12. Hacer un diagrama que solicite 4 calificaciones y diga si est reprobado o no, segn las reglas de tu escuela.

13. Hacer un diagrama que pida un nmero N y despliegue todas las combinaciones de dos nmeros que sumados den N.

14. Hacer un diagrama que despliegue la tabla de multiplicar de un nmero X.

15. Hacer un diagrama que calcule la probabilidad de que dos dados lanzados sumen 7.

16. Hacer un diagrama que pida 100 nmeros y diga cual es la mediana.

17. Hacer un diagrama que solicite los datos de una matriz de 4x4 y la muestre

invertida. 18. Hacer un diagrama que pida 3 nmeros y calcule el comn denominador.

19. Hacer un diagrama que llene una matriz de 3x3 y despliegue los valores de la diagonal principal.

20. Hacer un diagrama que pida 2 matrices y despliegue el producto cruz de las mismas.

Ejemplos de diagramas de flujo Diagrama de flujo que encuentra la suma de los primeros 50 numeros naturales

Bueno, y ahora la descripcin del diagrama anterior


Suma, es la variable a la que se le va agregando la valor de cada nmero natural. N, es el contador. ste recorrer lo nmeros hasta llegar al 50.

El primer bloque indica el inicio del Diagrama de flujo

El segundo bloque, es un Smbolo de procesos este bloque se asume que las variables suma y N han sido declaradas previamente y las inicializa en 0 para comenzar a el conteo y la suma de valores (Para declararlas existe el bloque Tarjeta perforada).

En

El tercer bloque, es tambin un Smbolo de

procesos

En ste paso se incrementa en 1 la

variable N (N = N + 1). Por lo que, en la primera pasada esta N valdr 1, ya que estaba inicializada en 0. El cuarto bloque es exactamente lo mismo que el anterior

Pero en ste, ya se le agrega el valor de N a la

variable que contendr la suma (En el primer caso contendr 1, ya que N = 1). El quinto bloque es uno Smbolo de Toma de decisiones y Ramificacin Lo que hay dentro del bloque es una pregunta que se le hace a los valores que actualmente influyen en el proceso (Por decir algo, no se como decirlo, soy

muy sope :D)

Es N=50?, Obviamente la respuesta

es no, ya que N todava es 1. por lo que el flujo de nuestro programa se dirigir haca la parte en donde se observa la palabra no: Tercer Bloque, ste le sumar 1 (N=N+1) y vuelve a llegar a ste bloque, donde preguntar Es N=50?... No!, todava es 2. Ha pues, regresa al Tercer bloque y vuelve hacer lo mismo. Y as hasta llegar a 50, obteniendo as la suma de los primeros 50 primeros nmeros naturales. Por ltimo indicamos que el resultado ser mostrado en la impresora (Este lo

puedes cambiarlo por el display para mostrar datos).

Fin del programa (o diagrama)

Estructura repetitiva while.


Representacin grfica de la estructura while:

No debemos confundir la representacin grfica de la estructura repetitiva while (Mientras) con la estructura condicional if (Si) Funcionamiento: En primer lugar se verifica la condicin, si la misma resulta verdadera se ejecutan las operaciones que indicamos por la rama del Verdadero. A la rama del verdadero la graficamos en la parte inferior de la condicin. Una lnea al final del bloque de repeticin la conecta con la parte superior de la estructura repetitiva. En caso que la condicin sea Falsa contina por la rama del Falso y sale de la estructura repetitiva para continuar con la ejecucin del algoritmo. El bloque se repite MIENTRAS la condicin sea Verdadera. Importante: Si la condicin siempre retorna verdadero estamos en presencia de un ciclo repetitivo infinito. Dicha situacin es un error de programacin, nunca finalizar el programa.

Problema 1:
Realizar un programa que imprima en pantalla los nmeros del 1 al 100. Sin conocer las estructuras repetitivas podemos resolver el problema empleando una estructura secuencial. Inicializamos una variable con el valor 1, luego imprimimos la variable, incrementamos nuevamente la variable y as sucesivamente. Diagrama de flujo:

Si continuamos con el diagrama no nos alcanzaran las prximas 5 pginas para finalizarlo. Emplear una estructura secuencial para resolver este problema produce un diagrama de flujo y un programa en Java muy largo. Ahora veamos la solucin empleando una estructura repetitiva while:

Es muy importante analizar este diagrama: La primera operacin inicializa la variable x en 1, seguidamente comienza la estructura repetitiva while y disponemos la siguiente condicin ( x <= 100), se lee MIENTRAS la variable x sea menor o igual a 100. Al ejecutarse la condicin retorna VERDADERO porque el contenido de x (1) es menor o igual a 100. Al ser la condicin verdadera se ejecuta el bloque de instrucciones que contiene la estructura while. El bloque de instrucciones contiene una salida y una operacin. Se imprime el contenido de x, y seguidamente se incrementa la variable x en uno. La operacin x=x + 1 se lee como "en la variable x se guarda el contenido de x ms 1". Es decir, si x contiene 1 luego de ejecutarse esta operacin se almacenar en x un 2. Al finalizar el bloque de instrucciones que contiene la estructura repetitiva se verifica nuevamente la condicin de la estructura repetitiva y se repite el proceso explicado anteriormente. Mientras la condicin retorne verdadero se ejecuta el bloque de instrucciones; al retornar falso la verificacin de la condicin se sale de la estructura repetitiva y continua el algoritmo, en este caso finaliza el programa. Lo ms difcil es la definicin de la condicin de la estructura while y qu bloque de instrucciones se van a repetir. Observar que si, por ejemplo, disponemos la condicin x >=100 ( si x es mayor o igual a 100) no provoca ningn error sintctico

pero estamos en presencia de un error lgico porque al evaluarse por primera vez la condicin retorna falso y no se ejecuta el bloque de instrucciones que queramos repetir 100 veces. No existe una RECETA para definir una condicin de una estructura repetitiva, sino que se logra con una prctica continua solucionando problemas. Una vez planteado el diagrama debemos verificar si el mismo es una solucin vlida al problema (en este caso se debe imprimir los nmeros del 1 al 100 en pantalla), para ello podemos hacer un seguimiento del flujo del diagrama y los valores que toman las variables a lo largo de la ejecucin: x 1 2 3 4 . . 100 101 Cuando x vale 101 la condicin de la estructura repetitiva retorna falso, en este caso finaliza el diagrama. Importante: Podemos observar que el bloque repetitivo puede no ejecutarse ninguna vez si la condicin retorna falso la primera vez. La variable x debe estar inicializada con algn valor antes que se ejecute la operacin x=x + 1 en caso de no estar inicializada aparece un error de compilacin. Programa:

public class EstructuraRepetitivaWhile1 { public static void main(String[] ar) { int x; x=1; while (x<=100) { System.out.print(x); System.out.print(" - "); x = x + 1; } } }
Importante:Como podemos observar no hemos creado un objeto de la clase Scanner. Esto debido a que en este programa no hay que ingresar datos por teclado. Para las salidas utilizamos la funcin print, que se encuentra creada por defecto en cualquier programa que codifiquemos en Java.

Recordemos que un problema no estar 100% solucionado si no hacemos el programa en Java que muestre los resultados buscados. Probemos algunas modificaciones de este programa y veamos que cambios se deberan hacer para: 1 - Imprimir los nmeros del 1 al 500. 2 - Imprimir los nmeros del 50 al 100. 3 - Imprimir los nmeros del -50 al 0. 4 - Imprimir los nmeros del 2 al 100 pero de 2 en 2 (2,4,6,8 ....100). Respuestas: 1 - Debemos cambiar la condicin del while con x<=500. 2 - Debemos inicializar x con el valor 50. 3 - Inicializar x con el valor -50 y fijar la condicin x<=0. 4 - Inicializar a x con el valor 2 y dentro del bloque repetitivo incrementar a x en 2 ( x = x + 2 ).

Problema 2:
Escribir un programa que solicite la carga de un valor positivo y nos muestre desde 1 hasta el valor ingresado de uno en uno. Ejemplo: Si ingresamos 30 se debe mostrar en pantalla los nmeros del 1 al 30. Es de FUNDAMENTAL importancia analizar los diagramas de flujo y la posterior codificacin en Java de los siguientes problemas, en varios problemas se presentan otras situaciones no vistas en el ejercicio anterior. Diagrama de flujo:

Podemos observar que se ingresa por teclado la variable n. El operador puede cargar cualquier valor. Si el operador carga 10 el bloque repetitivo se ejecutar 10 veces, ya que la condicin es ?Mientras x<=n ?, es decir ?mientras x sea menor o igual a 10?; pues x comienza en uno y se incrementa en uno cada vez que se ejecuta el bloque repetitivo. A la prueba del diagrama la podemos realizar dndole valores a las variables; por ejemplo, si ingresamos 5 el seguimiento es el siguiente: n x 5 1 (Se imprime el contenido de x) 2 " " 3 " " 4 " " 5 " " 6 (Sale del while porque 6 no es menor o igual a 5) Programa:

import java.util.Scanner;

public class EstructuraRepetitivaWhile2 { public static void main(String[] ar) { Scanner teclado=new Scanner(System.in); int n,x; System.out.print("Ingrese el valor final:"); n=teclado.nextInt(); x=1; while (x<=n) { System.out.print(x); System.out.print(" - "); x = x + 1; } } }
Los nombres de las variables n y x pueden ser palabras o letras (como en este caso) La variable x recibe el nombre de CONTADOR. Un contador es un tipo especial de variable que se incrementa o decrementa con valores constantes durante la ejecucin del programa. El contador x nos indica en cada momento la cantidad de valores impresos en pantalla.

Problema 3:
Desarrollar un programa que permita la carga de 10 valores por teclado y nos muestre posteriormente la suma de los valores ingresados y su promedio. Diagrama de flujo:

En este problema, a semejanza de los anteriores, llevamos un CONTADOR llamado x que nos sirve para contar las vueltas que debe repetir el while. Tambin aparece el concepto de ACUMULADOR (un acumulador es un tipo

especial de variable que se incrementa o decrementa con valores variables durante la ejecucin del programa) Hemos dado el nombre de suma a nuestro acumulador. Cada ciclo que se repita la estructura repetitiva, la variable suma se incrementa con el contenido ingresado en la variable valor. La prueba del diagrama se realiza dndole valores a las variables: valor suma x promedio 0 0 (Antes de entrar a la estructura repetitiva estos son los valores). 5 5 1 16 21 2 7 28 3 10 38 4 2 40 5 20 60 6 5 65 7 5 70 8 10 80 9 2 82 10 8 90 11 9 Este es un seguimiento del diagrama planteado. Los nmeros que toma la variable valor depender de qu cifras cargue el operador durante la ejecucin del programa. El promedio se calcula al salir de la estructura repetitiva (es decir primero sumamos los 10 valores ingresados y luego los dividimos por 10) Hay que tener en cuenta que cuando en la variable valor se carga el primer valor (en este ejemplo 5) al cargarse el segundo valor (16) el valor anterior 5 se pierde, por ello la necesidad de ir almacenando en la variable suma los valores ingresados. Programa:

import java.util.Scanner; public class EstructuraRepetitivaWhile3 { public static void main(String[] ar) { Scanner teclado=new Scanner(System.in); int x,suma,valor,promedio; x=1; suma=0; while (x<=10) {

System.out.print("Ingrese un valor:"); valor=teclado.nextInt(); suma=suma+valor; x=x+1; } promedio=suma/10; System.out.print("La suma de los 10 valores es:"); System.out.println(suma); System.out.print("El promedio es:"); System.out.print(promedio); } }
Problema 4:
Una planta que fabrica perfiles de hierro posee un lote de n piezas. Confeccionar un programa que pida ingresar por teclado la cantidad de piezas a procesar y luego ingrese la longitud de cada perfil; sabiendo que la pieza cuya longitud est comprendida en el rango de 1,20 y 1,30 son aptas. Imprimir por pantalla la cantidad de piezas aptas que hay en el lote. Diagrama de flujo:

Podemos observar que dentro de una estructura repetitiva puede haber estructuras condicionales (inclusive puede haber otras estructuras repetitivas que veremos ms adelante) En este problema hay que cargar inicialmente la cantidad de piezas a ingresar ( n ), seguidamente se cargan n valores de largos de piezas. Cada vez que ingresamos un largo de pieza (largo) verificamos si es una medida correcta (debe estar entre 1.20 y 1.30 el largo para que sea correcta), en caso de ser correcta la CONTAMOS (incrementamos la variable cantidad en 1)

Al contador cantidad lo inicializamos en cero porque inicialmente no se ha cargado ningn largo de medida. Cuando salimos de la estructura repetitiva porque se han cargado n largos de piezas mostramos por pantalla el contador cantidad (que representa la cantidad de piezas aptas) En este problema tenemos dos CONTADORES: x (Cuenta la cantidad de piezas cargadas hasta el momento) cantidad (Cuenta los perfiles de hierro aptos) Programa:

import java.util.Scanner; public class EstructuraRepetitivaWhile4 { public static void main(String[] ar) { Scanner teclado=new Scanner(System.in); int x,cantidad,n; float largo; x=1; cantidad=0; System.out.print("Cuantas piezar procesar:"); n=teclado.nextInt(); while (x<=n) { System.out.print("Ingrese la medida de la pieza:"); largo=teclado.nextFloat(); if (largo>=1.20 && largo<=1.30) { cantidad = cantidad +1; } x=x + 1; } System.out.print("La cantidad de piezas aptas son:"); System.out.print(cantidad); } }

Problemas propuestos

Diagrama de flujo, algoritmo y pseudocdigo para convertir un nmero Arbigo a Romano

Inicio Dadas las tablas Romanos[] y Valores[] Pedir: A Hacer Resultado = "" Ciclo en i para cada elemento de Romanos Mientras Valores<i> < = A hacer Resultado = Resultado + Romanos<i> A = A - Valores<i> Fin-Mientras Fin-Ciclo Mostrar Resultado Fin

Diagrama de flujo y Pseudocdigo para convertir de Romanos a Arbigos

Inicio Previa definicin de ValorRomano() Obtener: R como nmero Romano Resultado = 0 Max = Longitud de R Ciclo en i hasta Max - 1 C = Caracter i de R C2 = Caracter i+1 de R si ValorRomano(C)< ValorRomano(C2) entonces Resultado = Resultado - ValorRomano(C) sino Resultado = Resultado + ValorRomano(C) Fin-si Fin-Ciclo Resultado = Resultado + ValorRomano(C2) Mostrar Resultado

Fin

La clase
Descargar Clase V.1. 1. Primera versin El primer paso para trabajar con la clase es incluirla (y claro, previamente descomprimirla)
1. include('romanos.class.php');

You might also like