Está en la página 1de 50

Universidad Tecnolgica de Puebla

Carrera:

Ingeniera de Tecnologas de la Informacin y Comunicacin

ANTOLOGA Metodologa de la Programacin

Cuatrimestre: Septiembre Diciembre 2011

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Contenido
1. Conceptos Bsicos ...................................................................................................................... 3 1.1 Adquisicin, procesamiento y almacenamiento de datos ...................................................... 3 1.2 Conceptos de Algoritmos, Pseudocdigo y Diagrama de Flujo ............................................... 4 1.3 Tipos de datos (numricos, caracteres / cadenas, booleanos) ............................................... 5 1.4 Identificadores, variables y constantes ................................................................................. 6 1.5 Metodologa para la solucin de problemas por medio de computadoras............................. 7 2. Expresiones ................................................................................................................................ 8 2.1 Operadores aritmticos, relacionales y lgicos...................................................................... 8 2.2 Expresiones ........................................................................................................................ 10 2.3 Jerarqua de operadores ..................................................................................................... 12 3. Algoritmos y Diagramas de Flujo............................................................................................... 24 3.1 Algoritmos y Diagramas de Flujo en el paradigma orientado a objetos ................................ 24 3.2 Smbolos utilizados en los Diagramas de Flujo..................................................................... 28 3.3 Conceptos preliminares de los Diagramas de Flujo.............................................................. 29 3.4 Smbolo de Entrada y Salida (E/S) ....................................................................................... 32 3.5 Smbolo de procesamiento o bloque de instrucciones ........................................................ 34 3.6 Smbolo de decisin ............................................................................................................ 36 3.7 Smbolo de procedimiento o funcin .................................................................................. 38 3.8 Ejemplo orientado a objetos: La clase Natural ......................... Error! Bookmark not defined. Bibliografa................................................................................................................................... 49 Citas Bibliogrficas ................................................................................................................... 50

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

1. Conceptos Bsicos

1.1 Adquisicin, procesamiento y almacenamiento de datos


La computadora es una herramienta que se utiliza para representar cualquier situacin de la realidad en forma de datos, los cuales se procesan despus para generar informacin. Esto quiere decir que toda situacin que pueda ser abstrada y representada en forma de datos, puede ser manejada mediante la computadora. La figura 1.1 muestra un esquema de lo descrito anteriormente, es decir, los datos entran como materia prima, se procesan para transformarlos en la informacin que se da como salida. Tanto los datos como el procedimiento necesario para generar la informacin, son adquiridos o suministrados a la computadora en forma de un programa constituido por instrucciones. La computadora interpreta y procesa las instrucciones del programa de acuerdo con ciertas reglas de sintaxis que conforman el lenguaje de programacin, mediante es cual es posible comunicarle lo que debe hacer.

Situacin Real

Adquisicin de Datos

Procesamiento

Informacin

Figura 1.1 Esquema Adquisicin-Procesamiento-Salida de datos Los elementos bsicos que componen una computadora son la unidad central de procesamiento, la unidad de memoria, la unidad de entrada y la unidad de salida. La unidad central de procesamiento es el cerebro que controla el funcionamiento de los componentes y ejecuta las operaciones aritmticas y lgicas. Las operaciones del procesador central son muy simples, pero ejecutadas a una velocidad muy alta del orden de millones por segundo- permiten la ejecucin de tareas simples o complejas. La memoria se utiliza para almacenar los datos, y a stos se les aplica las operaciones del procesador. Existen dos tipos de memoria: la principal y la auxiliar. La memoria principal permite al procesador extraer y almacenar datos a una velocidad superior a la auxiliar. Cada operacin propicia por lo menos un acceso a memoria. Para que el procesador pueda avanzar de una operacin a la siguiente sin retraso, el conjunto de instrucciones se almacena en esta memoria; en otras palabras, la memoria principal guarda tanto las instrucciones como los datos sobre los que acta el procesador central. La memoria principal est limitada por su alto costo; debido a esto no es posible conservar en ellas grandes cantidades de datos e instrucciones y, en consecuencia, slo se usa para guardar lo que el procesador est utilizando por el momento. Adems tiene la caracterstica de que no permite almacenar datos permanentemente, pues si se apaga la computadora se pierde lo que haya en la memoria. Por tales razones, las computadoras estn equipadas con memorias auxiliares para almacenamiento masivo y permanente de datos, tales Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

como discos magnticos fijos, discos compactos, cintas magnticas, entre otros. Estos dispositivos tienen ms capacidad que la memoria principal, pero son ms lentos. Los datos pueden almacenarse en ellos de manera permanente; es decir, pueden guardarse para usos posteriores. La unidad de entrada se utiliza para introducir datos del exterior en la memoria de la computadora a travs de dispositivos perifricos de entrada como teclados, ratn, discos, mdem, lectora de cdigo de barras, etctera. Esta unidad realiza automticamente la traduccin de smbolos inteligibles para la gente, en smbolos que la computadora pueda manejar. La unidad de salida permite transferir datos de la memoria al exterior, a travs de dispositivos perifricos de salida como impresoras, pantallas de video, mdem, etc. Un programa es un conjunto de instrucciones que guan a la computadora para realizar alguna actividad o resolver algn problema; en el programa se ejecutan diferentes acciones de acuerdo con los datos que se estn procesando. El programa debe incluir instrucciones para las acciones que deban ejecutarse sobre cada uno de los tipos de datos admitidos, adems instrucciones que identifiquen los datos errneos y recuperarse ante la aparicin de estos. Cuando se ejecuta un programa con un tipo de dato especfico, es probable que no se ejecuten todas las instrucciones sino slo las que sean pertinentes a los datos en cuestin.

1.2 Conceptos de Algoritmos, Pseudocdigo y Diagrama de Flujo


Informalmente se define un algoritmo como un conjunto de reglas, pasos u rdenes que indican una secuencia de operaciones a ejecutar para resolver un problema determinado que debe satisfacer los requisitos siguientes: a. Ser finita. En caso de ser infinita la secuencia evidentemente no es til para resolver ningn problema real. b. Cada paso debe ser factible de realizarse por algn ser biolgico o dispositivo. Por ejemplo, un algoritmo para viajar a la Luna no puede tener en sus pasos: Encienda el motor del automvil. Arranque el automvil. Pngalo en direccin a la Luna. Pise el acelerador y ruede hasta llegar a la Luna. porque evidentemente el ltimo paso no es factible de realizar. c. La ejecucin de la secuencia de pasos debe dar un resultado en un tiempo finito. Por ejemplo, un algoritmo para subir una escalera no puede tener en su secuencia los pasos: 1. Suba un escaln. 2. Baje un escaln. 3. Vuelva al paso 1. porque evidentemente aunque la secuencia es finita y cada paso es factible no dar una respuesta en un tiempo finito . Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

El pseudocdigo es una tcnica para diseo de programas (algoritmos) que permite definir las estructuras de datos, las operaciones que se aplicarn a los datos y la lgica que tendr el programa de computadora para solucionar un determinado problema. Utiliza un pseudolenguaje muy parecido a nuestro idioma, pero que respeta las directrices y los elementos de los lenguajes de programacin. Un Diagrama de Flujo representa la esquematizacin grfica de un algoritmo. En realidad muestra grficamente los pasos o procesos a seguir para alcanzar la solucin de un problema. Su correcta construccin es sumamente importante porque a partir del mismo se escribe un programa en algn lenguaje de programacin. Si el diagrama de flujo est completo y correcto, el paso del mismo a un lenguaje de programacin es relativamente simple y directo.

1.3 Tipos de datos (numricos, caracteres / cadenas, booleanos)


Los datos a procesar por una computadora se pueden clasificar en: y y Simples Estructurados

La principal caracterstica de los datos simples es que ocupan slo una casilla de memoria, por lo tanto, una variable simple hace referencia a un nico valor a la vez. Dentro de este grupo de datos se encuentran: enteros, reales, caracteres y booleanos. Los datos estructurados se caracterizan por el hecho de que con un nombre se hace referencia a un grupo de casillas de memoria. Es decir, un dato estructurado tiene varios componentes. Cada uno de los componentes puede ser a su vez un dato simple o estructurado. Dentro de este grupo de datos se encuentran: arreglos y cadena de caracteres. Datos Numricos Dentro de los tipos de datos numricos encontramos los enteros y los reales. Los enteros son nmeros que pueden estar precedidos del signo + o -, y que no tienen parte decimal. Por ejemplo: 128 1528 -714 16235 -14780 8530

Los reales son nmeros que pueden estar precedidos del signo + o -, y que tienen una parte decimal. Por ejemplo: 7.5 128.0 -37.865 129.7 16000.50 -15.0

Datos Carcter El tipo de dato carcter puede almacenar un carcter; cualquier carcter vlido para la computadora y generalmente se escribe entre apstrofes. Por ejemplo: a B $ 9 # f

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Datos Cadena de caracteres Los datos cadena de caracteres estn compuestos por una hilera de caracteres alfabticos, numricos y especiales, que sirven para representar y manejar datos tales como nombres de personas o de empresas, descripciones de artculos o productos, direcciones de personas, entre otros. Este tipo de datos tambin se conoce como alfabtico o alfanumrico, ya que su contenido sea cual fuere- siempre se considera como una serie de caracteres; los valores de este tipo normalmente se encierran entre comillas. Por ejemplo: abcde Datos Booleanos $9#7 Carlos Gmez Rosario 754-27-22

