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

Unidad 3- Modularizacin

UNIDAD 3- MODULARIZACIN INTRODUCCIN Y ORIENTACIONES PARA EL ESTUDIO

1 3

OBJETIVOS ................................................................................................................... 3 ACLARACIONES PREVIAS AL ESTUDIO ................................................................................. 3

INTRODUCCIN

MODULARIZAR DEFINICIN.............................................................................................. 4 NECESIDAD DE USO......................................................................................................... 5 ANLISIS DE CASOS ........................................................................................................ 5 ACTIVIDAD .......................................................................................................... 10

PROCEDIMIENTOS Y FUNCIONES

11

DEFINICIN ................................................................................................................ 11 DECLARACIN ............................................................................................................. 11 ACTIVIDAD .......................................................................................................... 11

INTRODUCCIN A LOS PARMETROS

12

LISTA DE PARMETROS ACTUALES Y FORMALES ................................................................... 12 CORRESPONDENCIA DE PARMETROS ................................................................................ 13 PARMETROS POR VALOR Y POR DIRECCIN ....................................................................... 13 REGLAS SOBRE PARMETROS .......................................................................................... 13

TIPOS DE DATOS. ESTRUCTURAS

21

DEFINICIN ................................................................................................................ 21 DECLARACIN ............................................................................................................. 21 AUTOEVALUACIN ................................................................................................. 22

SNTESIS

24

Programacin I/Mdulo III

Elaboracin Gabriel F. Stancanelli Damin A. Asman Este material pertenece a la materia Programacin I, de la Carrera de Analista de Sistemas de Computacin del INSTITUTO DE TECNOLOGA ORT.
Todos los derechos reservados. No esta permitida la reproduccin total o parcial de este apunte, ni su tratamiento informtico, ni la transmisin de ninguna forma o por cualquier medio, ya sea electrnico, mecnico, por fotocopia, por registro u otros mtodos, sin el permiso previo de los titulares. 3ra edicin Junio de 2009.

Programacin I/Mdulo III

Introduccin y orientaciones para el estudio


En el desarrollo de este mdulo abordaremos:

Resolucin de problemas de mediana complejidad. Modularizacin. Uso de las estructuras aprendidas en el mdulo I de la materia. Definicin de Tipos de datos. Estructuras. Conceptos generales de archivos Procesamiento de archivos secuenciales

Objetivos

Pretendemos que al finalizar de estudiar esta unidad, el alumno logre:

Acentuar los conocimientos sobre los diagramas de Nassi-Shneiderman. Realizar el anlisis de problemas de mediana complejidad. Utilizar rutinas y subrutinas. Diferenciar y utilizar procedimientos y funciones. Generar tipos de datos propios. Comprender la comunicacin entre la memoria de la computadora y los dispositivos de almacenamiento permanente. Leer y generar archivos secuenciales con informacin validada.

Aclaraciones previas al estudio


En este mdulo, el alumno encontrar:

Contenidos Conceptualizaciones centrales Bibliografa Referencia de material bibliogrfico recomendado Actividades

Usted debe tener presente que los contenidos presentados en el mdulo no ahondan profundamente en el tema, sino que pretenden ser un recurso motivador para que, a travs de la lectura del material, la bibliografa sugerida, y el desarrollo de las actividades propuestas alcance los objetivos planteados en el presente mdulo. Cada mdulo constituye una gua cuya finalidad es facilitar su aprendizaje.
Programacin I/Mdulo III 3

Introduccin
Hemos llegado al mdulo III de esta materia. A lo largo del material, fueron aprendiendo cmo encarar problemas, primero desde lo cotidiano, y luego desde el punto de vista computacional. De a poco, fuimos modificando un problema planteado y agregando herramientas, tanto de anlisis como de resolucin y generando los diagramas correspondientes para poder modelar la solucin. Los problemas planteados hasta ahora fueron cortos, con complejidad baja o media y su solucin se planteaba con un diagrama simple. Sin embargo, todos sabemos que las situaciones en la vida cotidiana como en la programacin, pueden complicarse. Para resolver este tipo de problemas explicaremos cmo modularizar un programa y generar problemas ms pequeos que, al resolver cada uno individualmente, estaremos llegando a la resolucin general del problema. Explicaremos adems cmo generar tipos de datos personalizados, haciendo uso de los ya existentes. Por ltimo, explicaremos brevemente cmo utilizar archivos, tanto para almacenar informacin o bien utilizarlos como datos de entrada de nuestro programa.

