Anda di halaman 1dari 10

Subprogramas Cuando las situaciones problemticas a resolver se tornan complejas, surge la necesidad de aplicar algn tipo de metodologa que

permita descomponer el problema en varios problemas (subproblemas) ms fciles de resolver. Problema Subproblema Subproblema ! Subproblema " #dems, si estos subproblemas siguen siendo complejos, puede ser conveniente, volver a subdividirlos en subproblemas ms sencillos. #s pues, el subproblema se puede subdividir en otros subproblemas$ Subproblema Subproblema Subproblema Subproblema . .! ." .%

& as, continuar subdividiendo, en caso de que fuese necesario. Por ejemplo, el subproblema . , podra descomponerse en nuevos fragmentos o m'dulos, ms simples$ Subproblema . . Subproblema . .! # este m(todo de descomposici'n modular o modulari)aci'n, se le denomina m(todo por refinamiento sucesivo. *e este modo, cada subproblema se convierte en un m'dulo, idealmente, independiente de los dems. Cada subproblema, m'dulo se resolver a trav(s de un algoritmo o subalgoritmo. +uego, para resolver el problema original, se tendr un algoritmo principal que invocar a los subalgoritmos. ,tras ventajas que se obtienen al trabajar con este m(todo, son$ - Se logra ma.or entendimiento de los algoritmos - +a detecci'n . correcci'n de errores es ms simple, pues generalmente no es necesario revisar todo el algoritmo, s'lo basta con revisar el m'dulo que presenta el error - +os subalgoritmos se especiali)an en resolver un determinado problema sin importarles c'mo funcionan los dems m'dulos - Permite la reutili)aci'n del subalgoritmo las veces que sea necesario - Posibilita que varias personas trabajen en paralelo en la resoluci'n de un problema complejo /eremos que e0isten dos tipos de subalgoritmos$ - funciones - procedimientos o subrutinas 1anto los procedimientos o subrutinas como las funciones son unidades dise2adas para ejecutar una tarea especfica. 3esumidamente podemos decir que las funciones, normalmente, devuelven un s'lo valor al algoritmo principal que las referencia (algoritmo que invoca a la funci'n). +os procedimientos o subrutinas pueden devolver cero, uno o varios valores. 4n el caso de no devolver valor alguno, reali)a alguna tarea del tipo operaci'n de entrada .5o salida. 1

# un procedimiento o subrutina no se le puede asignar valor, . por consiguiente ningn tipo de dato est asociado con el nombre del procedimiento o subrutina. 6na funci'n se referencia utili)ando su nombre en una e0presi'n, mientras que un procedimiento o subrutina se referencia por su llamada o invocaci'n al mismo. 1) Funciones +as funciones tienen su origen ligado al concepto matemtico de funci'n de una o ms variables. #lgunos ejemplos .a conocidos de este tipo de subalgoritmos son las llamadas funciones internas (resto, abs, log, etc.). Pero tambi(n, es posible crear nuevas funciones, segn las necesidades. +as funciones pueden usarse en e0presiones algortmicas como si se tratara de variables. ,tros ejemplos de funciones matemticas$ f(0) 7 0! 8 90 : g(0,.) 7 0" 8 ;. <(0,.,)) 7 "0 8 !. - ) *onde x, y, z son los parmetros formales o ficticios, es decir, aquellos que permiten e0presar la le. o =forma> de la funci'n. +as funciones pueden tener uno o ms parmetros formales (datos) pero siempre devuelven un nico resultado. +as funciones se evalan utili)ando parmetros actuales o reales, es decir, los valores con los cuales se quiere evaluar la funci'n$ f(2) g(-1,5) <(2,0,7) 6na funci'n es un objeto que tiene un nombre . un tipo de dato, . devuelve un valor nico. 4l tipo de dato est asociado al valor que retorna la funci'n cuando se evala para un conjunto de valores de sus argumentos. Para poder trabajar con una funci'n, veremos que es necesario primero definirla, . una ve) definida, luego reci(n podr usarse, invocndola. Definicin de una funcin 6na funci'n se define indicando$ 1ipo de dato ?uncion nombre (lista de parmetros formales) declaraci'n de variables @nicio acciones nombre valor de la funci'n ?in funcion - 1ipo de dato$ indica el tipo de dato que devuelve la funci'n - +ista de parmetros formales$ contiene las variables que pasan alguna informaci'n necesaria para que la funci'n ejecute el conjunto de acciones. - *eclaraci'n de variables$ se deben declarar los parmetros formales . tambi(n aquellas variables que se usarn en la funci'n. # este tipo de variables, se las denomina variables locales. - Cuerpo de la funci'n$ constitu.e el conjunto de acciones a reali)ar por la funci'n. - 3etornar el resultado$ el nico resultado que devuelve la funci'n debe asignarse a una variable cu.o nombre coincide con el nombre de la funci'n. ,tra forma utili)ada en algunos 2

lenguajes es escribir una variable o e0presi'n entre par(ntesis al lado de la palabra clave de ol er o retornar. Cuando se ejecuta esta acci'n se retorna el control de ejecuci'n al lugar donde se <a invocado la funci'n. Invocacin de una funcin 6na funci'n puede ser invocada, llamada, de la siguiente manera$ nombreAfunci'n (lista de parmetros actuales) +a lista de parmetros actuales debe corresponder en tipo, orden . cantidad, con la lista de parmetros formales definidos en la funci'n. Como .a <emos mencionado, sirve para pasar informaci'n a la funci'n desde la unidad de programa que se la invoca. 40isten distintas formas de invocar a una funci'n$ - *esde una asignaci'n$ variable nombreAfunci'n (lista de parmetros actuales) variable !B"8nombreAfunci'n (lista de parmetros actuales) - *esde un escribir$ escribir (=AAAAAAAAAAAA>, nombreAfunci'n (lista de parmetros actuales)) - *esde una condici'n$ si (variable C nombreAfunci'n (lista de parmetros actuales)) entonces D finAsi mientras (variable EC nombreAfunci'n (lista de parmetros actuales)) D finAmientras 6na llamada a la funci'n implica los siguientes pasos$ - # cada parmetro formal se le asigna el valor real de su correspondiente parmetro actual. - Se ejecuta el cuerpo de acciones de la funci'n. - Se devuelve el valor resultante de la funci'n, al punto de llamada. /eamos un par de ejemplos, contemplando tanto la definici'n como la invocaci'n. a) Supongamos que queremos definir la funci'n f(0) 7 0 ! 8 90 : , . luego evaluar la misma para un valor cualquiera de F. Como primer paso definimos la funci'n$ real funcion ?(F) real F @nicio ?FBF8!BF: ?in funcion Como segundo paso, invocamos a la funci'n desde el algoritmo principal$ #lgoritmo 4G4HP+,A# real I 55? @nicio escribir (J@ngresar un valor numericoK) leer (I) escribir (J4l resultado es$ J, ?(I) ?in 3

b) Supongamos que nuestro pseudoc'digo no dispone de un operador que permite <acer una potencia. +uego, vamos a definir una funci'n, que permita calcular 0 n, siendo n, un nmero entero. & luego, queremos que desde un algoritmo principal, se solicite un par de valores para calcular la potencia. Como primer paso definimos la funci'n$ real funcion P,14LC@# (F, L) entero L, @ real F, & @nicio & para @ , abs(L) &&BF finApara si (L E M) entonces & 5& finAsi P,14LC@# & ?in funcion Como segundo paso, invocamos a la funci'n desde el algoritmo principal$ #lgoritmo 4G4HP+,AN entero N#S4, 4FP real 34S 55P,14LC@# @nicio escribir (J@ngresar el valor de la baseK) leer (N#S4) escribir (J@ngresar el valor del e0ponenteK) leer (4FP) 34S P,14LC@#(N#S4, 4FP) escribir (J4l resultado es$ J, 34S) ?in