Este tipo de dato est compuesto por los valores False (falso) y True (verdadero). Tambin es conocido como tipo de dato lgico.

1.4 Identificadores, variables y constantes


Identificadores Los datos a procesar por una computadora, ya sean simples o estructurados, deben almacenarse en la memoria para su posterior utilizacin. Las casillas o celdas de memoria utilizadas para almacenar tienen un nombre que permite su identificacin. Se llama identificador al nombre que se le da a las casillas de memoria. Un identificador se forma de acuerdo a ciertas reglas (las mismas pueden tener alguna variante dependiendo del lenguaje de programacin utilizado): y y y El primer carcter que forma un identificador debe ser una letra. Los dems caracteres pueden ser letras, dgitos o el smbolo especial: _. La longitud del identificador no est limitada pero se recomienda algo corto y descriptivo.

En la figura 1.2 se muestran ejemplos de identificadores. suma aux X7 ACUM NUM_1

Figura 1.2 Identificadores vlidos Constantes Las constantes son datos que no cambian durante la ejecucin de un programa. Para nombrar las constantes se utilizan los identificadores mencionados anteriormente. Existen tipos de constantes como tipos de datos, por lo tanto, puede haber constantes de tipo entero, real, carcter, cadena de caracteres, etc. Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

En la figura 1.3, la constante NUM es de tipo entero, NREAL y NUMREA son de tipo real, y RESU de tipo cadena de caracteres. Estas constantes no cambiarn su valor durante la ejecucin del programa. Es muy importante que los nombres de las constantes sean representativos de la funcin que tienen las mismas en el programa. NUM 5 NREAL 7.25 NUMREA 8.69 RESU resultado

Figura 1.3 Constantes representadas en la memoria Variables Las variables son objetos que pueden cambiar su valor durante la ejecucin de un programa. Para nombrar las variables se utilizan los identificadores explicados anteriormente. Al igual que las constantes, pueden existir tipos de variables como tipos de datos. En la figura 1.4, la variable I es de tipo entero, tiene un valor inicial de cero y cambiar su valor durante la ejecucin del programa. La variable SUEL y SUMA son de tipo real, estn inicializadas con el valor de cero, y al igual que la variable I, seguramente cambiarn su valor durante la ejecucin del programa.

I 0

SUEL 0

SUMA 0

Figura 1.4 Variables representadas en la memoria Se debe remarcar que los nombres de las variables han de ser representativas de la funcin que cumplen en el programa.

1.5 Metodologa para la solucin de problemas por medio de computadoras


En la figura 1.5 se puede observar un esquema de las etapas que se sugieren seguir para la solucin de un problema. PROBLEMA

ANALISIS PROFUNDO DEL PROBLEMA ETAPA 1

CONSTRUCCION DEL ALGORITMO ETAPA 2 Figura 1.5 Etapas de la Solucin de un Problema

VERIFICACION DEL ALGORITMO ETAPA 3

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

2. Expresiones
2.1 Operadores aritmticos, relacionales y lgicos
Un operador es un smbolo o grupo de smbolos (incluyendo letras) que indica que se ha de realizar cierta accin entre uno o dos operandos (valores). Se pueden clasificar bsicamente en 3 tipos:

Operadores Aritmticos.- Son aquellos que involucran valores numricos como operandos para calcular un resultado numrico.
Operador ^ * / Mod + Operacin Potencia Multiplicacin Divisin Modulo Residuo Suma Resta Ejemplo 4^3 8.25 * 7 15 / 4 15 mod 2 125.78 + 62.5 65.30 32.33 Resultado 64 57.75 3.75 1 188.28 32.97

Operadores Relacionales.- Se utilizan cuando se requiere comparar dos valores, dando como resultado un valor Booleano.
Operador = <> <= >= < > Operacin Igual que Diferente que Menor o Igual que Mayor o Igual que Menor que Mayor que Ejemplo hola = hora a <> b 15 <= 22 35 >= 20 7 < 15 22 > 11 Resultado Falso Verdadero Verdadero Verdadero Verdadero Verdadero

Operadores Lgicos Booleanos.- Conjuncin, Disyuncin y Negacin. Los operadores de conjuncin (AND) y disyuncin (OR), permiten formular condiciones complejas a partir de condiciones simples, es decir, une a dos operandos de tipo booleano (normalmente los resultados de 2 operaciones relacionales) obteniendo como resultado un valor booleano. Operador & | ~ Operacin Conjuncin (AND) Disyuncin (OR) Negacin (NOT) Ejemplo 4<6 & 5 = 2 4<6 | 5 = 2 ~ ( 4 < 6) Resultado Falso Verdadero Falso

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Una Conjuncin (&) es verdadera solo si sus dos argumentos son verdaderos, en caso contrario, el resultado es falso. La conjuncin expresa el inters porque las 2 condiciones a revisar se cumplan.

Ejemplo promedio >= 8.5 & promedio < 9.5 nacionalidad = mexicana & edad > 18 mes > 6 & mes <> 11

Explicacin La variable promedio debe ser superior o igual a 8.5 pero menor a 9.5 La variable nacionalidad debe ser mexicana considerando tambin que la variable edad debe ser mayor a 18 La variable mes puede ser mayor de 6 , pero no tiene que ser 11 (es decir 7, 8, 9, 10, 12)

Una Disyuncin ( | ) es verdadera si alguno de sus argumentos es verdadero, en caso contrario, el resultado es falso La disyuncin expresa que se cumpla alguna de sus 2 opciones (operandos)

Ejemplo Explicacin TengoBoletoMetro = verdadero | dinero > 2.00 Se revisan las variables TengoBoletoMetro y dinero para saber si por alguna de los dos evaluaciones es viable viajar en metro x = 5 | x > 13 Se revisa que la variable x sea igual a 5 o superior a 13 (es decir 5, 14,15,16,17 )

Es posible expresar los operandos Conjuncin y Disyuncin en la siguiente tabla

P Q Verdadero Verdadero Verdadero Falso Falso Verdadero Falso Falso

P&Q Verdadero Falso Falso Falso

P|Q Verdadero Verdadero Verdadero Falso

Una Negacin ( ~ ) cambia el valor booleano de su operando de falso a verdadero y viceversa. Solo necesita un operando Ejemplo ~ ( ColorOjos = verde ) ~ ( x > 6) Explicacin Se evala que la variable ColorOjos no contenga el valor verde Todo valor de x que no sea mayor que 6 (es decir, x

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

~( ~ ( edad = 8 ) )

puede tomar valores de: 6, 5, 4, 3, 2, 1, 0, -1, .) Se evala que la edad sea igual a 8

Observar que una doble negacin obtiene el valor inicial. La tabla de verdad del operador Negacin es: P Verdadero Falso ~P Falso Verdadero

2.2 Expresiones
Una expresin es un conjunto de valores constantes variables relacionados por operadores que al ser evaluados regresan un resultado. Normalmente, cuando se plantea un problema representando el mundo real, se hace uso de los operadores aritmticos, relacionales y lgicos

Ejemplos: Problema.- Calcular la cantidad de rboles que se pueden plantar en un terreno rectangular, sabiendo que un rbol necesita 4 m2 para su crecimiento.

El enunciado involucra conocer el rea del terreno, la siguiente expresin permite el clculo de la misma Area_terreno Base_terreno * Altura_terreno

Y tambin que la cantidad de rboles est dada por

Cantidad_arboles Area_terreno / 4

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Problema.- Revisar si el pago de luz se tendr que hacer con recargo, o ser pago normal. Se sabe que se paga con recargo cuando se excede la fecha lmite.

La expresin involucrada en la revisin de la fecha de hoy para dar la respuesta es

Fecha_Hoy > Fecha_Limite

Da tal manera que todos aquellos casos en que la expresin sea verdadera, son los mismos cuando el pago se realiza con recargos.

Problema.- Inscripcin de un alumno a un saln de acuerdo al promedio: Menores a 7 7-8 8.1- 9.5 Mayores a 9.5 No contemplados, sin grupo Grupo C Grupo B Grupo A

Las expresiones necesarias para ubicar a los alumnos del Grupo B de acuerdo a la Calificacin sera la siguiente:

Calf >= 8 y tambin

Calf <= 9.5

En este caso, es necesario indicar que ambas condiciones deben cumplirse, por lo que la expresin resultante sera: Calf > 8 & Calf <= 9.5 Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

2.3 Jerarqua de operadores


Dentro de una expresin es importante conocer la jerarqua de los operadores ya que esta dicta el orden de ejecucin de los operadores. De manera informal se menciona la categora del operador asociativo ( ), el cual indica que la expresin que est dentro de los parntesis se ejecuta antes que la expresin de afuera. La siguiente tabla muestra la jerarqua de los operadores:

Jerarqua Mayor

Menor

Operador (,) ^ *, / , mod +,= , <> , <, >, <=, >= ~ &,|

Categora Asociativo Aritmtico

Relacionales Lgicos

Se consideran tambin las siguientes reglas de prioridad: 1) Se resuelven las expresiones que se encuentran entre parntesis. 2) La prioridad ms alta se ejecutar primero. 3) Los operadores que tienen igual prioridad se evalan de izquierda a derecha, cuando coinciden en una operacin aritmtica.