Modularizar
Definicin
Uno de los mtodos ms conocidos para resolver un problema es dividirlo en problemas ms pequeos, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras ms sencillas y a partir de ellas llegamos a la solucin. Por ejemplo, podemos dividir una tarea llamada mudanza, en tareas ms pequeas como: 1. 2. 3. 4. Conseguir un departamento Firmar el contrato Conseguir una empresa de mudanza Realizar la mudanza.

De sta forma, me podra ocupar en resolver cada uno de estos pasos, realizando la mudanza al terminar con el ltimo de ellos. Esta tcnica se usa mucho en programacin ya que programar no es ms que resolver problemas, y se le suele llamar diseo descendente, metodologa del divide y vencers o programacin top-down1.

1 Top-Down: Esta metodologa se considera de las ms eficientes en la resolucin de problemas. La tarea de subdividir un problema en otros ms pequeos, permite al programador generar soluciones a problemas ms sencillos en lugar de uno complejo. Es posible repetir el paso de subdividir los nuevos problemas las veces que sea necesaria. El proceso de romper el problema en nuevos sub problemas y expresar cada paso en forma ms detallada se denomina refinamiento sucesivo.

Programacin I/Mdulo III

Es evidente que si esta metodologa nos lleva a tratar con subproblemas, entonces tambin tengamos la necesidad de poder crear y trabajar con subprogramas para resolverlos. A estos subprogramas se les suele llamar mdulos, de ah viene el nombre de programacin modular. En C++, as como en otros lenguajes de programacin, es posible generar subrutinas. En las siguientes pginas vamos a aprender qu son, cmo se definen y cmo se utilizan.

Necesidad de uso
Cuando adoptamos la tcnica propuesta (identificar subproblemas dentro de un problema), encontramos que existen un conjunto de estos tems que estn incluidos en ms de un programa. Hasta podramos pensar que algunos estn en la mayora de los programas. Por ejemplo, realizar una funcin que, dada una fecha, nos indique si es vlida o no. Por lo tanto, si logramos identificar a estos procesos comunes, y desarrollamos los subprogramas, obtendremos una solucin que nos brinda algunas ventajas: La posibilidad de volver a utilizarlos cada vez que se necesite. Hacer pruebas para que funcione una sola vez y luego confiar en ella. Concentrarse en los subproblemas an no resueltos.

Todas estas ventajas que provienen de la posibilidad de usar nuevamente una solucin ya generada, nos dan como resultado un mejor aprovechamiento del tiempo de programacin. Tambin hemos podido observar en los ejemplos y la ejercitacin propuesta en las prcticas anteriores, que determinadas acciones se repiten ms de una vez en el mismo programa y a veces en ms de uno, por ejemplo: pedir un nmero y validarlo; calcular el importe a abonar a cada empleado de una empresa, etc. En los casos en que se repite el cdigo varias veces en el programa, si detectamos un error en la ejecucin (una vez desarrollado el mismo), corremos con la desventaja de tener que buscar en todo el cdigo las mltiples repeticiones y corregirlo en cada una de stas. A su vez, es conveniente dividir un programa en mdulos para una mayor facilidad de lectura del mismo. Lgicamente vern que esto es as a medida que sus propios programas crezcan en cantidad de lneas y complejidad. Entonces, para subsanar estos problemas es que debemos pensar en describir subprogramas que resuelvan las situaciones repetidas. Y por supuesto utilizarlos toda vez que resulte necesario.

Anlisis de casos
Para comenzar a tratar los conceptos de modularizacin, hemos elegido entre las situaciones cotidianas (aquellas conocidas por todos), una que consideramos til para no iniciar con ejemplos matemticos o de computacin que puede dificultar el aprendizaje de estos nuevos conceptos. Luego plantearemos varios casos matemticos, ya que pensar solamente una nica vez dichos problemas (en general de difcil solucin para la mayora de los programadores), har mucho ms fcil, y amena la tarea de programar.

Programacin I/Mdulo III

Por ltimo trataremos problemas computacionales clsicos (para programadores principiantes), algunos de los cuales se trataron en los mdulos anteriores. Entonces comencemos con el desarrollo de situaciones cotidianas y as trataremos de comprender el mecanismo para particionar problemas en subproblemas.

