Вы находитесь на странице: 1из 29

UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERA Y ARQUITECTURA ESCUELA DE INGENIERA DE SISTEMAS INFORMTICOS PROGRAMACION I Unidad I ANLISIS ESTRUCTURADO o PROGRAMACIN MODULAR

Objetivo: Conocer y aplicar los conceptos relacionados con Anlisis Estructurado para la solucin de problemas y, aprender a codificar programas modulares en C. Contenido: Introduccin 1. Programacin Modular 2. Tcnicas de Diseo Modular 3. Ventajas de la programacin Modular 4. Cmo hacer el Anlisis Estructurado 5. Cmo utilizar Modularidad en C 6. Ejemplos 1 1 2 5 6 7 13

Introduccin Cuando los problemas que vamos a resolver son muy grandes o complejos, el disear la solucin se convierte en una actividad lenta y ardua, es aqu donde nos presta su mayor utilidad la Programacin Modular, ya que nos facilita la tarea de programar y nos permite elaborar estos programas de manera ms rpida y eficaz. La experiencia ha demostrado que la mejor manera de desarrollar una solucin y mantenerla, es construirla a partir de piezas pequeas, que la hacen ms manejable. A continuacin se presentan diferentes elementos que facilitan el diseo, implementacin, operacin y manteniendo de soluciones grandes para problemas grandes.

1.

PROGRAMACIN MODULAR o ANLISIS ESTRUCTURADO.

La Programacin Modular es uno de los mtodos de diseo ms fciles, flexibles, y potentes para programar y mejorar la productividad de nuestros programas. Esta tcnica divide el problema en pequeas partes o sub-problemas y se debe disear una solucin para cada una de esas partes. A las divisiones o partes de un problema y a las soluciones o algoritmos que los resuelven, se les conoce como mdulos; cada mdulo debe realizar una tarea o actividad especfica. Para resolver cada sub-problema (o mdulo), ste se debe plantear, analizar, disear su algoritmo y codificarlo, individualmente. Recordemos que la solucin de cada sub-problema resuelve solo una parte del problema; la solucin completa del mismo est formada por el conjunto de todas y cada una de las pequeas soluciones diseadas y la interrelacin de todas ellas. Todo problema resuelto por esta tcnica tiene un algoritmo denominado PRINCIPAL, comnmente conocido como: mdulo raz, mdulo conductor o mdulo de control; ya que controla todo lo que sucede, tanto en ese mdulo como en todos los dems, transfiriendo el control de ejecucin a cada mdulo en el momento que sea requerido. De esa forma, cada mdulo puede realizar su funcin o tarea, pero al terminar regresa el control de ejecucin al algoritmo o mdulo principal.

La solucin de cada mdulo se le conoce como SUB-ALGORITMO. Un problema resuelto mediante programacin modular genera un algoritmo modular que consta de un algoritmo principal y uno o varios subalgoritmos. El algoritmo principal debe contener las llamadas a los sub-algoritmos y puede realizar una o varias tareas. Cada sub-algoritmo como representacin de la solucin de un mdulo tiene todas las propiedades de un algoritmo. Adems, estos pueden contener tareas simples que slo se ejecutan una vez o, lo que es ms frecuente, tareas repetitivas que se ejecutan varias veces y son llamadas para ejecutarse desde el algoritmo principal. Si la tarea asignada a un mdulo es muy compleja (o muy grande), debe dividirse todava en otro u otros mdulos ms pequeos. El proceso sucesivo de subdivisin de mdulos contina hasta que cada mdulo tenga solamente una tarea o accin especfica que ejecutar, esta tarea puede ser de entrada, salida, procesamiento o manipulacin de datos, control de otros mdulos o una combinacin de todos o algunos de estos. Los resultados producidos por un mdulo pueden ser utilizados por otro mdulo cuando se transfiera el control a ellos. Se disea cada mdulo con independencia de los dems, y siguiendo un mtodo ascendente o descendente, se llega hasta la descomposicin final del problema en mdulos en forma jerrquica. En pocas palabras, la tcnica implica dos partes: 1. Dividir el problema en sub-problemas ms pequeos. 2. Aplicar la Metodologa para resolver problemas a cada sub-problema; es decir para cada sub-problema se hace lo siguiente: Planteamiento (Qu hace?) Anlisis del problema (Cmo lo hace?) Diseo de la solucin o flujograma Codificacin o programa

2. TCNICAS DE DISEO MODULAR


2.1 Generalidades Con el objeto de facilitar el diseo de algoritmos y la organizacin de los diversos elementos que los componen se utilizan algunas tcnicas que muestran una metodologa a seguir para resolver los problemas. Estas tcnicas hacen que los programas sean ms fciles de escribir, verificar, leer y mantener. Algunas de las tcnicas ms conocidas son : Top Down o Diseo Descendente Botton Up o Diseo Ascendente Warnier Orr TOP DOWN: Es una tcnica de diseo, que consiste en tomar inicialmente, el problema completo, como un todo y descomponerlo sucesivamente en problemas ms pequeos y por lo tanto, de solucin ms sencilla. BOTTON UP: Esta tcnica consiste en partir de los detalles ms precisos del algoritmo completando sucesivamente mdulos de mayor complejidad, este mtodo es inverso al anterior, parte de lo ms simple para llegar a lo complejo; se recomienda utilizarlo cuando: ya se cuenta con experiencia en la aplicacin de la tcnica, o cuando se tiene un modelo a seguir y ya se sabe lo