Dentro de la los operadores aritmticos se observan 3 subcategoras, de tal manera que sin importar el orden de aparicin, primero se ejecuta el operador de potencia, a continuacin la multiplicacin, divisin y modulo (de misma prioridad los tres) y por ltimo las operaciones de suma y resta (de misma prioridad).

Ejemplos: (El nmero debajo de las operaciones indican el orden de ejecucin)

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Si una expresin contiene operadores aritmticos lgicos y relacionales, primero se resuelven los aritmticos y con sus resultados se operan los relacionales y por ltimo los lgicos. Ejemplos:

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Observar que en los operadores relacionales, Falso es menor que Verdadero

Cuando se ocupan los operadores Lgicos, tiene mayor jerarqua el operador de negacin (~)

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

No se puede comparar un valor numrico con un lgico utilizando un operador relacional

Bloque de asignacin Un bloque de asignacin se utiliza para asignar valores o expresiones a una variable. La asignacin es una operacin destructiva. Esto significa que si la variable tena asignado un valor, ste se destruye, conservando ahora el nuevo valor. El formato de la asignacin es el siguiente: Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Variable expresin o valor Donde: expresin puede ser aritmtica o lgica, o una constante o variable. Observar a continuacin el siguiente ejemplo: Ejemplo Suponga que las variables I, ACUM y J son de tipo entero, REA y SUM de tipo real, CAR de tipo carcter y BAND de tipo booleano. Considere tambin que se tienen que realizar las siguientes asignaciones: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. I 0 I I +1 ACUM 0 J (5^2 1)/3 CAR a ACUM J / I REA ACUM / 3 BAND (8 > 5) & (15 < 2 ^3 ) SUM ACUM * 5 / J ^ 2 I I *3 REA REA / 5 BAND BAND | ( I = J ) I REA CAR J

En la siguiente tabla se observan los valores que van tomando las variables en memoria Nmero de asignacin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 I 0 1 0 8 a 8 2.66 falso 0.625 3 0.532 falso error error J ACUM REA SUM CAR BAND

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Observe que en la asignacin numero 13 a la variable I se le asigna una variable de tipo real, por lo que se produce un error. Lo mismo ocurre con la asignacin numero 14, a la variable tipo carcter CAR se le asigna una variable de tipo entero, por lo que tambin produce un error.

Linealizacin de Expresiones Aritmticas Las expresiones aritmticas deben escribirse en una lnea para que la computadora pueda evaluarla. Por ejemplo, la expresin:

Nn

x y y 1

se entiende perfectamente y es posible evaluarla al conocer los valores de x y y

si

y 3

la sustitucin de los valores queda

Nn

53 3 1

se evala primero la expresin del numerador y se continua la expresin del denominador, finalmente se resuelve la divisin, dando como resultado N 4 Sin embargo, la computadora no entiende este formato, por lo cual se debe escribir la expresin original en una sola lnea para que sea reconocida: N ( x +y ) / (y -1)

La computadora examina toda la expresin y va evaluando cada componente de acuerdo con cierto orden de precedencia que contienen las operaciones aritmticas, que es el siguiente:

1.- Operaciones entre parntesis 2.- Operaciones Uniras (se refiere al cambio de signo, ejemplo -4, cambia a 4)

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

3.- Multiplicacin, Divisin y Modulo 4.- Suma y Resta

Cuando existen operaciones del mismo nivel, se evalan de izquierda a derecha

En el ejemplo anterior se encierran entre parntesis las operaciones ( x + y ) y ( y -1) para cerciorarse de que se hiciera primero la suma, luego la resta y al ultimo la divisin, conforme al planteamiento del problema original. Si la expresin se hubiera escrito

N x + y / y -1 Estara incorrecta, porque la computadora primero hace la divisin de y/y

luego la suma y por ltimo la resta, de tal manera que arrojara un resultado incorrecto.

Otros ejemplos de conversin en lnea:

x n A B

Y Z

A+B Y/Z

A + B (Y / Z)

Wn

A*C B  D C

W (A*C/D )+B/C

Xn

CE  BF AE  BD

X ( ( C * E) (B * F)) / ((A * E) - (B * D))

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Zn

T (Y  2)  R S

Z (T* (Y 2 ) + R ) / S

9 F n C  32 5

F 9 / 5 * C + 32

3. Algoritmos y Diagramas de Flujo


3.1 Algoritmos y Diagramas de Flujo
Un algoritmo es la especificacin de un nmero finito de pasos bien definidos, que deben ejecutarse en un orden especfico y que permiten realizar un procedimiento, para llegar a un resultado o resolver un problema. Por ejemplo, los procedimientos que se conocen para sumar, restar, multiplicar, dividir, etc., son algoritmos. Por lo general la especificacin es abstracta y no se expresa en un lenguaje especfico de programacin. Sin embargo, para que una especificacin sea un algoritmo, debe ser suficientemente concreta para poder reconstruirse como un procedimiento escrito en tal lenguaje. Muchos algoritmos llevan implcitos, mtodos complicados de organizacin de los datos utilizados en el clculo. Por ejemplo, los algoritmos ejecutados por una computadora pueden combinar en un clculo matemtico complicado, millones de pasos elementales, tales como adiciones y substracciones. Las entidades creadas de esta manera se denominan estructuras de datos. As, las estructuras de datos y algoritmos estn ntimamente relacionados. De hecho, muchos algoritmos son descritos en trminos de las estructuras de datos empleadas, como se demostrar en los ejemplos de este captulo. Cuando se desarrolla un programa muy grande, una gran parte del esfuerzo se destina a comprender y definir el problema a resolver, analizar su complejidad y descomponerlo en subprogramas ms pequeos que puedan realizarse fcilmente. En estos casos se deben crear algoritmos para cada subprograma, los cuales formarn parte del algoritmo principal. La tcnica de dividir un problema en varios subproblemas que puedan resolverse independientemente uno de otro y despus usarse para resolver el problema original, comnmente se denomina divide y vencers . De esta manera, en programas que resuelven problemas complicados, los pasos del algoritmo principal que requieran de un mayor refinamiento son resueltos al elaborar algoritmos para cada subprograma. Al elegir o desarrollar un algoritmo se debe tener presente si ste se utilizar en una tarea muy amplia o en muchas ocasiones, ya que la eleccin del algoritmo inadecuado puede aumentar drsticamente el tiempo de ejecucin del programa. Habr otros casos en los que un algoritmo simple cubra las expectativas. A menudo varios algoritmos diferentes son vlidos para resolver el mismo problema. Esto se debe a que las personas generalmente tienen diferentes formas de resolver el mismo problema. Dos o ms algoritmos diferentes pueden resolver el mismo problema, pero no quiere decir que todos ellos acten con la misma eficiencia. La eleccin del mejor Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

algoritmo para una tarea particular puede ser un proceso muy complicado y con frecuencia conllevar un anlisis matemtico complicado. La rama de la Computacin que estudia tales cuestiones se llama Anlisis de Algoritmos. Los algoritmos tambin se aplican en mbitos diferentes a la Ciencia de la Computacin. Por ejemplo, los pasos de las recetas de un libro de cocina, los pasos necesarios para construir una casa, los pasos a seguir para instalar una computadora, los pasos que deben cumplirse antes de codificar un programa (los pasos de la etapa de diseo), etc. Los diagramas de flujo son la representacin grfica ms usada para el diseo de los procesos y es una excelente forma de describir fcilmente los detalles de los procedimientos. En un diagrama de flujo, para representar un paso de procesamiento se utiliza un rectngulo, un rombo para representar una condicin lgica y flechas para mostrar el control de flujo. La composicin secuencial implementa los pasos de procesamiento esenciales de la especificacin de cualquier algoritmo. Los enunciados secuenciales representan listas de instrucciones en donde el control fluye secuencialmente (ver figura 3.2 inciso A). Las estructuras de control de seleccin o enunciados condicionales, dan la posibilidad de seleccionar entre una y otra accin basada en alguna ocurrencia lgica. Permiten tomar decisiones durante la ejecucin de un mtodo, al seleccionar un enunciado (simple o compuesto) de entre otros, dependiendo del resultado obtenido al evaluar una expresin condicional (condicin lgica). Es decir, un programa puede ejecutar una accin si una condicin es verdadera y otra o ninguna si es falsa (ver figura 3.2 incisos B y C). Los ciclos proporcionan iteracin (repeticin). Un enunciado de repeticin es una construccin que se encarga de realizar ciclos en un programa, con objeto de repetir operaciones, acciones o instrucciones de una forma controlada (ver figura 3.2 incisos F y G). Los ciclos permiten la implementacin de diagramas de flujo y algoritmos en los que se requiere regresar a pasos o tareas previamente realizadas, que de otra manera se tendran que escribir de manera secuencial, lo que producira programas extensos con muchas lneas de cdigo redundantes. En general, un ciclo depende de alguna condicin lgica que determina el momento en que ste debe concluir (condicin de paro). Dichas construcciones estructuradas se propusieron para limitar el diseo de los procedimientos del software a un pequeo nmero de operaciones predecibles, que permiten reducir la complejidad de los programas y, por tanto, facilitan la legibilidad, la prueba y el mantenimiento. El uso de un nmero limitado de construcciones lgicas tambin contribuye a un proceso de comprensin humana que los psiclogos llaman troceado. Las construcciones estructuradas son trozos lgicos que permiten a un lector reconocer los elementos de los procedimientos de una clase, en vez de leer el diseo o el cdigo lnea a lnea. El uso de los diagramas de flujo se justifica si se considera: 1. Debido a que un diagrama de flujo es en esencia una imagen, puede representar fcilmente un pensamiento o una serie de ideas, por lo que es un eficaz medio de comunicacin. Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