2) Subrutinas o procedimientos 6n procedimiento o subrutina est compuesto por un grupo de sentencias a las que se le asigna un nombre (identificador) . constitu.e una unidad de programa. +a tarea asignada al procedimiento se ejecutar siempre que se encuentre el identificador en el conjunto de sentencias que definen el algoritmo. 6n procedimiento o subrutina es un subalgoritmo que toma ninguno, uno o ms valores llamados argumentos de entrada, con los cuales ejecuta tareas especficas . devuelve ninguno, uno o varios resultados al algoritmo principal en los correspondientes argumentos de salida. 6n procedimiento o subrutina tiene una construcci'n similar a los algoritmos.

Definicin de una subrutina o procedimiento +a definici'n de un procedimiento no indica a la computadora que ejecute las instrucciones dadas, sino que indica a la computadora cules son estas instrucciones . d'nde estn locali)adas cuando sea necesario ejecutarlas. Procedimiento nombre declaraci'n de variables @nicio acciones ?in Procedimiento nombre(lista de parmetros formales) declaraci'n de variables @nicio acciones ?in +a lista de parmetros formales del procedimiento sirve para pasar informaci'n al procedimiento .5o devolver informaci'n del procedimiento a la unidad de programa que lo invoca. Invocacin de una subrutina o procedimiento +os procedimientos se llaman desde un algoritmo o desde otro procedimiento, directamente por su nombre . eventualmente, con la lista de los parmetros actuales, si es que los e0ige su definici'n. 4n algunos lenguajes se le antepone al nombre del procedimiento, la palabra reservada llamar. 6na llamada a un procedimiento implica los siguientes pasos$ - # cada parmetro formal se le asigna el valor real de su correspondiente parmetro actual. - Se ejecuta el cuerpo de acciones del procedimiento. - Se regresa a la instrucci'n siguiente al punto de llamada. Transferencia de informacin a/desde procedimientos: parmetros 6n parmetro sirve para pasar informaci'n (valores a variables) desde un algoritmo principal a un procedimiento (o entre dos procedimientos). - Procedimientos sin parmetros$ no e0iste comunicaci'n entre el algoritmo principal . los procedimientos (o entre dos procedimientos). - Procedimientos con parmetros$ e0iste comunicaci'n entre el algoritmo principal . los procedimientos (o entre dos procedimientos). +os parmetros pueden ser de entrada, de salida o de entrada5salida. +os parmetros de entrada determinan sus valores en el algoritmo principal (llamador). +os parmetros de salida determinan sus valores en el procedimiento . se devuelven al algoritmo principal (llamador) para su proceso. +os parmetros de entrada5salida determinan sus valores en el algoritmo principal (llamador), . a su ve), son modificados en el procedimiento . se devuelven al algoritmo principal (llamador) para su proceso. Lormalmente, se suele indicar en la lista de parmetros formales, de qu( clase son cada uno, anteponi(ndole a los parmetros, las letras 4$, S$ o 45S$, segn corresponda. +os parmetros actuales pueden ser constantes, variables, e0presiones, valores de funciones o en un caso ms complejo, nombres de funciones o procedimientos. 4n cambio, los parmetros formales s'lo pueden ser variables. Parmetros por valor o por referencia 5