que se va a hacer, o se cuenta con amplia pericia en la resolucin de problemas semejantes. Conforme se va alcanzando el desarrollo de mdulos ms grandes se plantea como objetivo final la resolucin global del problema. La tcnica de Botton Up es frecuentemente utilizada para la realizacin de pruebas a sistemas ya concluidos. WARNIER ORR: Es una tcnica que utiliza una representacin semejante a la de cuadros sinpticos para mostrar el funcionamiento y organizacin de los elementos que conforman el algoritmo. Bsicamente, utiliza una notacin de llaves para organizar los mdulos. El tipo de diseo que nosotros utilizaremos es el Dscendente, por lo que lo ampliaremos un poco ms.

2.2 Diseo Descendente o Top down. El diseo descendente o Top-down, esto es de arriba hacia abajo, es un procedimiento mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento. La metodologa consiste en efectuar una relacin entre las etapas de estructuracin (o subproblemas), de modo que se conecten o comuniquen unas con otras, mediante entradas y salidas de informacin. Es decir, se descompone el problema en etapas o estructuras jerarquicas, de forma que se puede considerar cada estructura desde dos puntos de vista: Qu hace esa etapa? Y Cmo lo hace?. Cada nivel de refinamiento o sub-problema, conocidos ahora como mdulos, se debe consideran de la siguiente forma:

El diseo descendente o Top-down, puede verse a continuacin:

Mdulo 0

Mdulo 1

Mdulo 2

Mdulo 3

Mdulo 4

Mdulo 1-2

Mdulo 3-1

Mdulo 3-2

Mdulo 3-3

Mdulo 4-1

Mdulo 3-2-1 Figura 2.1

Mdulo 3-2-2

Mdulo 4-1-1

Para dividir un problema en trozos del mismo, ms pequeos, lo indicado es hacer una lista de las acciones o cosas que deben realizarse y agruparlas de alguna manera conveniente; adems debemos relacionarlas, indicando por medio de lneas la dependencia entre los mdulos, en la figura anterior, el mdulo 3-2-2 depende del mdulo 3-2, ste depende del mdulo 3 y ste a su vez del mdulo 0. Lo primero que podemos hacer es dividir el problema en tres partes: Entrada, Proceso y Salida, que como son las partes de todo algoritmo, casi siempre estn presentes y si el proceso en s es grande o complejo, se puede dividir en ms partes. Con la prctica veremos que se puede dejar la entrada de datos como parte del mdulo principal y que la salida puede ser un solo mdulo o formar parte de los mdulos de proceso; tambin podemos dejar la salida en el principal y disear un mdulo de entrada de datos y desde luego los de proceso. En fin que no hay una regla para dividir un problema, cada uno divide y disea los mdulos que considere necesarios. Cada mdulo puede contener acciones solo de entrada, solo de proceso, solo de salida de datos o, una combinacin de todos. Los datos con que trabaja un mdulo se conocen como parmetros, y estos forman parte de los datos de entrada, (pero no se leen), son enviados por el mdulo que lo precede por ejemplo en la figura anterior, los parmetros del mdulo 1-2, deben ser facilitados por el mdulo 1. Adems, cada mdulo puede producir resultados (datos de salida) que no se imprimen, sino que son requeridos por el mdulo que lo precede y, a estos datos, se les conoce como Valor de Retorno.

3. VENTAJAS DE UTILIZAR PROGRAMACIN MODULAR (o Anlisis Estructurado).


La tcnica de Anlisis Estructurado se conoce tambin como la tcnica Divide y Vencers, ya que se descompone un problema en mdulos independientes ms simples, que son fciles de resolver. Se disea la solucin de cada mdulo con independencia de los dems. Lo que nos facilita el anlisis, el diseo del algoritmo y desde luego su codificacin. Adems, como cada mdulo se considera independiente, varios programadores pueden disear por separado las soluciones a diferentes mdulos, con lo cual se minimiza el trabajo o esfuerzo personal y el tiempo de diseo para la solucin completa.

Algunas ventajas de programar modularmente son: Disminuir la complejidad Aumentar la claridad y fiabilidad. Posibilita el uso repetitivo de las rutinas en el mismo o en diferentes programas. Facilitar la ampliacin del programa mediante nuevos mdulos. Facilitar las modificaciones y correcciones al quedar automticamente localizadas en un mdulo, lo cual indica que un programa modular es fcil de mantener y modificar. Un programa modular es ms fcil de escribir y depurar (ejecutar, probar y poner a punto). Un programa modular es ms fcil de controlar. El desglose de un problema en mdulos permite encomendar los mdulos ms complejos a los programadores ms experimentados y los ms sencillos a los programadores con menos pericia o experiencia. Ahora bien, independientemente de la tcnica que se utilice para disear, para que este tipo de programacin sea realmente efectiva, se debe: Establecer un organigrama modular. En esta ocasin utilizamos la tcnica del TOP DOWN que se realiza mediante bloques, en el que cada bloque corresponde a un mdulo, y muestra grficamente la comunicacin entre el mdulo principal y los secundarios.