2. Los diagramas de flujo son herramientas analticas muy eficaces y econmicas, por medio de los cuales se puede detallar rpidamente una serie de alternativas de solucin a un problema y a partir del examen de stas, analistas y programadores podrn determinar cul es la solucin ms apropiada. Antes de escribir los programas, desperdiciar tiempo en la computadora o probar fsicamente la solucin, la evaluacin y verificacin de la lgica de un programa puede realizarse por completo con papel, lpiz y diagramas de flujo. De esta manera, si aparecen problemas durante la programacin, podr determinarse si el problema est en la codificacin o si fue causado por una falla de la computadora. 3. En virtud de que los diagramas de flujo son esquemticos, constituyen una forma concisa de documentacin que no depende de algn lenguaje de programacin especfico.

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

A) Composicin secuencial

B) Enun

Primera tarea

Enunciado2

Segunda tarea

Figura 3.2 Construcciones lgicas para el control de flujo en diagramas de flujo

D) Enunciados de seleccin sin la parte else


En programacin existe una relacin entre las variables y su tipo de dato. De hecho, en los lenguajes de programacin que apoyan la fuerte tipificacin de datos, se debe declarar explcitamente el tipo de dato de las variables. Por otro lado, en los diagramas de flujo sera poco Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Condicin1

Enunciado1

prctico especificar los tipos de datos de cada una de las variables utilizadas. Por tal motivo, en los diagramas de flujo se adoptarn algunas convenciones que permiten identificar el tipo de dato de una variable. Se usan apstrofos, comillas, y el punto decimal para identificar constantes de carcter, cadenas, enteros y reales, respectivamente. Sin embargo, es preferible decir explcitamente el tipo de dato que puede almacenar una variable y las estructuras de datos que se emplearn, con el fin de evitar problemas en la etapa de codificacin debidos a la ambigedad de un diagrama de flujo. Si bien es cierto que los diagramas de flujo permiten documentar un programa de una manera concisa, tambin es verdad que an siguen siendo insuficientes para documentar adecuada y detalladamente un programa. Antes de elaborar los diagramas de flujo es necesario determinar y describir los tipos y estructuras de datos que se emplearn en un programa, as como tambin el algoritmo ideado o seleccionado para dar solucin al problema planteado. Haciendo esto se logra simplificar al mximo los diagramas de flujo y ser posible redactar por separado toda la informacin que pueda ser de utilidad a la hora de escribir el programa final, por lo que esta tcnica ser empleada en lo que resta de este trabajo.

3.2 Smbolos utilizados en los Diagramas de Flujo

Smbolo de INICIO y FIN. Este smbolo se usa para indicar el principio y el final de un diagrama de flujo. Smbolo de E/S (Entrada/Salida). Define cualquier operacin de E/S requerida por un programa. Este smbolo puede indicar: 1) una lectura de datos (operacin de entrada) que se representa por medio de READ(dato1,...,datoN) 2) una impresin de resultados (operacin de salida) representada por PRINT(dato1,...,datoN).

Smbolo conector. Permite la conexin de partes de un diagrama de flujo dentro de la misma hoja.

Smbolo de procesamiento o de bloque de instrucciones. Marca las instrucciones de programa para auxiliar o efectuar el manejo de los datos.

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Smbolo de procedimiento o funcin (mtodo). Define un conjunto de instrucciones (procedimiento o funcin), dentro de un programa, que tiene un objetivo especfico y que se accede como una unidad. Smbolos de flujo. Sealan la direccin del procesamiento o el flujo de datos.

Smbolo de decisin. Indica la ejecucin de operaciones lgicas o relacionales, que evalan la expresin condicional o condicin lgica del interior de este smbolo y dependiendo de si el resultado es Verdadero (V) o falso (F), se realiza una u otra accin.

Smbolo conector entre pginas. Para indicar el nmero de pgina de la parte de un diagrama de flujo que se desea conectar. Figura 3.3 Smbolos usados en diagramas de flujo de programas Aunque un diagrama de flujo describe con precisin el procesamiento que se tiene que efectuar, ste no puede introducirse directamente a la computadora. El diagrama de flujo es nicamente una herramienta para el programador, por lo que cada smbolo del diagrama no logra que la computadora efecte alguna accin. Cada smbolo se coloca en el lugar donde debe realizarse una operacin en funcin de la lgica requerida. Cuando se escribe el programa, a travs de una instruccin o un conjunto de instrucciones se define la accin descrita por cada smbolo. En su momento, esta instruccin hace que la computadora procese datos. Se han diseado un conjunto de smbolos, para mostrar con precisin las operaciones de procesamiento en los diagramas de flujo.

3.3 Conceptos preliminares de los Diagramas de Flujo


Antes de ampliar la explicacin acerca del significado de los smbolos de la figura 3.3 y ejemplificar el uso los mismos, es necesario estudiar algunos conceptos. Un identificador es una secuencia de caracteres que necesariamente comienza con una letra del alfabeto o con un smbolo subrayado. Los caracteres restantes que componen el identificador pueden ser: letras del alfabeto, smbolos subrayados o dgitos. Por ejemplo, Horas, NOMBRE, sueldo, x, x 1, y, z1, i, n, L, mes, sexo, Pi, Epsilon, son identificadores permitidos. En los diagramas de flujo, los identificadores hacen referencia a variables, constantes, subprogramas o mtodos (procedimientos y funciones), tipos de datos y otras entidades que intervienen tanto en la descripcin como en la solucin de un problema. Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Un identificador de variable o simplemente variable es un identificador definido por el usuario, que puede tomar valores de algn tipo de dato especfico. Es decir, a una variable se le puede asignar un valor que debe corresponder con su tipo de dato. Los valores almacenados en una variable no necesariamente son permanentes, ya que se le puede asignar cualquier valor permitido durante la construccin de un diagrama de flujo, siempre y cuando sea en el smbolo apropiado. La definicin de los identificadores est limitada nicamente por la decisin de la persona que los define. Sin embargo, el uso de identificadores significativos que se relacionen con el propsito de los mismos, mejora la legibilidad de los diagramas y disminuye el costo de desarrollo. Por ejemplo, suponga que se requiere definir un identificador de variable para referenciar y almacenar el resultado del clculo correspondiente al rea de un crculo. Una buena eleccin es AreaCirculo o Area; en cambio, identificadores como x, a, L, x1 no lo son, ya que no representan el propsito de su uso, por lo que se recomienda evitar el empleo de variables poco descriptivas. Una constante es un valor especfico que no puede cambiar por la aplicacin de alguna operacin, es decir, el valor de una constante es permanente. Existen diferentes tipos de constantes, siendo las ms comunes: 1. 2. 3. 4. Constantes de carcter: c , a , A , etc.. Constantes enteras: 12, 1, 23, etc.. Constantes reales: 12.32, 12.0, 123.345, 0.0004, etc.. Constantes de cadena14: hola , 12345 , 123.34 , AbCdE..,y , etc..

En los diagramas de flujo se usan algunas convenciones que permiten diferenciar e identificar los distintos tipos de datos bsicos empleados: 1. El uso de apstrofos y comillas en la escritura de constantes de carcter y cadenas, respectivamente, permite la distincin entre estos tipos de datos y los identificadores. Por ejemplo, h es un carcter, h es una cadena compuesta por un carcter y h es un identificador. 2. Los nmeros enteros carecen de punto decimal, mientras que los nmeros reales lo contienen necesariamente (aunque la parte decimal sea 0). Por ejemplo, 12 se interpreta como un nmero de tipo entero, mientras que 12.0 como un nmero de tipo real. En un diagrama de flujo, una operacin de asignacin o simplemente asignacin se representa al colocar una variable seguida por una flecha dirigida hacia ella y a continuacin el valor que se desea asignar o almacenar en la variable. El valor a asignar puede ser: 1. Una constante. 2. Un valor referenciado o identificado por el nombre de una variable. Es decir, el valor almacenado en la variable. 3. El valor devuelto como resultado de la ejecucin de una funcin, la cual se referenca por un identificador. 4. El valor obtenido por la evaluacin de una expresin aritmtica que puede involucrar variables, constantes e incluso identificadores de funciones. Ejemplos de asignaciones permitidas son: Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

i x R cad car i

1 i/2 x+i hola h i+1