4l pasaje de valores puede ser por valor o por referencia. - Paso por valor$ los valores iniciales se proporcionan copiando los valores correspondientes en la lista de parmetros actuales. - Paso por referencia$ se produce el paso de la direcci'n del parmetro actual. 4n realidad, se pasa la posici'n de memoria. 6na variable pasada por referencia puede ser modificada dentro del subalgoritmo . producir un efecto en el algoritmo de llamada. #lgoritmo P#S#G4 entero #, N @nicio #M NM escribir (#,N) C#HN@#(#,N) escribir (#,N) ?in Procedimiento C#HN@# (4$ F, S$ &) entero F, & @nicio escribir (F, &) F & escribir (F, &) ?in procedimiento OPu( pasa en la memoriaQ

Antes de invocar al procedimiento: A=0 B=0


#l comen)ar el procedimiento$ #7M N7&7M F7M #l finali)ar el procedimiento$ #7M N7&7 F7

Al volver al algoritmo principal: A=0 B=1


+as variables que usa un subalgoritmo residen en memoria 3#H, . con ellas trabaja el procesador en la ejecuci'n del subalgoritmo. Cuando se llama a un subalgoritmo, el procesador le dispone de un sector de memoria distinto al del algoritmo llamador. Por ello el subalgoritmo tiene su propio segmento de memoria para colocar los parmetros formales . toda otra variable que necesite. +as celdas de memoria del subalgoritmo pueden ser pensadas como espacios temporales de escritura, puesto que, cuando el procesador deja el subalgoritmo, estas celdas de memoria se liberan . sus contenidos se pierden. OPu( pasa cuando en el algoritmo e0isten variables cu.os nombres coinciden con algunas del subalgoritmoQ +a respuesta es simple$ no e0iste problema. 4sto se debe a que estn en lugares de memoria distintos, en distintos mbitos. Por esta ra)'n los nombres de los parmetros formales . actuales pueden ser distintos o no. Variables locales y globales +as variables pueden clasificarse segn su utili)aci'n en$ - variables locales$ son aquellas que estn declaradas dentro del algoritmo o subalgoritmo, . son propias al mbito de la declaraci'n, en el sentido que cada una es distinta de otra variable declarada con el mismo nombre en cualquier parte del algoritmo principal u otros subalgoritmos. 6