Ejemplo 1
Seguramente conocemos de qu se trata cuando hablamos de construir una pared, ahora bien, indudablemente no todos sabemos cmo se realiza esta actividad. Por lo tanto si aguardamos un poco, vamos a aprender los rudimentos bsicos de la construccin. Enunciado del Problema Levantar una pared de ladrillos a la vista cuyas medidas son 20 metros de longitud x 5 metros de altura. Debe realizarse en el patio trasero de mi casa. Para poder realizarlo cuento con la cantidad necesaria de ladrillos de 20cm de largo x 7 cm de alto. Hiptesis El largo es lineal, es decir, un ladrillo al lado del otro sin hacer zigzag. La altura que utiliza la mezcla es de 3cm sobre cada ladrillo. Esto nos servir para calcular la altura de una hilera. Datos provistos Largo, alto, ubicacin, cantidad de ladrillos disponibles (nos especifican que tenemos suficientes), medidas del ladrillo que nos servirn para realizar el clculo de cuntos tendremos que utilizar. Vamos a suponer adems, que contamos con todos los materiales y herramientas de construccin que necesitamos: Materiales: ladrillos, cemento, cal, arena y agua. Herramientas: baldes, palas, cucharas, hilo, nivel, etc.

Si dividiramos el problema en tareas: Cules son las tareas que hay que resolver para levantar la pared?
Para responder adecuadamente a esta pregunta primero deberamos conocer cmo es el proceso de construccin y luego qu se debe hacer para construir la pared pedida. Como podemos imaginar para la construccin, adems de conocer las tcnicas adecuadas que nos permitan concluir la obra cuanto menos decorosamente, debemos saber que necesitamos materiales, esto es: cal, arena, cemento y agua, mezclados en determinadas proporciones, y hasta una consistencia determinada. Acabamos de definir la primera tarea a tener en cuenta para la construccin preparar mezcla

Adems sabemos que una pared consiste en un conjunto superpuesto de hileras de ladrillos, unidas entre s mediante la mezcla. Cada una de las hileras se conforman colocando la mezcla y sobre la misma un ladrillo junto al otro (separados por 2 centmetros aproximadamente). Acabamos de definir la segunda tarea a tener en cuenta para la construccin Programacin I/Mdulo III construir hilera 6

Para poder comenzar a levantar la pared, debemos preparar adecuadamente el lugar (limpiar, alisar, preparar el lugar mojar, etc.), obteniendo as la tercer tarea Y por ltimo suponemos que no vamos a dejar el lugar y las herramientas sucias, por lo cual debemos limpiar las herramientas y el lugar realizar la cuarta tarea Tenemos qu averiguar la cantidad de hileras que debemos construir para cumplir con la medida calcular solicitada, para esto debemos realizar algunos clculos, obteniendo una quinta tarea cantidad de hileras Pongamos ahora manos a la obra. Recordemos que debemos construir una pared con una longitud de 20 metros, y una altura de 5 metros, segn las especificaciones.

Cuntas hileras de ladrillos debemos construir?


Para obtener la cantidad de hileras de ladrillos que necesitamos para levantar el muro, sabemos que la altura del ladrillo es de 7 centmetros, y la mezcla ocupa 3 centmetros ms, por lo tanto una hilera mide 10 centmetros de altura

1 ladrillo mezcla unin altura hilera

7 centmetros 3 centmetros 10 centmetros

O sea en 1 metro tenemos 10 hileras.

1 hilera 10 hileras

10 centmetros 1 metro

Por ltimo, para completar la altura de 5 metros debemos levantar 50 hileras.

1 metro 5 metros

10 hileras 50 hileras

Este mismo proceso que estamos realizando para calcular la cantidad de hileras, debemos realizarlo dentro de la resolucin del ejercicio. Aprovechando que ya conocemos el uso de variables y constantes, utilicemos algunas para realizar correctamente los clculos.

Programacin I/Mdulo III

/*Declaracin de constantes*/ const const const const const int int int int int LARGO_ESPERADO = 20;//utilizada para indicar el largo de la pared expresada en metros ALTO_ESPERADO = 5; //utilizada para indicar la altura de la pared expresada en metros ALTO_LADRILLO = 0.07; //Alto estndar de un ladrillo expresado en metros. ALTO_MEZCLA = 0.03; //Alto estndar de la mezcla sobre el ladrillo LARGO_LADRILLO = 0.20; //Largo estndar de un ladrillo expresado en metros.

/*Declaracin de variables */ int int int int iCantLadrillosxHilera; iCantHileras; i; j; // // // // Almacenar la cantidad de ladrillos que se necesitan para una hilera Almacenar la cantidad de hileras que hay que construir. contador utilizado para el ciclo FOR de cantidad de hileras a construir contador utilizado para el ciclo FOR de cantidad de ladrillos a poner