En la secuencia de operaciones de asignacin anterior, a la variable i se le asigna el valor de 1, a la variable x el valor de i (que es 1) dividido entre 2, en la variable R se almacena la suma de x+i que es igual a 1.5. Las asignaciones segunda, tercera y sexta son correctas, debido a que la variable i fue previamente inicializada con un valor de 1. Si no existiera la primera asignacin, las siguientes dos y la ltima no tendran sentido ni seran permitidas, ya que en los clculos no se sabra qu valor utilizar para la variable i. Esto nos permite enunciar una regla bsica: Antes de utilizar una variable en la parte derecha de una asignacin por primera vez, sta debi ser inicializada (es decir, se le debi asignar un valor). En la secuencia de asignaciones anterior tambin se puede apreciar la caracterstica esencial de las variables: las variables pueden cambiar de valor durante la ejecucin de un conjunto de instrucciones u operaciones. En nuestro caso, i es inicializada a 1 y despus de ejecutar las cuatro operaciones siguientes la variable i cambia a 2 como resultado de la instruccin i i+1. Este tipo de asignacin es lo que comnmente se conoce como un incremento en 1 de la variable i, que se interpreta como sigue: a la variable i se le asigna el valor de i (que es 1) ms 1, es decir, a i se le asigna i+1=1+1=2. Esto nos permite sealar que en una operacin de asignacin puede intervenir la misma variable en ambos extremos de la flecha. Ms an, el incremento no necesariamente debe ser de 1, sino que puede tomar cualquier valor permitido. As, por ejemplo, la asignacin i i+20 incrementa en 20 el valor de la variable i. Asignaciones que efectan decrementos tambin son permitidas, por lo que i i x decrementa el valor de i x unidades, asumiendo, claro est, que las variables x e i son del mismo tipo y que la resta de i x es un valor que puede ser almacenado en la variable i. Es importante recalcar que antes de usar una variable debe determinarse el tipo de dato que almacenar. En las asignaciones presentadas arriba, segn las convenciones descritas antes, i es de tipo entero, x y R son de tipo real, cad es de tipo cadena y la variable car es de tipo carcter. Es necesario saber el tipo de dato que puede almacenar una variable, con objeto de no asignar datos de un tipo a variables de otro tipo. Por ejemplo, consideremos la secuencia de asignaciones que sigue y determinemos los tipos de datos de las variables utilizadas. c a i 3.1416 cad hola c i cad c Si nos guiamos por el contexto y las convenciones planteadas en prrafos anteriores, podemos decir que c es de tipo carcter, i de tipo real y cad de tipo cadena. Ahora, como c es de tipo carcter y cad de tipo cadena, las dos ltimas asignaciones no tienen sentido y son incorrectas. Es decir, a una variable de tipo carcter no se le debe asignar una variable de tipo real y un carcter no debe ser asignado a una variable de tipo cadena. Es evidente que asignaciones como:

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

1 20 mundo hola 3.1416 h son incorrectas, debido a que una constante no puede cambiar de valor por la aplicacin de cualquier operacin, en este caso una asignacin. Por este motivo, una regla bsica en operaciones de asignacin es: La parte izquierda de una asignacin siempre debe ser una variable . En las siguientes subsecciones se explica y ejemplifica el uso de los smbolos mostrados en la figura 3.3.

3.4 Smbolo de Entrada y Salida (E/S)


Sirve para representar las operaciones de E/S que permiten la comunicacin entre la computadora y el usuario, por lo que en l debern colocarse descripciones que indiquen la introduccin de datos a la computadora por parte del usuario o bien la impresin de resultados por parte de la computadora. En este trabajo se asume que las operaciones de E/S trabajan nicamente sobre el teclado y la pantalla del monitor, mismos que se conocen como dispositivos estndares de entrada y salida, respectivamente. Las operaciones de E/S pueden describirse de manera ms conveniente al expresarlas en trminos de los dispositivos estndares de entrada y salida. As, la operacin de entrada se refiere a la lectura (READ) de los datos proporcionados por el usuario desde el teclado y la operacin de salida se refiere a la impresin (PRINT) de los resultados en la pantalla. Para que las operaciones READ y PRINT generen algn resultado til, es necesario especificar los datos a leer e imprimir, respectivamente. Para ello se usan las siguientes convenciones: 1. En las operaciones READ(dato1,...,datoN) y PRINT(dato1,...,datoN), dato1,...,datoN son los argumentos de READ o PRINT segn sea el caso. Los parntesis que encierran y las comas que separan dichos argumentos se usan para mejorar la legibilidad. 2. La operacin READ(dato1,...,datoN) lee N datos proporcionados por el usuario desde el teclado y los almacena (asigna) en las variables dato1,...,datoN, respectivamente. Los argumentos de READ deben ser identificadores de variables (variables) y cada uno de ellos puede ser de distinto tipo y aparecer en cualquier orden. Por ejemplo, dato1, dato2, dato3 y datoN (N=4) pueden ser variables de tipo real, entero, carcter y cadena, respectivamente; o bien dato1 una variable de tipo carcter,...,datoN una variable de tipo real, etc..Se debe observar que la operacin READ realiza asignaciones de manera implcita. Por ejemplo, READ(x, y1, z2) se interpreta como una operacin de entrada que lee tres datos proporcionados por el usuario desde el teclado y los asigna a las variables x, y1 y z2, respectivamente. Si suponemos que los argumentos de READ y los datos proporcionados por el usuario son de tipo entero y que adems el usuario introduce los valores 10, 1 y 2; entonces despus de ejecutar la operacin READ(x, y1, z2), las variables x, y1 y z1 tendrn los valores 10, 1 y 2, respectivamente. Es decir, la operacin READ ejecuta de manera interna las asignaciones x 10, y1 1 y z2 2. Por este motivo, los argumentos de READ pueden ser utilizados en operaciones posteriores sin necesidad de inicializarlos por medio de una asignacin explcita, puesto que READ asigna a sus argumentos los datos que lee desde el teclado. Note que operaciones como READ(0, 12), READ(1.3, hola ) y READ(x, s ) son incorrectas. Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

3. La operacin PRINT(dato1,...,datoN) imprime o escribe N datos (es decir, sus argumentos) en la pantalla. Al igual que en la operacin READ, los argumentos de PRINT pueden ser de distinto tipo y aparecer en cualquier orden. Bsicamente, en una operacin PRINT(dato1,...,datoN) los argumentos pueden ser constantes o variables que contienen un valor especfico. As, por ejemplo, en la operacin PRINT(x, z, hola ,10, 34.2), las variables x y z debieron ser inicializadas, hola es una cadena de caracteres constante, 10 es una constante entera y 34.2 es una constante real. Se insiste en que esta operacin tiene sentido slo si las variables x y z contienen algn valor, el cual debi ser almacenado en estas variables antes de ejecutar PRINT. Para ver en accin el smbolo y las operaciones de E/S, considerar el diagrama de flujo de la figura 3.4, que resuelve el problema descrito a continuacin: Disear un programa que lea desde el teclado el nombre del usuario y lo imprima como salida . Algoritmo 3.1: Secuencia lgica de pasos que se deben efectuar en la elaboracin de un programa que lea desde el teclado el nombre del usuario y lo imprima como salida. 1. Pedir al usuario su nombre. 2. Leer el nombre del usuario y almacenar dicho nombre en la variable nombre de tipo cadena. 3. Imprimir el nombre del usuario, almacenado en la variable nombre. El diagrama de flujo que representa grficamente el diseo del algoritmo 3.1 se muestra en la figura 3.4. Brevemente, el diagrama de flujo de la figura 3.4 se interpreta de la siguiente manera: 1. El smbolo de INICIO indica el comienzo del diagrama de flujo. 2. La flecha dirigida del smbolo de INICIO hacia el smbolo de E/S indica que la operacin que se encuentra en este ltimo es la siguiente a ser ejecutada. En todo diagrama, las flechas sealan el flujo de las operaciones a ejecutar y no se volver a indicar en posteriores descripciones. 3. Despus aparece un smbolo de E/S que ejecuta la operacin de salida PRINT( Da tu nombre ), por medio de la cual se enva a la pantalla una cadena de caracteres constante en forma de mensaje de peticin al usuario. 4. El flujo se dirige hacia otro smbolo de E/S, slo que en este caso para efectuar una operacin de entrada (o lectura) desde el teclado. La operacin READ(nombre) espera a que el usuario introduzca su nombre y a continuacin lo asigna a la variable nombre. Por ejemplo, si el usuario introduce Juan Prez Rojas, entonces READ realiza de manera implcita la asignacin nombre Juan Prez Rojas , es decir, en la variable nombre se almacena la cadena Juan Prez Rojas. Cabe sealar que las comillas no se almacenan en la variable nombre, se usan en la asignacin para recalcar que nombre es una variable de tipo cadena. 5. A continuacin se ejecuta la operacin de salida PRINT( Tu nombre es: ,nombre) contenida en el smbolo de E/S que sigue al flujo. Esta operacin de salida permite imprimir en la pantalla la cadena de caracteres constante Tu nombre es: seguida del contenido de la variable nombre (que como se dijo anteriormente es Juan Prez Rojas). En resumen, esta operacin imprime en pantalla: Tu nombre es: Juan Prez Rojas. Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Figura 3.4 Lee e imprime el nombre del usuario

Por ltimo, el flujo se dirige hacia el smbolo de FIN con el que se indica la terminacin del diagrama de flujo.

3.5 Smbolo de procesamiento o bloque de instrucciones


Las instrucciones u operaciones aritmticas son las ms utilizadas en el interior del smbolo de procesamiento. Los smbolos usados para representar operaciones aritmticas se conocen como operadores y se muestran en la tabla 3.1. Operador + * / Tipo de operador Operacin Unario o binario Ms unario o Suma (adicin) Unario o binario Menos unario o Resta (sustraccin) Binario Multiplicacin Binario Divisin Tabla 3.1: Operadores aritmticos

Ejemplos de expresiones aritmticas son: 1, +3, 3, 2+3, 2 3, 2_3, 3/2.0, 23.23/ 2.4, 2+3 2_3/4, (2+3) 2_3/4, etc. Cuando en una expresin aparece ms de un operador, la secuencia de

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