4.

REPRESENTACIN GRFICA DE UN ALGORITMO MODULAR

La representacin grfica de la solucin de un problema mediante esta tcnica, tiene varios flujogramas: uno que representa el modulo principal y uno o varios ms, que representan a cada uno de los mdulos que se hayan diseado. A cada mdulo se le debe asignar un identificador o nombre, que lo diferencie de otros. Para indicar dentro del FLUJOGRAMA principal que se har uso de un subflujograma se utiliza el rectngulo con doble barra vertical, dentro del cual se escribe el nombre del mdulo, a esto se le conoce como invocacin del sub-flujograma o llamada a un sub-flujograma. Para diferenciar un subflujograma del flujograma principal, a los smbolos de inicio y fin se le aaden barras verticales; en el smbolo de inicio y fin, se escribe el identificador o nombre del mdulo y los parmetros de ste si los necesita; es muy comn terminar un sub-flujograma con la palabra retornar en el smbolo de fin, ya que al llegar a ste, se regresa el control de ejecucin al flujograma principal o, al sub-flujograma que lo ha utilizado o invocado, tambin se escribe aqu el valor de retorno si el mdulo produce alguno. Las siguientes figuras nos muestran los smbolos descritos anteriormente:
Nombre del mdulo(parmetros)
Nombre del modulo (Parmetros) Fin_Nombre del modulo, Valor de retorno

o tambin:
Retornar valor de retorno

Invocacin de un Sub-flujograma

Inicio de un Sub-flujograma

Fin de un Sub-flujograma

La representacin grfica (flujograma) de la solucin de un problema descompuesto en forma modular, adopta la estructura siguiente:

Inicio

Nombre1 Proceso1 Proceso2 Nombre1 Nombre2


Fin

Nombre2

Proceso3

Fin_Nombre1

Retornar Subflujogramas

Flujograma Principal

En donde: Proceso1, Proceso2 y Proceso3 pueden contener estructuras: Secuenciales (lectura, escritura, asignacin) Selectivas (seleccin simple, doble o mltiple) Iterativas (Mientras, Desde-hasta, Hasta que) Un sub-flujograma (mdulo) puede ser invocado desde el flujograma principal o desde otro subflujograma, al terminar de ejecutarse se retorna al flujograma principal o al sub-flujograma que lo invoc.

5. COMO APLICAR EL ANLISIS ESTRUCTURADO


Como ya se dijo anteriormente, esta tcnica nos ayuda a disear programas que resuelven los problemas por partes o secciones; no resolvemos el problema como un todo sino que vamos resolviendo pequeas partes del mismo. Para aplicar esta tcnica vamos a seguir los siguientes pasos o algoritmo: 1. Planteamiento General del problema: Consiste en hacer el planteamiento del problema, tal como lo hemos estado haciendo, indicando nicamente los datos de salida y los datos de entrada. Recuerde que es necesario leer muy bien el enunciado del problema antes de plantear el mismo. 2. Diseo del Top Down: Este paso consiste en indicar mediante un grfico todos los mdulos que formaran nuestra solucin y, la relacin que existe entre ellos. Lo ms complicado de esta tcnica es dividir el problema en subproblemas, ya que muchas veces no sabemos como es ms conveniente hacerlo. Ayuda mucho elaborar una lista de las cosas que hay que hacer para obtener los datos de salida, sin entran en mucho detalle, en general podemos decir:

Leer Calcular Calcular Calcular Imprimir

Con esa lista, ya podemos agrupar estas cosas en mdulos y formar el Top Down. 3. Aplicar la Metodologa para Resolver Problemas a cada Mdulo del Top Down Tomamos uno por uno de los mdulos del Top Down, y se resuelve cada uno como si ste fuera el nico problema, aplicando los 3 primeros pasos de la metodologa para resolver problemas: planteamiento (solo de este pequeo problema), anlisis y diseo de solucin. 4. Codificar el programa modular. Cuando se tienen las soluciones grficas o subflujogramas de todos los mdulos se codifican en C para formar un solo programa modular.

6. COMO UTILIZAR MODULARIDAD EN C.


Para aprender a escribir en C un programa modular, se hace necesario recordar algunos conocimientos ya adquiridos y, desde luego, estudiaremos algunos nuevos: 6.1 Estructura de todo programa en C: #include #define // Directivas del Preprocesador // Macros del procesador

Declaracin de funciones o Prototipos de funciones //propias del usuario

Declaracin de variables globales main() // Funcin Principal { Declaracin de variables locales; Sentencias; }