Si pensamos el proceso de construccin utilizando el pseudocdigo que ya conocemos, una posible solucin podra ser:

1. 1.1. 1.2. 1.3. 2. 2.1.

Preparar el lugar Limpiar el lugar Alisar el lugar. Mojar el lugar. Realizar clculos Almacenar en iCantLadrillosxHilera el resultado de: LARGO_ESPERADO \ LARGO_LADRILLO 2.2. Almacenar en iCantHileras el resultado de: ALTO_ESPERADO \ (ALTO_LADRILLO + ALTO_MEZCLA) 3. Repetir desde i = 1 a iCantHileras: (inicio ciclo FOR de hileras) 3.1. Preparar mezcla para una hilera 3.1.1. Tomar Balde Vaco 3.1.2. Repetir 3.1.2.1. Agregar Cal 3.1.2.2. Agregar Arena 3.1.2.3. Agregar Agua 3.1.2.4. Agregar Cemento 3.1.2.5. Mezclar 3.1.3. mientras que la consistencia no sea la adecuada 3.2. Construir hilera 3.2.1. Repetir desde j=1 hasta iCantLadrillosxHilera: (inicio ciclo FOR de cada hilera) 3.2.1.1. Poner mezcla en el lugar correspondiente. 3.2.1.2. Colocar un ladrillo 3.2.2. Fin-Repetir(fin ciclo FOR de cada hilera) 4. Fin-Repetir (fin ciclo FOR de hileras) 5. Limpiar herramientas y lugar 6. Poner un cartel que diga: El material est fresco 7. Guardar herramientas

Ya se explic en el Mdulo I, cuando empezamos a utilizar algoritmos, que una tarea puede dividirse en otras ms pequeas, por ejemplo, preparar el lugar, implica realizar tres acciones enumeradas desde el 1.1 al 1.3. Como todas comienzan con 1 y estn indentadas, se entiende que es la tarea 1 la que est compuesta por estas 3. Programacin I/Mdulo III 8

Notemos que para entender mejor cmo esta resuelto un pseudocdigo, podemos dividirlo y quitarle la mayor cantidad de lneas posibles, pero siempre realizando todas las tareas. De esta forma, crearemos un pseudocdigo por cada una de las tareas que habamos encontrado en la resolucin. As la nueva representacin de la solucin quedara de la siguiente forma:

Pseudocdigo principal 1. Preparar el lugar 2. Realizar Clculos 3. Repetir desde i = 1 a iCantHileras: (inicio ciclo FOR de hileras) 3.1. Preparar mezcla para una hilera 3.2. Construir hilera 4. Fin-Repetir (fin ciclo FOR de hileras) 5. Limpiar herramientas y lugar 6. Poner un cartel que diga: El material est fresco 7. Guardar herramientas

Noten que ahora, solo expresamos el encabezado de las tareas, clarificando la lectura del pseudocodigo y de la resolucin del problema.

Pseudocdigo: preparar el lugar

1. limpiar el lugar. 2. alisar el lugar. 3. mojar el lugar. Vemos como generamos un algoritmo para la tarea Preparar el lugar, detallando los pasos a seguir para cumplirla. No caben duda que la tarea Limpiar el lugar, es ms simple que Preparar el lugar, la cul es compuesta y ms

Pseudocdigo: realizar clculos

1. Almacenar en iCantLadrillosxHilera el resultado de: LARGO_ESPERADO \ LARGO_LADRILLO 2. Almacenar en iCantHileras el resultado de: ALTO_ESPERADO \ (ALTO_LADRILLO + ALTO_MEZCLA)

Pseudocdigo: preparar mezcla para una hilera

1. 2. 2.1. 2.2. 2.3. 2.4. 2.5. 3.

Tomar balde vaco Repetir Agregar Cal Agregar Arena Agregar Agua Agregar Cemento Mezclar Mientras que la consistencia no sea la adecuada

Programacin I/Mdulo III

Pseudocdigo Construir Hilera

1. Repetir desde j=1 hasta iCantLadrillosxHilera: (inicio ciclo FOR de cada hilera) 1.1. Poner mezcla en el lugar correspondiente. 1.2. Colocar un ladrillo 2. Fin-Repetir(fin ciclo FOR de cada hilera)

La solucin que proponemos no es ni ms ni menos que el desarrollo mediante pseudocdigo de la descripcin del proceso indicado en la consigna.

Actividad
Realizar el algoritmo modularizado en pseudocdigo del siguiente problema:

El Instituto Hidrogrfico de la provincia necesita saber, de las ltimas cuatro semanas, la cantidad de lluvia cada en todo el perodo, ms el porcentaje de das sin lluvias en las cuatro semanas y el promedio semanal y total de precipitaciones (en milmetros). Se le pedir a un usuario que ingrese da por da la cantidad total de precipitaciones (en milmetros). Consejo: Pueden comenzar a analizar este ejercicio buscando los datos de entrada, los datos de salida y que procedimientos podran separarse del resto. Una vez planteada la estrategia, realicen el algoritmo del procedimiento principal y todos los mdulos.

Enve los resultados al tutor para la correccin del anlisis.

Programacin I/Mdulo III

10

Procedimientos y funciones
Definicin
Acabamos de aprender a dividir un programa en tareas, y a su vez dividir esas tareas en pasos o subtareas. Lo que estamos haciendo es generar los diferentes procesos por los cuales debemos pasar para solucionar el problema general. Anlogamente a la palabra procesos, para modularizar los programas, utilizaremos dos tipos diferentes de rutinas: los procedimientos y las funciones. La diferencia entre un procedimiento y una funcin pasa ms por lo conceptual que por su estructura. Entonces, conceptualmente, un procedimiento es utilizado cuando se quieren procesar ciertos datos, pudiendo modificar el contenido de diferentes variables en el proceso, y devolviendo todos estos cambios en los contenidos al programa principal, o desde dnde haya sido llamado. Una funcin, en cambio, es pensada para resolver algo en particular y que nos devuelva un nico resultado.

Declaracin
La declaracin de un procedimiento o funcin en C/C++ est compuesta por las siguientes partes:

Tipo_de_dato Nombre (tipo Param1, tipo Param2,., tipo Paramn)


Todo procedimiento o funcin tiene un nombre con el cual lo/a invocaremos desde dentro del programa. En C/C++, existe un tipo que no se corresponde con uno de los que definimos anteriormente. Se llama void (sin tipo, vaco) y es el utilizado para declarar los procedimientos, en cambio, las funciones utilizan los tipos de datos definidos en los mdulos anteriores, como int, float, string, etc. Como ven, declarar una funcin o un procedimiento es similar a la declaracin de variables, exceptuando por esta tercer parte, representada en rojo en el ejemplo: Los parmetros.

Actividad
1. Escribir 5 ejemplos de procedimientos y 5 de funciones. 2. Intercambiar lo escrito en el punto 1 con algn compaero/a, verificando que ste clasifique tus 10 del mismo modo en que vos lo hiciste. 3. Discutir entre uds. sobre los resultados obtenidos.

Programacin I/Mdulo III

11

Introduccin a los parmetros


Los parmetros son utilizados para transferir informacin desde el programa principal a una rutina o entre rutinas. Un parmetro cumple con el mismo objetivo que una variable: guardar datos o informacin durante un tiempo dentro del programa o las rutinas. Al ser variable, es necesario indicar qu tipo de dato contiene (int, float, etc.) Como vemos en el ejemplo de declaracin de una rutina, stas pueden recibir n parmetros, separados por comas (,) e indicando en cada uno de ellos el tipo de dato que contiene y el nombre de la variable. Conceptualmente, es posible separar los parmetros en dos tipos: Los de Entrada y los de Salida. Los parmetros de entrada son aquellos cuyos valores deben ser proporcionados por el programa principal y los parmetros de salida son aquellos cuyos valores se calcularn en la rutina y se deben devolver al programa principal para su proceso posterior.

Lista de parmetros actuales y formales


Las llamadas a rutinas constan de dos partes: un nombre de rutina y una lista de parmetros llamados actuales.

NombreRutina (pa1, pa2, pa3, ...);

Los parmetros actuales pa1, pa2, pa3... tienen que tener valores que se pasan al procedimiento NombreRutina. En la declaracin de una rutina, cuando se incluyen parmetros, stos se denominan parmetros formales o ficticios (pf1, pf2...). Ellos sirven para contener los valores de los parmetros actuales cuando se invoca el procedimiento.

void NombreRutina (tipo pf1, tipo pf2, tipo pf3, ...);

El valor de los parmetros actuales no se conoce cuando se declara la rutina; sin embargo, cuando se ejecuta la sentencia de llamada a la rutina es preciso que tengan valores asignados, ya que en caso contrario se producir un error.

Programacin I/Mdulo III

12

Correspondencia de parmetros
Los parmetros actuales en la invocacin de la rutina debe coincidir en nmero, orden y tipo con los parmetros ficticios de la declaracin del procedimiento. Es decir, debe existir una correspondencia entre parmetros actuales y ficticios.