evaluacin depende de su prioridad o precedencia. El operador con mayor precedencia se evaluar primero. La precedencia de los operadores aritmticos presentados en la tabla 4.3 es: -, + (operadores unarios, ambos tienen la misma precedencia) Prioridad ms alta *, / (operadores binarios, ambos tienen la misma precedencia) -, + (operadores binarios, ambos tienen la misma precedencia) Prioridad ms baja Cuando dos o ms operadores tienen la misma precedencia, la evaluacin se efecta de izquierda a derecha. Por ejemplo, en la expresin 14 6/2*3 primero se evala la divisin, luego la multiplicacin y por ltimo la resta, es decir, 14 6/2*3=14 3*3=14 9=5 es equivalente a 14 ((6/2)*3)=14 (3*3)=14 9=5. Observe que los parntesis han sido utilizados para indicar explcitamente el orden de evaluacin de la expresin, pero que no son necesarios, ya que cuando se evala una expresin se asume la precedencia de los operadores. Los parntesis se usan principalmente para alterar la prioridad de los operadores, ya que permiten evaluar primero la sub-expresin delimitada entre stos. Por ejemplo, en la expresin (14 6)/2*3, la resta se realiza antes que la divisin y la multiplicacin, obteniendo como resultado (14 6)/2*3=8/2*3=4*3=12. El smbolo de procesamiento representa el manejo de los datos y todo tipo de operaciones de clculo, por medio de la aplicacin de una o ms instrucciones de asignacin que se ejecutan de manera secuencial y que son de la forma: variable expresin.

Como ejemplo, considerar el diagrama de flujo que se muestra en la figura 3.5, en el que se representa el clculo del cuadrado de un nmero real proporcionado por el usuario desde el teclado y la escritura de ambos valores (ver algoritmo 3.2). Primero se le pide al usuario que introduzca el nmero real del que desea obtener su cuadrado, mediante la operacin de salida PRINT( De un real para x: ). Despus se ejecuta la operacin de entrada READ(x), lo que permite la lectura de un nmero real y su almacenamiento en la variable x. En ese momento inicia el procesamiento, que en nuestro caso consiste nicamente de una operacin de asignacin contenida en un smbolo de bloque de instrucciones, la cual efecta un clculo aritmtico, la multiplicacin de x*x, y asigna el resultado a la variable y. Por ltimo, se imprime en la pantalla los valores de x e y (el cuadrado de x).

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Figura 3.5 Clculo del cuadrado de un nmero real

Algoritmo 3.2: Calcula e imprime el cuadrado de un nmero real proporcionado por el usuario desde el teclado. 1. Pedir al usuario el nmero del que se desea su cuadrado. 2. Leer el nmero proporcionado por el usuario desde el teclado y almacenarlo en la variable de tipo real x. 3. Calcular el cuadrado de x y almacenar el resultado en la variable real y. 4. Imprimir el valor de x y el de y (el cuadrado de x).

3.6 Smbolo de decisin


Las operaciones relacionales y lgicas, es decir, operaciones que evalan comparaciones (expresiones relacionales) y expresiones lgicas, mediante las cuales se puede decidir si una condicin es verdadera o falsa, son de suma importancia en todas las aplicaciones de procesamiento de datos. Estas operaciones se representan en los diagramas de flujo mediante el Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

smbolo de decisin, en el cual se coloca la condicin lgica (una condicin lgica o expresin condicional, puede ser una expresin relacional que involucra operadores relacionales, una expresin lgica que contiene operadores lgicos o bien una expresin que involucra operadores relacionales y lgicos), que se desea evaluar y dependiendo de si el resultado es Verdadero (V) o Falso (F), se ejecuta una u otra accin. En la tabla 3.2 se muestran los smbolos (operadores) usados en operaciones relacionales, los cuales permiten definir expresiones relacionales. Significado = igual a != diferente de < menor que <= menor o igual a > mayor que >= mayor o igual a Tabla 3.2: Operadores relacionales En la tabla 3.3 se muestran algunos ejemplos de condiciones lgicas y sus correspondientes valores de verdad. Condicin lgica Interpretacin Valor de verdad 2=3 2 es igual a 3 F 12 < 13 12 es menor que 13 V 12 <= 12 12 es menor o igual a 12 V b = b b es igual a b V 3.1416 != 3.1234 3.1416 es diferente de 3.1234 V Sarahi = Sarahi Sarahi es igual a Sarahi V Tabla 3.3: Evaluacin de algunas condiciones lgicas Como ejemplo de la utilizacin del smbolo de decisin, considerar el algoritmo 3.3 y su representacin grfica en el diagrama de flujo de la figura 3.6. Algoritmo 3.3: Determina e imprime en pantalla si un nmero entero m, proporcionado por el usuario desde el teclado, es positivo o negativo. 1. Pedir al usuario un nmero entero. 2. Leer el nmero proporcionado por el usuario desde el teclado y almacenarlo en la variable entera m. 3. Si el valor almacenado en la variable m es menor que cero entonces (Si m < 0 entonces): Indicar que el nmero m es negativo. De lo contrario (es decir, si m >= 0): Indicar que el nmero m es positivo. Smbolo

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Figura 3.6 Determina si un nmero entero es positivo o negativo Debido a que en un programa se requiere ejecutar instrucciones que dependen de condiciones lgicas que comparan: El contenido de variables, el contenido de una variable y una constante, el contenido de una variable o constante con el valor devuelto por una funcin, o en general, que comparan dos expresiones que contienen constantes, variables e identificadores de funciones, el uso de comparaciones entre constantes es poco frecuente. De hecho, condiciones lgicas como las mostradas en la tabla 3.3 casi nunca se usan. El diagrama de flujo de la figura 3.6 ilustra la representacin de una comparacin en el smbolo de decisin.

3.7 Smbolo de procedimiento o funcin


Define un subprograma representado como un procedimiento o como una funcin. La utilidad e importancia de este smbolo radica en que nos permite construir diagramas de flujo que representan la solucin de problemas complejos, haciendo uso de los conceptos de modularidad, abstraccin, refinamiento y ocultamiento de informacin. La idea es dividir un problema difcil en subproblemas menos complicados que puedan manejarse y resolverse ms fcilmente de una manera independiente. La divisin del problema original se desarrolla en niveles sucesivos de refinamiento de los detalles de cada procedimiento y posteriormente cada subproblema se resuelve descomponindolo en otros cada vez menos complicados o en una secuencia de instrucciones especfica. El refinamiento hace que el diseador ample la declaracin original, dando cada vez ms detalles conforme se produzcan los sucesivos refinamientos.

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Para dar solucin a cada subproblema se disea un diagrama de flujo (o subdiagrama) que en la etapa de codificacin se implementa como un subprograma (procedimiento o funcin). Consideremos un ejemplo concreto en el cual el uso de subprogramas es necesario. Una de las tareas ms importantes en computacin es la ordenacin de datos, que es el proceso de disponer un conjunto de informacin del mismo tipo en orden creciente o decreciente, dando como resultado una lista ordenada i de n elementos: i1 i2 ... in i1 i2 ... in. Un gran nmero de aplicaciones computacionales necesitan ordenar su informacin, de ah su importancia. En una aplicacin, un ordenamiento de n elementos almacenados en alguna estructura de datos como el arreglo, puede ser requerido en cualquier punto del programa. Ms an, un ordenamiento puede ser utilizado por otros programas que lo necesiten. Por tal motivo, las instrucciones o el cdigo que se encarga de ordenar los datos es implementado como un procedimiento que, dependiendo del mtodo de ordenamiento elegido, ordena los elementos almacenados en el arreglo, ya sea intercambiando, seleccionando o insertando valores en las localidades de memoria del mismo, modificando de ser necesario los valores almacenados en dichas localidades, de tal manera que el arreglo contenga, al salir del procedimiento, los mismos elementos que al principio pero ordenados. Para entender lo anterior, considerar el diseo de un programa que a partir de un conjunto de datos de tipo real proporcionados por el usuario, almacene dichos datos en un arreglo y calcule una de las medidas de tendencia central conocida en estadstica como mediana. Por definicin sabemos que la mediana (Me) de un conjunto de n nmeros, ordenados de menor a mayor, es el nmero central en el arreglo. Si n es un nmero impar, slo hay un valor central. Si n es un nmero par, hay dos valores centrales, y la mediana debe tomarse como el promedio de dichos valores. La mediana es una medida de tendencia central cuyo valor es calculado a partir del conjunto de datos que mide la observacin central de stos. Esta sola observacin es la ms central o la que est ms en medio en el conjunto de nmeros. La mitad de los elementos estn por arriba de ese punto y la otra mitad est por debajo.

El conjunto de datos es una muestra de n elementos, donde cada elemento es un nmero que representa una cantidad fsica del mundo real. Por ejemplo, un conjunto de datos puede mostrar: El nivel econmico de un grupo de individuos, el crecimiento mensual de muestras de maz, el registro del nmero de elementos de cada producto fabricado al mes por cierta compana, las calificaciones obtenidas por un grupo de estudiantes en el primer examen de programacin, la edad de los alumnos de la carrera de TIC, etc. Se debe observar que en todos los casos el valor de los nmeros contenidos en la muestra deben ser mayores que 0. Como primer ejemplo, calculemos la mediana para los nmeros 27.0, 3.4, 3.2, 3.3 y 3.1. Este clculo implica dos pasos: 1. Ordenar los nmeros. Al hacerlo obtenemos el arreglo: 3.1, 3.2, 3.3, 3.4, 27.0.

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