- variables globales$ son aquellas que estn declaradas en el algoritmo o subalgoritmo . son accesibles para los subalgoritmos que de (l dependen. +a ventaja principal de utili)ar variables locales reside en el <ec<o de que permite independi)ar al subalgoritmo del algoritmo principal, la comunicaci'n entre el subalgoritmo . el algoritmo principal se reali)a a trav(s de la lista de parmetros. +a utili)aci'n efectiva del subalgoritmo s'lo requiere que el programador cono)ca el orden . el significado de cada parmetro a fin de construir la lista de parmetros actuales cuando se <ace uso del subalgoritmo (funci'n o procedimiento). +as variables globales tienen la ventaja de compartir la informaci'n de diferentes subalgoritmos sin ninguna menci'n en la lista de parmetros del subalgoritmo.

A B C

D E

F G

Variables definidas en: A B C D E F G

Accesibles desde: A,B,C,D,E,F,G B,C C D,E,F,G E,F,G F G

# continuaci'n veremos una situaci'n problemtica resuelta de ! formas$ - en un nico algoritmo - usando subalgoritmos 6n video club posee !9 cadetes para el reparto de sus alquileres. Cada cadete posee un legajo que lo identifica (valor entre . !9). Por otro lado, cada cadete cobra una comisi'n sobre las entregas que reali)a, acorde a un porcentaje que cada uno posee . que se aplica sobre el total de los importes de las entregas que reali)a. Cuando un cadete regresa de su entrega, informa su nmero de legajo . el importe del alquiler entregado. 4stos datos se ingresan de manera desordenada . no se sabe cuntas entregas se reali)an en el da. Se debe proponer un fin de datos. Se solicita reali)ar un algoritmo en pseudoc'digo que$ 7

a) @ngrese los porcentajes de los !9 cadetes. b) @ngrese la informaci'n de todas las entregas. Se deber validar que los datos ingresados sean correctos$ legajo segn los valores indicados e importe positivo. Si no son vlidos, se volvern a solicitar <asta que sean vlidos. c) 4mita un listado ordenado por legajo en forma descendente, con la cantidad total de viajes de cada cadete$ +egajo Cantidad /iajes .. ... .. ... d) @nforme a la gerencia, al final del da$ - 4l legajo del cadete que reali)' la ma.or cantidad de entregas. - +a recaudaci'n total de la jornada. - Cunto corresponde abonarle a cada cadete que reali)' entregas (no considerar los que no reali)aron entregas), segn su porcentaje de comisi'n. +egajo Porcentaje 1otal importes Comisi'n .. ... D.. D .. ... D.. D !n un "nico algoritmo# #lgoritmo /@*4, entero @, +4RH, +4R, C#L1S!9T real @HP,314, 34C#6*, P,3CS!9T, @HPS!9T caracter 34SP @nicio para @ , !9 escribir(=@ngrese U comision cadete >, @) leer(P,3CS@T) C#L1S@T M @HPS@T M finApara 34C#6* M repetir repetir escribir (=@ngrese legajo (valor entre . !9)>) leer (+4R) <asta (+4R C7 . +4R E7 !9) repetir escribir (=@ngrese importe de la entrega>) leer (@HP,314) <asta (@HP,314 C M) 34C#6* 34C#6* 8 @HP,314 C#L1S+4RT C#L1S+4RT 8 @HPS+4RT @HPS+4RT 8 @HP,314 escribir (=@ngresa otra entregaQ (S5L)>) leer (34SP) <asta (34SP 7 JLK) escribir(=+egajo Cantidad /iajes>) para @ !9, , escribir(@, C#L1S@T) finApara +4RH 8