Definicin de funciones propias del usuario

6.2 Variables Globales: Estas variables deben ser declaradas fuera de la funcin principal (main) y existen en memoria durante todo el tiempo de ejecucin del programa, por lo que, pueden ser referenciadas desde cualquier mdulo (funcin) o parte del programa. Lo cual significa que podemos utilizar estas variables en todas las funciones (o mdulos) del programa guardando su valor en todas ellas; y, ese valor se puede cambiar desde cualquiera de las funciones.

6.3 Variables Locales: Son variables que se declaran dentro de una funcin, y mantienen su valor mientras la funcin se est ejecutando, es decir que cuando se ejecuta otra funcin no existen en memoria, por lo tanto no se pueden utilizar, fuera de la funcin donde fueron declaradas. 6.4 Funcin: Una funcin es un conjunto de sentencias que realizan una tarea especfica, dicho de otra manera, una funcin es la codificacin en C de un mdulo; puede ser llamada o invocada desde cualquier parte del programa y devuelven un nico valor o ninguno. Para codificar en C una funcin necesitamos de las siguientes acciones: Declarar la funcin Definir la funcin Invocar la funcin. 6.5 Parmetros de una Funcin: Los parmetros o argumentos de una funcin son los datos, con los que se declara, define y se invoca la misma, una funcin puede tener o no parmetros. Los parmetros se comportan como variables locales, crendose al entrar a la funcin y destruyndose al salir de ella; es decir que, los parmetros reciben sus valores del mdulo o funcin que invoca la funcin, y con estos valores se trabajara en la funcin. Parmetros Formales, son los nombres de las variables con que se declaran y definen las funciones, estos se listan dentro de parntesis, separados por comas y cada parmetro debe indicar su tipo de dato. Parmetros Actuales, son los valores con que se invoca una funcin, es decir, los valores con que se va a ejecutar la funcin. Paso de parmetros: Los parmetros pueden ser trasladados a la funcin por valor o referencia, en esta asignatura utilizaremos nicamente el paso de parmetros por valor. El paso de parmetros por valor se conoce tambin como paso por copia, y significa que cuando C ejecuta la funcin y la sentencia que invoca la funcin, la funcin recibe una copia de los valores de los parmetros, si se cambia un parmetro afecta slo la funcin y no tiene efecto fuera de ella. 6.6 Declaracin de una Funcin o Prototipo de la funcin: Con la declaracin una funcin indicamos que el programa trabaja con esa funcin. declaracin de una funcin se le conoce tambin como prototipo de la funcin.

A la

Un prototipo de funcin consta de los siguientes elementos: tipo de dato que devuelve la funcin, nombre de la misma, lista de argumentos o parmetros tipificados y un punto y coma:

SINTAXIS: Tipo_retorno Nombre_funcin (lista_de_declaracin_parmetros);

En donde: Tipo_retorno:

Es el tipo de dato del valor que devuelve la funcin: int, float, char, si no devuelve ningn valor se usa el tipo void.

Nombre_funcin:

Nombre o identificador de la funcin, se deben de seguir las normas para cualquier identificador. Lista_de_parmetros: Lista de las declaraciones de los parmetros que utiliza la funcin, separados por comas, conocidos como parmetros formales. Ejemplo: (int x, float y)

Como ejemplo de la sintaxis de la declaracin de una funcin, mostramos el siguiente prototipo de la funcin suma, que trabaja con dos parmetros enteros (n1 y n2) devuelve un valor entero:

int suma (int n1, int n2);

Las funciones en C no se pueden anidar, lo que significa que una funcin no se puede declarar dentro de otra funcin; por lo tanto: TODAS LAS FUNCIONES UTILIZADAS EN UN PROGRAMA DEBEN SER DECLARADAS AL INICIO DE ESTE, DESPUS DE LAS MACROS DEL PREPROCESADOR y FUERA DE LA FUNCIN main()

6.7 Definicin de una Funcin: Cuando definimos una funcin, se hace despus de la funcin main, indicamos lnea por lnea que hace la funcin, es decir, contiene la codificacin de la solucin de un sub-problema. La definicin de una funcin consta de la cabecera de la funcin y, encerradas en llaves, el grupo de sentencias que detallan que hace. La primera lnea o cabecera es igual al prototipo de la funcin, pero sin el punto y coma al final. La estructura general de toda funcin se muestra a continuacin: Tipo_retorno nombre_Funcin (Lista_ Parmetros) { Declaraciones_variables_locales; Sentencias; return Expresin; }

En donde: Tipo_retorno: Nombre_funcin: Lista_parmetros:

Tipo de valor que devuelve la funcin o void si no devuelve ninguno. Identificador de la funcin. Lista de declaraciones de los parmetros de la funcin separados por comas.

Declaraciones_variables_locales: Detalle de las variables que se utilizan y