2. Determinar el nmero central en el arreglo. Como en este caso n=5 (nmero impar), hay un slo valor central que es 3.3, por lo que Me=3.3. En general, si n es impar la mediana es el nmero que se encuentra en la posicin ((n+1) div 2) del arreglo, donde div es un operador binario que representa la divisin entera entre n+1 y 2. En nuestro ejemplo, ((n+1) div 2)=((5+1) div 2)=(6 div 2)=3.

Como debemos considerar todos los casos posibles, realicemos el clculo de la mediana para los 10 datos siguientes: 164.0, 158.0, 167.0, 151.0, 162.0, 168.0, 167.0, 153.0 152.0 y 173.0. Los pasos a ejecutar son: 1. Ordenar los nmeros. Al hacerlo obtenemos el arreglo: 151.0, 152.0, 153.0, 158.0, 162.0, 164.0, 167.0, 167.0, 168.0, 173.0. 2. Determinar el nmero central en el arreglo. Puesto que n=10 (nmero par) hay dos valores centrales, los cuales se encuentran en las posiciones (n div 2)=5 y (n div 2)+1=6 del arreglo, que son 162.0 y 164.0. La mediana es el promedio de estos valores. Es decir, Me = (162.0 + 164.0)/2 = 163.0. Con esta informacin podemos elaborar un algoritmo que permita calcular la mediana de un conjunto de datos reales introducidos desde el teclado. La principal estructura de datos que emplear dicho algoritmo es un arreglo unidimensional A de nmeros reales, en el cual se almacenan los datos introducidos por el usuario. El lmite superior del arreglo se restringe a 100, es decir, el arreglo A slo podr almacenar 100 valores reales. Note que el algoritmo que describe la solucin al problema es expresado en trminos de las estructuras de datos empleadas. Algoritmo 3.4: Resuelve el problema de leer un conjunto de datos de tipo real desde el teclado almacenndolos en un arreglo para calcular la mediana. 1. Leer los datos proporcionados por el usuario desde el teclado, almacenar cada dato ledo en una localidad de un vector A y asignar el nmero de datos introducidos a una variable entera n. Este paso puede ser representado en un diagrama de flujo como una funcin. 2. Si n>0 entonces: a) Ordenar los n nmeros reales almacenados en el arreglo A en orden ascendente (creciente). Este paso del algoritmo representa una tarea complicada, que debe ser refinada y diseada por separado como un procedimiento, que cuente con su propio algoritmo, diagrama de flujo y especificaciones adicionales. b) Encontrar el nmero central en el arreglo A y calcular la mediana (Me). o Determinar si n (nmero de elementos del arreglo) es un nmero par o impar. i. Si (n 2*(n div 2))>0 entonces n es impar. ii. De lo contrario n es par.

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Si n es un nmero impar, entonces el valor central se encuentra en la posicin i = (n+1) div 2 del arreglo. Por lo tanto, el valor de la mediana se obtiene asignando el valor almacenado en A[i] a una variable Me, donde i es una variable de tipo entero que contiene el ndice ((n+1) div 2) del arreglo y Me es una variable de tipo real. Si n es un nmero par, entonces hay dos valores centrales que se encuentran en las posiciones del arreglo i=(n div 2) y j=(n div 2)+1 ( j=i+1). En este caso, el valor de la mediana se obtiene al efectuar la operacin: Me = (A[i] + A[j])/2 = (A[i] + A[i + 1])/2, donde i y j son enteros que contienen los ndices del arreglo de los valores centrales y Me es una variable de tipo real en la que se almacena la mediana.

c) Imprimir en la pantalla el valor de la variable Me.

El inciso (a) del paso 2 puede disearse por separado, elaborando un algoritmo de ordenamiento especfico, un diagrama de flujo que represente la secuencia lgica de los pasos del algoritmo y ms tarde en la etapa de codificacin, puede ser implementado como un procedimiento. En computacin, varios mtodos y algoritmos de ordenamiento han sido desarrollados y analizados por parte de mucha gente. Algunos son ms eficientes en tiempo de ejecucin que otros. En general, los algoritmos ms eficientes son ms complejos y por tanto se requiere de mayor tiempo y experiencia para entenderlos. Nosotros emplearemos el ordenamiento por el mtodo de la burbuja que, aunque es el ms ineficiente en la mayora de los casos, es el ms conocido debido a su simplicidad y a su fcil comprensin y programacin. La idea bsica en el ordenamiento de la burbuja es el recorrido secuencial a travs del arreglo varias veces. Cada paso consiste en comparar un elemento en el arreglo con su sucesor (A[i] con A[i+1]) e intercambiar los dos elementos si no estn en el orden apropiado. Para entender el mtodo, se requiere estudiar la figura 3.7 en donde se supone que en el arreglo A se han almacenado los datos reales 25.3, 57.8, 3.4 y 8.0. El mtodo es denominado ordenamiento de la burbuja debido a que cada nmero lentamente va ascendiendo hasta su posicin apropiada. Observe que en el paso j=1 se realizan n j=n 1=3 comparaciones y puesto que despus del primer paso, el elemento ms grande est en la posicin apropiada dentro del arreglo A, en el paso j=2 se requieren n j=n 2=2 comparaciones nicamente. Cuando concluye el paso 2 el nmero 25.3 ha encontrado su posicin como el segundo elemento ms grande, por lo que el paso j=3 disminuye la cantidad de comparaciones a n j=n 3=1. En general, si en el paso j se efectan k comparaciones entonces en el paso j+1 se realizarn k 1 comparaciones. Puesto que cada iteracin coloca un nuevo elemento en su posicin apropiada, un arreglo de n elementos requiere nicamente n 1 iteraciones (pasos).

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Figura 3.7 Pasos del mtodo de ordenamiento de la burbuja sobre el arreglo A Observar que aun cuando el arreglo requiera menos de n 1 iteraciones para su ordenamiento, el mtodo de la burbuja contina hasta que concluyen los n 1 pasos realizando comparaciones innecesarias. El nmero de intercambios depende del estado de ordenamiento original del arreglo, pero dicho nmero de intercambios no puede ser mayor que el nmero de comparaciones. Aunque se pueden hacer algunas modificaciones para optimizar el mtodo de la burbuja original, para nuestros propsitos esta versin es suficiente. Antes de presentar el algoritmo para el ordenamiento de la burbuja, necesitamos definir las estructuras de datos que emplear dicho algoritmo: 1. Sea j, 1 j n 1, donde n es el nmero de elementos almacenados en el arreglo A y n 1 es el nmero de iteraciones necesarias. La variable j es de tipo entero y sirve para almacenar el nmero de iteracin actual. 2. Sea i una variable de tipo entero que permite la indexacin del arreglo A, para efectuar las comparaciones entre A[i] y A[i+1]. La variable i vara de 1 al nmero de comparaciones requeridas en el paso j, es decir 1 i n j. 3. Sea temp una variable real utilizada como almacenamiento temporal de A[i], lo que permite efectuar el intercambio de los datos A[i] y A[i+1]. Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

A continuacin se presenta el algoritmo para el mtodo de ordenamiento de la burbuja, el cual puede considerarse como un refinamiento del paso 2 inciso (a) del algoritmo 3.4. La representacin en diagrama de flujo del algoritmo anterior, diseado como procedimiento, se presenta en la figura 3.8. Notar que una vez analizado el problema, elegido las estructuras de datos y especificado un algoritmo, el diagrama de flujo se construye fcilmente. Refinamiento del paso 2 inciso (a) del algoritmo 3.4: Algoritmo para el ordenamiento por el mtodo de la burbuja: 1. j 1; 2. Mientras j<n hacer: a) i 1; b) Mientras i n j hacer: i. Si A[i] > A[i+1] entonces intercambiar los datos almacenados en A[i] y A[i+1]: A. temp A[i]; B. A[i] A[i+1]; C. A[i+1] temp; D. i i+1; ii. De lo contrario: i i+1; c) j j+1;

De acuerdo con la figura 3.8, en el smbolo de inicio se escribe la palabra PROC para indicar que el diagrama de flujo representa un subprograma (mtodo) en forma de procedimiento. El nombre del procedimiento y sus argumentos A y n, es decir Burbuja(A,n), sirven para referenciar o identificar al propio procedimiento y a las estructuras de datos que emplear para efectuar su tarea. En general, se recomienda usar identificadores o nombres de procedimientos que de alguna manera describan el propsito de los mismos. Aqu, por ejemplo, el identificador Burbuja y las descripciones de las estructuras de datos A y n que hemos presentado con anterioridad, permiten al lector deducir que se trata de un procedimiento encargado de ordenar, por el mtodo de la burbuja, los n datos reales almacenados en el arreglo A.

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Figura 3.8 Procedimiento que ordena el arreglo A de n datos por el mtodo de la burbuja