Parmetros por valor y por direccin


Los parmetros por valor son unidireccionales y se utilizan para proporcionar informacin a una rutina pero no pueden devolver valores. En C/C++, si el signo & no aparece delante del parmetro formal en la rutina, la computadora supone que el parmetro formal es por valor. En la llamada a la rutina, el valor del parmetro actual se pasa a la variable que represente el parmetro actual. Este valor puede ser modificado dentro del programa, pero su valor no se puede devolver al programa o a la rutina que lo llama.

Parmetros por direccin


En la declaracin de una rutina, los nombres de los parmetros por direccin estn precedidos por el signo &. Los parmetros por direccin se utilizan tanto para recibir como para transmitir valores entre la rutina y el programa desde la cul. Entonces, un parmetro por direccin puede actuar de parmetro de salida o de entrada/salida.

Reglas sobre parmetros


Algunas reglas a tener en cuenta para utilizar uno u otro tipo de parmetro son: Si la informacin que se pasa a la rutina no tiene que ser devuelta fuera de la rutina, el parmetro formal que representa la informacin puede ser un parmetro por valor (parmetro de entrada). Si se tiene que devolver informacin al programa llamador, el parmetro formal que representa esa informacin debe ser un parmetro por direccin (parmetro de salida). Si la informacin que se pasa a la rutina puede ser modificada y se devuelve un nuevo valor, el parmetro formal que representa a esa informacin deber ser un parmetro por direccin (parmetro de entrada/salida).

Ejemplos
Pongamos como primer ejemplo un procedimiento que le daremos como datos de entrada, la fecha de nacimiento de una persona y la edad mnima para votar en el pas. Este procedimiento nos indicara, a travs de dos parmetros de salida, la edad de la persona y si es apto o no para votar. Cul es el tipo de dato que se utilizar para declarar un procedimiento? Programacin I/Mdulo III 13

Recordamos que el tipo de dato para declarar un procedimiento es conocido como void y en C/C++ debe escribirse en minsculas. Este es el encabezado del procedimiento. void EsApto (int iDia, int iMes, int iAo, int iEdadMin, int &iEdad, bool &bPuedeVotar ) Noten que los parmetros de Salida en este caso indican que estos parmetros van a devolver un valor al programa principal o la rutina desde donde utilizamos el procedimiento EsApto.

La llamada a este procedimiento requiere de 6 parmetros. Es importante notar que los primeros 4 son por valor, de modo que podemos enviarle los datos a travs de una variable o bien con datos explcitos, por ejemplo:
Con formato: Fuente: 10 pt

Pseudocdigo Principal:

. .. . ..

EsApto(14,08,1978, EDAD_MINIMA, iEdadReal, bPuede) . .. . .. . .. . ..

En este ejemplo las variables iEdadReal y bPude fueron previamente declaradas y en el momento de la llamada puede que tengan o no un valor asignado, lo cual no es importante ya que ambas variables actan como parmetro de salida, es decir que cuando se termine de ejecutar el procedimiento, estas variables contendrn los datos asignados a los parmetros formales iEdad y bPuedeVotar dentro del procedimiento. EDAD_MINIMA es una constante. Otro ejemplo vlido es utilizando variables que ya contienen datos:

Pseudocdigo Principal:

. .. . ..

EsApto(iDia,iMes,iAnio, EDAD_MINIMA, iEdadReal, bPuede) . .. . .. . .. . ..

Programacin I/Mdulo III

14

Este otro ejemplo nos muestra cmo utilizar variables para la llamada del procedimiento. Es importante volver a aclarar que el parmetro iDia de la llamada es una variable diferente al declarado en el encabezado de la funcin. Uno es el parmetro actual y otro el formal (ver explicacin detallada anteriormente en este mdulo) El diagrama de la llamada al procedimiento se representa de este modo:

Las lneas oblicuas a los costados indican que es una llamada a un procedimiento

Si nos envan una fecha de nacimiento, deberamos validarla Verdad? Para esto podramos realizar una funcin, como habamos indicado anteriormente en un ejemplo y cuyo encabezado sera el siguiente: bool FechaValida(int iDia, int iMes, int iAo)

Recuerden que, al ser una funcin, no debe tener parmetros de salida, ya que el resultado se devuelve desde la misma. En este caso, la funcin debera devolver TRUE si la fecha enviada por parmetros es vlida y FALSE en caso de que no lo sea. Veamos este ejemplo para hacer la llamada a la funcin:
Con formato: Fuente: 10 pt