Si la funcin no devuelve ningn valor, susde tipo void, en en la funcin. de return no es es tipos de datos, tal caso la lnea obligatoria, puede omitirse o escribir return 0; en ambos casos, el control de ejecucin regresa al mdulo (o funcin) que la invoc. Para ilustrar la definicin de una funcin utilizamos el siguiente ejemplo: La siguiente funcin suma dos nmeros enteros, es la definicin del prototipo del ejemplo de la pgina 9. int suma (int n1, int n2) { int sum; sum = n1+n2; return sum; } //n1 y n2 son los parmetros

//devuelve el valor de sum

7.8 Invocacin o Llamada a una Funcin: Las funciones para poder ser ejecutadas, deben ser llamadas o invocadas dentro de cualquier parte del programa. Para llamar una funcin basta con escribir el nombre de la funcin y la lista de sus parmetros encerrados en parntesis, conocidos como parmetros actuales. En la siguiente sentencia o lnea de programa, se invoca la funcin suma, declarada en el ejemplo de pg. 9 y definida en el numeral 7 de esta misma pgina: total = suma(2, 3); En esta lnea se utiliz la funcin suma con los valores (parmetros actuales) 2 y 3; el resultado de la funcin es asignado a la variable total; es decir, que al finalizar la ejecucin de esa lnea, total toma el valor resultante de ejecutar la funcin suma; en este caso total tendr el valor de 5. Cualquier expresin puede contener una llamada a una funcin que dirige el control de ejecucin del programa a la funcin invocada. La funcin llamada que recibe el control se ejecuta desde el principio y cuando termina sta, el control del programa vuelve a la funcin main o la funcin que la llam si no es main, segn se muestra a continuacin:

10

... void funcion1 ( ); void funcion2 ( ); int main() { ...; funcion1 ( ); funcion2 ( ); ...; return 0; } void funcion1 ( ) { ... return 0; } void funcion2 ( ) { ...; return 0; } El siguiente programa utiliza dos funciones que imprimen un mensaje, y se llaman desde la funcin principal, que tambin imprime otro mensaje:

#include <stdio.h> #include <conio.h> void funcion1 ( ); void funcion2 ( ); main( ) { puts (Esta es la FUNCION PRINCIPAL); funcion1( ); funcion2( ); getch(); return 0; }

// prototipos //funcin principal

//llamadas a funciones

//fin de funcion main

void funcion1 ( ) //definicin primera funcion { puts(Estamos en la FUNCION UNO); } void funcion2( ) //definicin segunda funcin { puts(Estamos en la FUNCION DOS), return; }

11

Ejemplo de un programa completo, que utiliza la funcin suma: El siguiente programa calcula el promedio de 2 nmeros, utiliza la funcin suma de las pginas 7 y 9 #include <stdio.h> #include <conio.h> #define div 2.0 int suma(int n1, int n2); main() { int total; float media;

//declaracin de funcin suma

puts(digite dos nmeros positivos); scanf(%i %i, &a, &b); while ((a<=0) || (b<=0)) //validacin de datos { puts(debe ser positivo, digite de nuevo); scanf(%i %i, &a, &b); } total = suma(a,b) //invocacin a la funcin suma, el resultado de esta, se asigna a total. media= total/div; printf(\n La media es igual a: \t %.2f, media); getch(); return 0; } int suma(int n1, int n2) { int sum; sum = n1 + n2; return sum; } //Definicin de la funcin suma

NOTAS IMPORTANTES: Tipo de resultado: Es el tipo de dato que devuelve la funcin y aparece antes del nombre de la misma. Lista de parmetros: Es una lista de parmetros tipificados que utiliza la funcin. Cuerpo de la funcin: Se encierra entre llaves. No hay punto y como despus de la llave de cierre. No se pueden declarar funciones anidadas. Declaraciones locales: Las constantes y variables declaradas dentro de una funcin, son locales a la misma; por lo tanto se usan dentro de la misma y no existen fuera de ella. Antes de utilizar una funcin o de invocarla, debe ser declarada. La declaracin de una funcin contiene solo la cabecera de la misma, conocida tambin como prototipo. No se puede definir una funcin dentro de otra, las definiciones se hacen funcin por funcin y despus de la funcin principal.

12

7. EJEMPLOS DE PROBLEMAS RESUELTOS CON LA TCNICA DE PROGRAMACIN ESTRUCTURADA:


Enunciado 1: Disee un programa que calcule los minutos y segundos que equivalen a una cantidad de horas.

I.

PLANTEAMIENTO GENERAL DEL PROBLEMA


Entrada de datos Salida de datos

Cantidad de horas a convertir

Nmero de minutos Nmero de segundos

II.

TOP DOWN

Para disear el Top Down sirve de mucho hacer una lista de los grandes pasos o cosas que hacer: 1. Leer y validar los datos 2. Convertir a minutos 3. Convertir a segundos 4. Imprimir De estos, decidimos que disearemos 4 mdulos y el principal: uno de entrada o lectura de datos, que adems los valida; otro que convierte las horas en minutos; otro convierte los minutos a segundos y el cuarto que imprime los resultados. El mdulo principal, que se le llama Tiempos, por lo que se desea que haga; solo recibe los datos, invoca los otros mdulos en el orden debido y enva los parmetros. Veamos ahora el Top down: tiempos