Con el fin de seguir el flujo de los datos, conforme son procesados, es til efectuar corridas del diagrama manualmente con algunos datos de prueba, como se muestra en las figuras 3.9 y 3.10. La figura 3.9 presenta la ejecucin de cada paso del diagrama de flujo de la figura 3.8 con un arreglo A que contiene n=4 datos: 25.3, 57.8, 3.4 y 8.0. Por su parte, la figura 3.10 hace lo propio con un arreglo A que tambin contiene n=4 elementos: 3.0, 4.0, 5.0 y 6.0. Note que aunque dichos datos estn ordenados inicialmente, el mtodo realiza las mismas comparaciones que cuando no lo estn, pero no efecta intercambios. Las nicas ventajas del mtodo de ordenamiento de la burbuja son: 1. Requiere poco espacio adicional, ya que slo necesita una localidad de memoria (o variable) para almacenar el valor temporal requerido por el intercambio. 2. Para el caso de arreglos casi o completamente ordenados, solamente se requieren n 1 comparaciones sin o con muy pocos intercambios. Puesto que los intercambios no son necesarios cuando un arreglo est ordenado, el tiempo de ejecucin se reduce considerablemente. El lector debe acostumbrarse a correr manualmente los diagramas de flujo que disee, ideando tablas en las que se muestre los valores de las variables y condiciones que intervienen. De esta manera, podra determinar si sus algoritmos y diagramas de flujo representan la solucin al problema planteado.

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Figura 3.9 Corrida de escritorio del diagrama de flujo de la figura 3.8

Figura 3.10 Corrida del diagrama de flujo de la figura 3.8 con A inicialmente ordenado Una funcin al igual que un procedimiento lleva a cabo el procesamiento de datos o el clculo requerido por alguna tarea especfica. Sin embargo, a diferencia de un procedimiento, una funcin devuelve un valor (carcter, entero, real, cadena, etc.). El paso 1 del algoritmo 3.1 representa una tarea que puede ser efectuada de manera adecuada mediante el diseo e implementacin de una funcin. Para mostrar como hacerlo, refinaremos dicho paso elaborando otro algoritmo y despus su correspondiente diagrama de flujo en forma de funcin. Pero antes, debemos determinar las variables a usar y sus tipos de datos: 1. Sea i una variable de tipo entero usada para indexar el arreglo A. 2. Sea n una variable de tipo entero que guarda el nmero de datos reales mayores que cero almacenados en el arreglo A. El valor de esta variable es devuelto por la funcin. Refinamiento del paso 1 del algoritmo 3.4: Algoritmo que permite almacenar los datos proporcionados por el usuario desde el teclado en el arreglo A y devuelve el nmero de datos introducidos mayores que cero: Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

1. i 1; 2. Pedirle al usuario que proporcione un nmero real mayor que cero; 3. Leer el dato proporcionado por el usuario desde el teclado y asignarlo a la localidad A[i]; 4. Mientras A[i]>0 hacer: a) i i+1; b) Pedirle al usuario que proporcione un nmero real mayor que cero; c) Leer el dato proporcionado por el usuario y almacenarlo en A[i]; 5. n i 1; 6. La funcin devuelve el valor de n;

Figura 3.11 Funcin que devuelve el nmero de datos mayores que cero almacenados en A El diagrama de flujo de la figura 3.11 es la representacin para la funcin especificada en el algoritmo anterior. Note que la variable n no es indispensable, por lo que se puede evitar su uso Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

tanto en el algoritmo como en el diagrama, en tal caso el valor devuelto por la funcin sera i 1. La variable n ha sido intencionalmente introducida para ejemplificar el uso de variables redundantes, que algunas veces permiten entender mejor el problema, pero que en general es conveniente evitar. Como ejercicio el lector puede elaborar el algoritmo y el diagrama de flujo equivalentes sin utilizar la variable n. Como se puede ver en la figura 3.11, en el smbolo de inicio se escribe la palabra FUN, para indicar que el diagrama de flujo representa una funcin. Despus se coloca el identificador de la funcin seguido por sus argumentos separados por comas y delimitados entre parntesis (en este caso slo se emplea un argumento). La manera de indicar el valor devuelto por la funcin, es colocando en el interior del smbolo de FIN la instruccin RETURN seguida por el valor de regreso encerrado entre parntesis. En este caso, RETURN(n) indica explcitamente que la funcin regresa el valor de la variable n. Una vez que se han diseado cada uno de los subprogramas requeridos por el algoritmo que resuelve el problema original (algoritmo 3.1), podemos elaborar el diagrama de flujo que lo representa, la figura 3.12 tiene ese propsito.

Figura 3.12 Calcula la mediana de los n datos almacenados en A

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Como se puede ver en la figura 3.12, en el smbolo de procedimiento o funcin no se requiere colocar el conjunto de instrucciones que forman el subprograma, slo es necesario especificar su identificador, la interfaz empleada que permite la comunicacin entre el subdiagrama (subprograma) y el diagrama (programa) que lo activa (que lo llama) mediante el uso de argumentos (en caso de que el subprograma los necesite). Observe que el valor devuelto por la funcin LeeDatos es asignado a una variable entera. Cabe sealar que el llamado a una funcin que forma parte de una operacin de asignacin, tambin puede ser colocado en un smbolo de procesamiento. Una caracterstica importante, es que el llamado a una funcin puede emplearse en cualquier smbolo de un diagrama de flujo que admita expresiones en las que el valor de regreso de la funcin forma parte: Cuando el llamado a una funcin se usa como parte de una expresin, el valor utilizado en la evaluacin de la expresin es el valor devuelto por la funcin. Para ilustrar esto, supongamos que div se representa como una funcin y no como un operador, los argumentos de div sern num (numerador) y deno (denominador) y el valor de regreso es un entero que representa la divisin entera entre num y deno. Con estos supuestos, el diseador elaborara el diagrama de flujo de la figura 3.12 como el que se muestra en la figura 3.13.

Figura 3.13 Igual que la figura 3.12, pero supone que div es una funcin Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

Lo interesante del diagrama de flujo de la figura 3.13, es que la funcin div se usada en la expresin condicional (n 2*div(n,2)) > 0. En este caso, una vez que la funcin div ejecuta su conjunto de instrucciones, devuelve un valor entero (50, por ejemplo) que representa el resultado de la divisin entera entre n y 2. Despus ese valor es usado para evaluar la expresin (n 2*50) > 0. Ntese tambin el uso del valor de regreso de la funcin div en las operaciones de asignacin contenidas en los smbolos de procesamiento, en donde el valor devuelto por la funcin div es asignado a la variable i. Cabe sealar que los algoritmos y diagramas de flujo han sido diseados de acuerdo a la lgica requerida para resolver el problema planteado y no se limitan a las caractersticas particulares de uno u otro lenguaje de programacin. La generalidad de los algoritmos y diagramas de flujo permite disear programas independientes del lenguaje de programacin empleado. El programador tiene la responsabilidad de implementar tales diseos, tomando en cuenta las caractersticas del lenguaje en uso, algunas veces dicha implementacin ser directa y otras se tendr que adecuar a las posibilidades del lenguaje.

Bibliografa
y Prez R., Fernndez A., Prez A., Hernndez R., Programacin Orientada a Objetos con C#, Universidad de Matanzas Camilo Cienfuegos , Universidad de las Ciencias Informticas, Septiembre 2003, 4 pp. Lpez L., Metodologa de la Programacin Orientada a Objetos, Alfaomega Grupo Editor S.A. De C.V., D.F. Mxico, 2006, 36 pp. Cairo O., Metodologa de la Programacin. Diagramas de Flujo, Algoritmos y Programas, Alfaomega Grupo Editor S.A. De C.V., D.F. Mxico, 2005, 4 pp. M. Lipschutz et al, Procesamiento de datos, McGrawHill, 1982, 218 pp. A. Tenembaum et al, Estructura de datos en Pascal, Prentice-Hall, 1983, 560 pp. S. Infante et al, Mtodos estadsticos, Trillas, 1984, 643 pp. A. Forsythe et al, Lenguajes de diagramas de flujo, Limusa, 1987, 587 pp. M. Loomis, Estructura de datos y organizacin de archivos, Prentice-Hall, 1991, 516 pp. R. Sethi, Lenguajes de programacin, Addison-Wesley, 1992, 493 pp. R. S. Pressman, Ingeniera del software, McGrawHill, 1993, 824 pp. B. Stroustrup, El lenguaje de programacin C++, Addison-Wesley, 1993, 710 pp.

y y

y y y y y y y y

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

y y y

R. Sedgewick, Algoritmos en C++, Addison-Wesley, 1995, 726 pp. L. Joyanes, Programacin en Turbo Pascal Versiones 5.5, 6.0 y 7.0, McGraw Hill, 77 pp. F.J. Ceballos, Enciclopedia del Lenguaje C, Computec Ra-ma, 73 pp.

Citas Bibliogrficas
[1]. R. Cadenhead et al, Programacin Aprendiendo Java 2.0 en 21 Das, Pearson Spanish, 2003, ISBN 9701702298. [2]. T. Archer, A Fondo C#, McGraw-Hill/Interamericana, 2001, ISBN 84-481-3246-1. [3]. B. Meyer, Object-Oriented Software Construction, Prentice Hall, 1997, ISBN 0-13-629155-4. [4]. J. Garca Molina et al, Introduccin a la Programacin, ICE, Universidad de Murcia, Diego Marn, 1999. [5]. J. Rumbaugh et al, Modelagem e Projetos Baseados en Objetos, Campus Ltda, 1994, ISBN 857001-841-X. [6]. T. Budd, Introduccin a la Programacin Orientada a Objetos, Addison Iberoamericana, 1994. Wesley

Elaborada por: Lic. Pedro Martnez Galaviz, Lic. Javier Nolasco Hernndez, M.C. Arturo Rojas Lpez

También podría gustarte