/*Declaracin de Variables*/ bool bValida;

Pseudocdigo Principal:

. .. . .. bValida . .. . .. . .. . ..

FechaValida(iDia, iMes, iAnio)

Programacin I/Mdulo III

15

Como la funcin devuelve un valor de tipo bool, es correcto asignarle el resultado de la funcin a una variable del mismo tipo. El diagrama de esta asignacin es as,

Al ser un valor lgico, tambin puede utilizarse directamente como condicin lgica, por ejemplo:
Con formato: Fuente: 10 pt

/*Declaracin de Variables*/ bool bValida;

Pseudocdigo Principal:

. .. . ..

Si FechaValida(iDia, iMes, iAnio) Entonces . .. . .. Sino . .. . .. Fin-Si

Programacin I/Mdulo III

16

El diagrama de este segundo ejemplo se representara de la siguiente forma.

Diagrama modularizado 1
Enunciado Se leen 30 valores enteros (comprendidos entre 5 y 40) que representan la temperatura mxima de cada de unos de los das de un mes, se pide hallar e informar: La temperatura mxima del mes y el da que se produjo (se supone nico). Cuantos das la temperatura super los 25. El promedio de las temperaturas mximas del mes.

Hagamos primero un pequeo anlisis de qu es lo que debemos hacer para realizar este problema. Datos de entrada Temperatura mxima (valor entero) de un da. La ingresarn 30 veces (una por cada da del mes). La temperatura no puede estar por debajo de 5 y por encima de 40 (datos importantes para validar.

Datos de salida Temperatura mxima del mes. Que da se produjo la temperatura mxima del mes. Cantidad de das que la temperatura supero los 25. El promedio de las temperaturas mximas del mes (es decir, de todas las temperaturas que nos ingresen.

Al necesitar buscar un mximo, debo inicializar alguna variable con un nmero muy chico, para que el primer dato que me ingresen pase a ser el mximo. Empecemos por hacer la declaracin de las variables. /*Declaracin de constantes*/ const const const const int int int int CANT_DIAS = 30; MINIMA = 5; MAXIMA = 40; LIMITE = 25; //Por la cantidad de das del mes. Es el divisor para el promedio. //Estos datos son los indicados para realizar la validacin //constante para buscar los valores que la superen segn enunciado 17

Programacin I/Mdulo III

/*Declaracin de variables */ int int int int int int iTemp; iTempMax; iDiaMax; iCantDiasSupero; iSumaTemp; i; //Para guardar la temperatura ingresada por el usuario. //Para guardar la temperatura mxima del mes. //Para guardar el da dnde se registro la mxima del mes. //Para guardar la cant de dias que supero la temp. Lmite. //Suma las temperaturas para el clculo del promedio //Para ciclo repetitivo exacto.

El diagrama sin modularizar quedara de este modo:

iTempMax

-9999

iCantDiasSupero

iSumaTemp S

Ingrese la temperatura mxima del da, i E iTemp ! ( (iTemp>=MINIMA) y (iTemp<=MAXIMA) ) iTemp > iTempMax Si i = 1..CANT_DIAS; i++ iTempMax iTemp No

iDiaMax

i iTemp > LIMITE

Si iCantDiasSupero iCantDiasSupero + 1

No

iSumaTemp S

iSumaTemp + iTemp

La temp. mxima fue de, iTempMax , y sucedi el da nro: , iDiaMax S Una cantidad de , iCantDiasSupero ,das la temperatura super , LIMITE S El promedio de temperaturas fue de , iSumaTemp/CANT_DIAS

Este ejemplo permite realizar varios procedimientos y, por ejemplo, una funcin. Vamos a ir deduciendo cuales son los usos ms comunes de los procedimientos. Programacin I/Mdulo III 18

Las primeras sentencias se refieren a la inicializacin de las variables. Es de uso habitual realizar todas las inicializaciones en un mdulo aparte. Por otra parte, cada vez que ingresa al ciclo, pide el ingreso de los datos. Esto tambin podra separarse en un procedimiento de ingreso de datos. Los otros dos procedimientos pueden ser los que procesan la informacin de iTemp, para cumplir con los dos primeros objetivos del enunciado. Finalmente, podramos realizar una funcin para el promedio y un procedimiento final para las salidas. Si furamos a utilizar estos mdulos que nombramos, el diagrama principal quedara de este modo:

Cada subdiagrama, debe ir con el encabezado y las variables que se utilizan en l:

Programacin I/Mdulo III

19

Programacin I/Mdulo III

20

Tipos de Datos. Estructuras


Definicin
En C/C++ existan tipos de datos predefinidos por el lenguaje, los cuales ya hemos estado utilizando a lo largo de los ejercicios propuestos desde el mdulo 2. Tipos numricos como los int o los float, tipos de texto como los char o los string. Un nuevo concepto que estamos introduciendo en este mdulo, es la posibilidad que algunos lenguajes le dan al programador de declarar sus propios tipos de datos. El ejemplo ms claro para explicar la utilizacin de tipos de datos definidos por el usuario, son las estructuras. Una estructura es una forma de agrupar variables. Las variables que componen una estructura pueden ser de cualquier tipo de dato. Las estructuras se utilizan, generalmente, para agrupar variables que corresponden a un mismo concepto, por ejemplo, todos los datos de un alumno, todos las caractersticas de un auto, etc.

Declaracin
La forma de declarar una estructura en C/C++ para definir las caractersticas de un vehculo es la siguiente: /*Declaracin de tipos*/ typedef struct DatosAuto { string sMarca; string sTipo int iModelo; int iCantPuertas; int iNroChasis; string sPatente; bool bAireAcondicionado; bool bFrenosABS; bool bLevantaVidriosAuto; };

typedef: indica que vamos a declarar un tipo de datos nuevo. struct: aclara que el nuevo tipo de datos sera una estructura, compuesta por variables. DatosAuto: Es el Nombre de la estructura. Es el nexo entre todas las variables que la componen. 21

Programacin I/Mdulo III

Como podemos ver en el ejemplo, hemos declarado un tipo nuevo basado en una estructura con variables de diferentes tipos. Todas estas variables tienen en comn ser caractersticas de una Auto, es por eso que, conceptualmente, es lgico querer tenerlas unidas y no declaradas por separado. Para utilizar una de las variables dentro de la estructura, debemos declarar una variable de tipo DatosAuto e indicar, dentro del programa, el nombre de las dos variables la general y la particular unidas por un punto. /*Declaracin de variables*/ DatosAuto Auto; //declaro una variable Auto del tipo DatosAuto (el tipo definido por mi) Por ejemplo, si quisiera utilizar en el programa la variable iModelo para asignarle un valor, debera 2005 utilizarla del siguiente modo: Auto.iModelo

Actividades
1. Realiza la definicin de constantes, tipos y variables del siguiente enunciado:

Una casa de venta y remate de antigedades desea una evaluacin del ltimo remate realizado. Conociendo de c/u de las 100 piezas rematadas las siguientes caractersticas:

Cod. De pieza Precio Base Importe pagado Cdigo de comprador

2 Dgitos (0..99) real real P =Particular E =Empresa

Autoevaluacin
Completar Verdadero o Falso. Justificar.

1. Modular es elegir los correctos ciclos repetitivos para tener el diagrama bien separado y legible. 2. Una funcin no debe recibir parmetros de salida 3. Un parmetro de entrada puede ser tambin de entrada/salida 4. Los procedimientos y las funciones no pueden convivir en un mismo programa. 5. La metodologa TOP-DOWN indica que la forma correcta de modularizar es realizando un refinamiento sucesivo.

Indicar cul de las siguientes llamadas son correctas para este procedimiento: void NombreProcedimiento(char Letra, int &Num, float fNum)

1. NombreProcedimiento(A, iContador, 4+5) 2. NombreProcedimiento(cLetra, 8, fPromedio) 3. NombreProcedimiento(cLetra, iContador, fPromedio) Programacin I/Mdulo III 22

Cuadro de resultados

Nro

VF

Justificacin

b-1

b-2

b-3

Programacin I/Mdulo III

23

Sntesis
En este mdulo se ha explicado la importancia de la modularizacin. Se han introducido los conceptos de Procedimiento y Funcin y como utilizar los parmetros. Hemos realizado ejemplos variados sobre la utilizacin de las rutinas para que los alumnos puedan generar diagramas de problemas de mediana complejidad, sentando las bases para abarcar problemas ms complejos en las prximas unidades. A lo largo del material se han encontrado con diferentes ejercicios prcticos basados en los temas explicados, de manera de poder llevar un autocontrol de los conocimientos y permitir al tutor llevar estadsticas del curso. A travs de la instruccin typedef de C/C++, hemos mostrado como generar tipos de datos propios, creando estructuras de datos asociados. Por ltimo, se le propuso al alumno completar una autoevaluacin, que le dar la pauta de la necesidad de acentuar el estudio sobre ciertos temas.

Programacin I/Mdulo III

24

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