leer

minutos

segundos

imprimir

13

III.

APLICACIN DE LA METODOLOGA PARA RESOLVER PROBLEMAS para cada


mdulo

MDULO leer:

** Qu Hace? Lee y valida los datos.


Entrada de datos Salida de datos

Cantidad de horas a convertir

Devuelve el nmero de horas

** Cmo lo hace?
Variables de Salida: No hay, devuelve el valor de la variable hora Variables de Entrada: Nombre Tipo Descripcin hora entero Representa el nmero de horas a convertir, variable local Parmetros: No hay, la funcin no tiene parmetros. Constantes Simblicas: No existen. Restricciones: Proceso: hora >0

No hay No hay

Variables de Proceso:

Diseo de Solucin: Sub-flujograma:

leer ( )

*
Mientras hora<=0

Digite el nmero de horas

Debe ser positivo

hora hora

Retornar hora

14

MDULO minutos: ** Qu Hace? Convierte las horas en minutos.


Entrada de datos Salida de datos

Recibe la cantidad de horas

Devuelve el nmero de minutos

** Cmo lo hace?
Variables de Salida: No hay, devuelve el valor de la variable min Variables de Entrada: No hay. Parmetros: h: Nmero de horas a convertir, ledas en el mdulo leer. Constantes Simblicas: No existen. Restricciones: Proceso: No hay

min = 60 * h

Variables de Proceso: Nombre Tipo Descripcin min Entero Representa el nmero de minutos, variable local

Diseo de Solucin Sub-flujograma:

minutos ( h )

min = 60 * h
Retornar min

15

MDULO segundos: ** Qu Hace? Convierte los minutos en segundos.


Entrada de datos Salida de datos

Recibe la cantidad de minutos

Devuelve segundos

el

nmero

de

** Cmo lo hace?
Variables de Salida: No hay, devuelve el valor de la variable seg Variables de Entrada: No hay. Parmetros: m: Nmero de minutos a convertir, calculado en mdulo minutos. Constantes Simblicas: No existen. Restricciones: Proceso: No hay

seg = 60 * m

Variables de Proceso: Nombre Tipo Descripcin seg entero Representa el nmero de segundos, variable local

Diseo de Solucin Sub-flujograma:


segundos ( m )

seg = 60 * m

Retornar seg

16

MDULO imprimir: ** Qu Hace? Imprime horas, minutos y segundos.


Entrada de datos Salida de datos

Recibe la cantidad de horas, minutos y segundos

Cantidad de horas Cantidad de minutos Cantidad de segundos

** Cmo lo hace?
Variables de Salida: Nombre Tipo Ho entero Mi entero Se entero Descripcin Representa el nmero de horas, variable local Representa el nmero de minutos, variable local Representa la cantidad de segundos, variable local

Variables de Entrada: No hay, recibe como parmetros ho, mi, se Parmetros: Ho, mi, se: Nmero de horas, minutos y segundos a imprimir ledos o Calculados en los otros mdulos. Constantes Simblicas: No existen. Restricciones: Proceso: No hay

No hay No hay

Variables de Proceso:

Diseo de Solucin Sub-flujograma:

17

imprimir ( ho, mi, se )

No. Horas, ho

Equivalentes a:

mi, Minutos se,


Segundos

Retornar

MDULO principal:
** Qu Hace? Llama a los otros mdulos y Recibe-Asigna los resultados.
Entrada de datos Salida de datos

Recibe la cantidad de horas Recibe la cantidad de minutos Recibe la cantidad de segundos

Enva la cantidad horas, minutos segundos

de y

** Cmo lo hace?
Variables de Salida: No hay, enva parmetros para la funcin imprimir. Variables de Entrada: No hay, recibe los valores de retorno de los otros mdulos: num_h,
num_m y num_s

Parmetros: No hay. Constantes Simblicas: No existen. Restricciones: Proceso: No hay

Invoca los mdulos, y recibe-asigna los resultados: num_h = Leer( ) //resultado de Leer num_m = minutos( num_h ) //resultado de minutos num_s = segundos( num_m ) //resultdo de segundos

Variables de Proceso: Nombre Tipo Descripcin num_h entero Representa el nmero de horas, variable local num_m entero Representa el numero de minutos, variable local

18

num_s

entero Representa el nmero de segundos, variable local

Diseo de solucin Flujograma:


Inicio

num_h =leer() num_m=minutos(num_h)

num_s=segundos(num_m)

imprimir( num_h, num_m, num_s)

Fin

IV PROGRAMA (Codificacin de la solucin)


#include<conio.h> #include<stdio.h> int leer(); //Prototipos int minutos(int h); int segundos(int m); int imprimir(int ho, int mi, int se); main() //Function principal { int num_h, num_m, num_s; puts("estamos en la funcion principal"); num_h = leer(); num_m = minutos(num_h); num_s = segundos(num_m); imprimir(num_h,num_m, num_s); puts("terminamos la funcin principal"); getch(); return 0; } int leer() { int hora; puts("Funcion leer"); puts("digite el numero de horas"); scanf("%i",&hora); while(hora <= 0) { puts("debe ser positivo"); scanf("%i",&hora); }
puts("terminamos leer");