para @ !, !9 si (C#L1S@T C C#L1S+4RH) entonces +4RH @ finAsi finApara escribir(=4l cadete de legajo$ =, +4RH, = reali)o la ma.or cantidad de entregas$ =, C#L1S+4RH) escribir(=+egajo Porcentaje 1otal importes Comisi'n>) para @ , !9 si (C#L1S@T C M) entonces escribir(@, P,3CS@T, @HPS@T, @HPS@TBP,3CS@T5 MM) finAsi finApara ?in

$sando subalgoritmos# #lgoritmo /@*4, entero +4RH, C#L1S!9T real 34C#6*, P,3CS!9T, @HPS!9T @nicio C#3R#A@L@C@#+(P,3C,C#L1,@HP) 34C#6* M C#3R#A/4L1#S(34C#6*,C#L1,@HP) +@S1# (C#L1) +4RH H#&,3(C#L1) escribir(=4l cadete de legajo$ =, +4RH, = reali)o la ma.or cantidad de entregas$ =, C#L1S+4RHT) escribir(=+a recaudaci'n total de la jornada es$ =, 34C#6*) +@S1#!(P,3C, @HP, C#L1) ?in Procedimiento C#3R#A@L@C@#+(45S$ P,3, C#L, @HP) real P,3S!9T entero @, C#LS!9T, @HPS!9T @nicio para @ , !9 escribir(=@ngrese U comision cadete >, @) leer(P,3S@T) C#LS@T M @HPS@T M finApara ?in procedimiento Procedimiento C#3R#A/4L1#S(45S$ 34C, C#L1, @HP) real @HP,314, @HPS!9T, 34C entero +4R, C#L1S!9T caracter 34SP @nicio repetir repetir

escribir (=@ngrese legajo (valor entre . !9)>) leer (+4R) <asta (+4R C7 . +4R E7 !9) repetir escribir (=@ngrese importe de la entrega>) leer (@HP,314) <asta (@HP,314 C M) 34C 34C 8 @HP,314 C#L1S+4RT C#L1S+4RT 8 @HPS+4RT @HPS+4RT 8 @HP,314 escribir (=@ngresa otra entregaQ (S5L)>) leer (34SP) <asta (34SP 7 JLK) ?in procedimiento Procedimiento +@S1# (4$ C#L1) real C#L1S!9T entero @ @nicio escribir(=+egajo Cantidad /iajes>) para @ !9, , escribir(@, C#L1S@T) finApara ?in procedimiento entero ?uncion H#&,3(C#L1) entero C#L1S!9T, @, H#&, +4R @nicio +4R para @ !, !9 si (C#L1S@T C C#L1S+4RT) entonces +4R @ finAsi finApara H#&,3 +4RH ?in funcion Procedimiento +@S1#!(4$ P,3C, @HP, C#L1) real P,3CS!9T, @HPS!9T entero C#L1S!9T, @ @nicio escribir(=+egajo Porcentaje 1otal importes para @ , !9 si (C#L1S@T C M) entonces escribir(@, P,3CS@T, @HPS@T, @HPS@TBP,3CS@T5 MM) finAsi finApara ?in procedimiento

Comisi'n>)

1!

Anda mungkin juga menyukai