//Lee y valida el numero de horas

19

getch(); return hora; }

int minutos(int h) { int min;

//Contierte las horas en minutos.

puts("estamos en la funcion minutos"); puts("conversion de horas a minutos"); min=60*h; puts("fin"); getch(); return min; }

int segundos(int m) { int seg; puts(Funcion segundos); puts("convertir minutos a segundos"); seg=60*m; getch(); return seg; }

//Convierte minutos en segundos.

int imprimir(int ho, int mi, int se) //Imprime horas, minutos y segundos. { puts( Funcion imprimir ); puts(" RESULTADOS "); printf("\n\n\n Numero de horas \t %i\n",ho); puts("EQUIVALENTES A:"); printf("\n %i \t minutos",mi); printf("\n %i \t segundos",se); getch(); return 0; }

Enunciado 2:
Disee un programa que simule una calculadora sencilla; es decir, que realice las operaciones aritmticas bsicas: SUMA, RESTA, MULTIPLICACIN Y DIVISIN. El programa debe permitir realizar varias operaciones e imprimir cada vez: el nombre de la operacin realizada, los datos, el resultado obtenido y, el nmero total de operaciones que se realizaron.

I.

PLANTEAMIENTO GENERAL

20

Entrada de datos

Salida de Datos

Datos a operar Tipo de operacin deseada

Nombre de la operacin Datos Iniciales Resultado No. de operaciones realizadas

II.

TOP- DOWN

El tener una idea de lo que vamos a hacer ayuda mucho a decidir cuantos mdulos vamos a disear y la relacin que existe entre ellos; por lo tanto, las grandes cosas o pasos que se deben realizar son: 1. Leer datos 2. Elegir la Operacin 3. Operar (producir el resultado) 4. Imprimir el resultado 5. Contar las operaciones De aqu que podemos decir que vamos a tener un mdulo para cada operacin aritmtica; adems el modulo principal va a leer los datos y es necesario validarlos, luego los enva a los mdulos, tambin va a contar e imprimir el nmero de veces que se opera. El top-down queda as: Principal

suma

resta

multi

divi

III.

ANLISIS ESTRUCTURADO

MODULO suma

** Qu hace suma?: Suma dos nmeros e imprime: la palabra SUMA, los


nmeros sumados y el resultado de la suma
Entrada de datos Salida de Datos

Recibe los dos nmeros a sumar

Mensaje: SUMA Datos Iniciales o sumados Resultado

21

** Cmo lo Hace?:
Variables de Salida. Nombre Tipo a Real b Real r Real Descripcin El primer operando El segundo operando El resultado de la operacin

Variables de Entrada: No hay. Parmetros: a, b: Los dos nmeros que se van a sumar.

Constantes Simblicas: No existen. Restricciones: No hay. Proceso: r=a+b

Variables de Proceso: No hay.

Flujograma: (diseo de solucin)


suma(a,b)
SUMA r=a+b Datos, a,b Resultado de la operacin:, r

Retornar

MDULO principal
** Qu hace Principal?: Lee dos datos reales, elige la operacin a realizar y cuenta las operaciones hechas en total.
Entrada de datos Salida de Datos

Dos datos a operar Tipo de operacin

Nmero de operaciones realizadas Enva los datos a operar

22

Valor para hacer otro clculo

** Cmo lo Hace?:
Variables de Salida: Descripcin El contador de las operaciones realizadas. Vf.? Debe enviar o mandar los dos nmeros a operar Variables de Entrada: Nombre Tipo x Real y Real op Entero otra Parmetros: Nombre i Tipo Real

Vi=0, Vc=1,

Descripcin El primer operando El segundo operando El tipo de la operacin a realizar 1: suma 2: resta multiplicacin 4: divisin Entero Indica si se requiere otra operacin, 1: otro clculo No hay, la funcin principal nunca tiene parmetros.

3.

Constantes Simblicas: No existen. Restricciones: op>=1 && op<=4. Proceso: i=0 leer otra leer x, y leer op Mientras otra==1 op =

// y validar 1: 2: 3: 4: Llamar Suma(x,y) Llamar Resta(x,y) Llamar Multi(x.y) Llamar Divi(x,y)

i= i + 1 leer otra Variables de Proceso: No hay.

Diseo de solucin Flujograma:

23

Inicio i=0

op
Para hacer una operacin digite 1

1 2

suma(x,y) resta(x,y) multi(x,y) divi(x,y)

otra

3
2

4 otra==1 Si
1: 2: 3: 4: Suma Resta Mutiplicacin Divisin 3

No

i=i+1

Para hacer otra operacin digite 1

op MIENTRAS op<1 || op>4

otra

Error, debe ser entre 1 y 4


3

op

Se realizaron: , i, operaciones
x, y Fin
1

24

MDULO divi ** Qu hace DIVI?: Divide dos nmeros e imprime: la palabra DIVISION, los nmeros divididos y el resultado de la divisin
Entrada de datos Salida de Datos

Recibe los dos nmeros a dividir

Mensaje: DIVISION Datos Iniciales Resultado

** Cmo lo Hace?:
Variables de Salida. Nombre Tipo a Real b Real r Real Descripcin El primer operando El segundo operando El resultado de la operacin

Variables de Entrada: No hay, Parmetros: a, b: Los dos nmeros que se van a dividir.

Constantes Simblicas: No existen. Restricciones: No hay. Proceso: Hay que recordar que la divisin por cero no se puede ejecutar, por lo tanto: b!=0? Si: r = a/b No: imprimir a, b no se pueden dividir Variables de Proceso: No hay.

Diseo de Solucin Sub-flujograma


No
a, y, b, No se pueden dividir

divi(a,b)

DIVISION Si r=a/b Datos, a,b Resultado de la operacin:, r

b!=0

Retornar

25

MDULO resta ** Qu hace RESTA?: Resta dos nmeros e imprime: la palabra RESTA, los nmeros restados y el resultado de la diferencia
Entrada de datos Salida de Datos

Recibe los dos nmeros a restar

Mensaje: RESTA Datos Iniciales Resultado

** Cmo lo Hace?:
Variables de Salida. Nombre Tipo a Real b Real r Real Descripcin El primer operando El segundo operando El resultado de la operacin

Variables de Entrada: No hay, se reciben los datos a restar (a,b) Parmetros: a, b: Los dos nmeros que se van a restar.

Constantes Simblicas: No existen. Restricciones: No hay. Proceso: r=ab

Variables de Proceso: No hay.

Diseo de Solucin Sub-flujograma:


resta(a,b)
RESTA r=a*b Datos, a,b Resultado de la operacin:, r

Retornar

26

MDULO multi

** Qu hace MULTI?: Multiplica dos nmeros e imprime: la palabra


MULTIPLICACION, los nmeros multiplicados y el resultado del producto.
Entrada de datos Salida de Datos

Recibe los dos nmeros a multiplicar

Mensaje: MULTIPLICACIN Datos Iniciales Resultado

** Cmo lo Hace?:
Variables de Salida. Nombre Tipo a Real b Real r Real Descripcin El primer operando El segundo operando El resultado de la operacin

Variables de Entrada: No hay. Parmetros: a, b: Los dos nmeros que se van a multiplicar.

Constantes Simblicas: No existen. Restricciones: No hay. Proceso: r=a*b

Variables de Proceso: No hay.

Diseo de solucin Sub-flujograma

multi(a,b)
MULTIPLICACIN r=a*b Datos, a,b Resultado de la operacin:, r

Retornar

27

IV. PROGRAMA Codificacin de la Solucin


//Calculadora sencilla #include <stdio.h> #include <conio.h> void suma (float a, float b); void resta(float a, float b); void multi(float a, float b); void divi(float a, float b); main() //funcion principal { int i=0, op, otra; float x, y; puts("Para hacer una operacin digite 1"); scanf("%i", &otra); while (otra==1) { puts("Digite el tipo de operacin que desea:"); puts("1: suma 2: resta 3: multiplicacin 4: divisin"); scanf("%i", &op); while (op<1 || op>4) { puts("Error, debe ser entre 1 y 4"); scanf("%I", &op); } puts("introduzca los operandos"); scanf("%f %f", &x, &y); switch (op) { case 1: suma(x,y); //invoca la funcion de sumar break; case 2: resta(x,y); //Llama a la funcion de resta break; case 3: multi(x,y); //Llamada a la funcin de multiplicar break; case 4: divi(x,y); //Invocacion de la funcion de dividir break; } i++; puts("Para hacer otra operacion digite 1"); scanf("%i", &otra); } printf("\n \n \n Se realizaron: \t %i operaciones", i);

28

getch(); return 0; } void suma (float a, float b) { float r; //FUNCION SUMA

puts("SUMA"); r = a+ b; printf("\n \n Resultado de la operacin: \t%.3f \n", r); } void resta(float a, float b) //FUNCION RESTA { float r; puts("RESTA"); r = a-b; printf("\n \n Resultado de la operacin: \t%.3f \n", r); } void multi(float a, float b) //FUNCION MULTI { float r; puts("MULTIPLICACION"); r = a*b; printf("\n \n Resultado de la operacin: \t%.3f\n", r); } //FUNCION DIVI void divi(float a, float b) { float r; puts("DIVISION"); if (b!=0) { r = a*b; printf("\n Datos:\t %.2f \t %.2f", a,b); printf("\n \n Resultado de la operacin: \t%.3f \n", r); } else printf("\n\n\n %.2f \t y \t %.2f t No se pueden dividir", a,b); return 0; }
Material editado por: Ing. Carolina Ayala e Ing. Milagro Castillo P. ciclo II 2011

29

Вам также может понравиться