Professional Documents
Culture Documents
UC
Unidad 5
5.1
INTRODUCCIN
5.2
Un problema se puede descomponer en pequeos problemas, que se resuelven de manera ms sencilla o de forma independiente; esto es lo que se conoce como programacin modular. Cuando se trabaja con mdulos, existir un algoritmo o programa principal o conductor, que transferir el control a los distintos mdulos o subalgoritmos, los cuales al terminar su tarea devolvern el control al programa que los invoc o llam. Los mdulos son pequeos y deben cumplir con las reglas de programacin estructurada. Las ventajas de programar de forma modular son: Varios programadores pueden trabajar simultneamente en la confeccin del programa principal, cada uno resolviendo una parte. Se podr modifica un mdulo sin afectar al resto. Un mdulo puede ser llamado desde diversas partes del algoritmo principal las veces que sean necesario.
5.3
FUNCIONES
Una funcin es un programa modular que recibe uno o varios parmetros o argumentos, y devuelve un resultado con el nombre de la funcin. Para invocar o llamar a una funcin se usa su 24
Elaborado por: Lucia Martino M. (rev_2_2011)
nombre seguido entre parntesis del argumento o argumentos. La funcin se puede escribir en cualquier instruccin en donde se necesite. Por ejemplo: Escribir (raz2 (16)) Escribir (g(p1,p2,p3)) Funcin raz2, parmetro 16 Funcin g(), parmetros p1,p2,p3
Cada lenguaje posee funciones propias como las funciones sin (u), cos(u), entre otros.
Las funciones tienen una constitucin similar a la del algoritmo (es que son pequeos algoritmos) por lo que tienen una cabecera y un cuerpo. En la cabecera se define la funcin, en el cuerpo estarn el bloque de declaraciones y el bloque de instrucciones, en este ltimo se debe incluir la instruccin devolver que devuelve el valor, luego del proceso (respuesta), al algoritmo que lo llam. Para que una funcin sea ejecutada, sta debe ser llamada y se le deben proporcionar los parmetros necesarios para procesar las instrucciones. En la definicin de funcin deben figurar una serie de parmetros, denominados parmetros formales, y en la llamada a la funcin se establece una correspondencia uno a uno, y de izquierda a derecha entre los parmetros actuales (o de llamada) y los formales, separados entre ellos por punto y coma ;. El cuerpo de la funcin se define como sigue:
<Tipo_de_dato> funcin <nombre_funcin> (lista_de_parmetros_formales) [Declaraciones_locales] Inicio Instruccin (es) Devolver (<expresin>) Fin_funcin
La lista_parmetros_formales, estar formada por una lista o sublistas de parmetros de la siguiente forma: 25
Elaborado por: Lucia Martino M. (rev_2_2011)
Las llaves representan la seleccin de una entre las distintas opciones que aparecen separadas por barra. En las funciones esta opcin por lo general es E. El tipo de dato es estndar o definido por el programador, se puede separar cada tipo de parmetros por punto y coma (;).
5.4
PROCEDIMIENTOS
Es un subalgoritmo que realiza una tarea especfica, y puede ser definido con cero (0), uno (1) o N parmetros. La entrada y salida de informacin en un procedimiento se realiza a travs de parmetros. El nombre del procedimiento no esta asociado al resultado que obtiene; se invoca a travs de la instruccin llamar_a o directamente por el nombre asignado, es decir:
Esta declaracin es similar al de la funcin, la principal diferencia es que el nombre del procedimiento no esta asociado al resultado. La declaracin en pseudocdigo es:
26
Elaborado por: Lucia Martino M. (rev_2_2011)
La lista_de_parmetros_formales, estar formada por una o varias sublistas de parmetros con el siguiente formato: {E | S | E/S} <tipo_de_dato> : <nombre_del _parmetro_formal_1> ...
5.5
Los procedimientos y funciones se escriben al final de los algoritmos para no entorpecer su escritura y lectura al realizar la corrida en fro, como sigue:
< nombre_de_constante n > = valor n var < tipo_de_variable 1 > = < nombre_de_variable 1 >,,< nombre_de_variable m >
. . .
< tipo_de_variable n > = < nombre_de_variable 1 >,,< nombre_de_variable m > Inicio Instruccin (es) Llamar_a <nombre_procedimiento> [lista_de_parmetros_actuales] //la llamada a la funcin ha de realizarse en una expresin Nombre_variable = <nombre_funcin> (lista_de_parmetros) Instruccin (es) Escribir <resultado (s)> Fin
<Tipo_de_dato> funcin <nombre_funcin> [(lista_de_parmetros_formales)] [Declaraciones_locales] Inicio Instruccin (es) Devolver (<expresin>) Fin_funcin
5.6
PASO DE PARMETROS
Cuando un algoritmo llama a un procedimiento o funcin se establece una correspondencia directa entre los parmetros actuales y los formales. Existen dos formas para realizar esta correspondencia.
1._ Posicional El nmero de parmetros actuales y formales debe ser del mismo tipo, igual numero y estar ubicados en la misma posicin, s son de mas de un tipo hay que definirlo.
Un solo tipo: (E <tipo_de_dato> : <nombre_1_del _parmetro_formal> ...) Mas de un tipo: (E <tipo_de_dato 1> : <nombre_1_del _parmetro_formal>; E <tipo_de_dato 2> : <nombre_2_del _parmetro_formal> ...)
2._ Correspondencia por el nombre explcito En ellos se indica explcitamente la correspondencia entre los parmetros reales y funcionales. 28
Elaborado por: Lucia Martino M. (rev_2_2011)
datos/informacin desde el programa que lo invoca o llama al subprograma. Parmetros de salida S Parmetros de entrada/salida E/S Slo devuelven resultados. Funcionan enviando datos y devolviendo resultados.
En donde: <nombre_1_del_parmetro_formal> es parmetro de entrada y va a proporcionar datos al subprograma. <nombre_2_del_parmetro_formal> es parmetro de salida y devolver resultados al programa principal. Aunque ambos parmetros son del mismo tipo, <tipo_de_dato 1>, se deben de escribir para cada caso sea de entrada o salida. Estas caractersticas afectarn tanto a procedimientos como a funciones. Por estas circunstancias una funcin va a tener la posibilidad de devolver valores al programa principal de dos formas:
Para un procedimiento slo podr devolver resultados a travs de los parmetros, esto quiere decir, que al escribir el algoritmo se debe tener cuidado con el paso de parmetros, sobre todo al transcribir al lenguaje de mquina. Los lenguajes suelen disponer de:
29
Elaborado por: Lucia Martino M. (rev_2_2011)
Los parmetros formales reciben tal cual los valores de los parmetros actuales, por lo que los cambios que se produzcan en ellos, por efecto del subprograma, no podr afectar a los parmetros actuales y no se devolver informacin al programa llamador. Los parmetros resultaran de entrada, E.
Al finalizar la ejecucin del subprograma los valores de los parmetros formales se transfieren a los parmetros actuales.
Lo que se pasa al procedimiento es la direccin de memoria del parmetro actual. De esta forma una variable es compartida, es decir, se puede modificar directamente en el subprograma; entonces los parmetros son de entrada/salida, E/S.
5.7
En un algoritmo una variable es global cuando el mbito en el que dicha variable se conoce es el programa principal, y local cuando se declara dentro de un procedimiento o funcin. Recordando que cuando se declara en un procedimiento o funcin toma el tipo de declaracin interna sin importar el que esta en el programa principal.
5.8
Para intercambiar el contenido de dos variables se necesita una variable auxiliar, del mismo tipo de las otras dos. Se pasan como parmetros de entrada las dos variables cuyo valor se desea intercambiar, las mismas son de entrada/salida por que se modifican en el subprograma.
30
Elaborado por: Lucia Martino M. (rev_2_2011)
Procedimiento intercambio (E/S entero : a,b) var entero : aux inicio aux = a a=b b= aux fin_procedimiento // guardo el valor de a en aux // asigno el valor de b a a // asigno el valor de aux(que en realidad es a) a b //variable local
Este mismo ejemplo se puede realizar genrico para variables de otro tipo, por lo que en la cabecera del programa principal se declara un nuevo tipo de variable,
Procedimiento intercambio (E/S tipo_datos : a,b) var tipo_datos : aux //variable local
La serie Fibonacci se define como: Fibonaccin = Fibonaccin-1 + Fibonaccin-2 Fibonaccin = 1 Fibonaccin = 1 para todo n>2 para n=2 para n=1 31
Elaborado por: Lucia Martino M. (rev_2_2011)
Como es repetitivo se usar un ciclo para manejar esta serie, que se iniciar desde 3 hasta n, ya que para n =2 y n=1 el valor es constante. En el ciclo cada intercambio de valores se utilizarn dos variables ltimo y penltimo. A la funcin le entra una variable entera y saldr una entera tambin.
Entero Funcin Fibonacci (E entero : n) var entero : i, ltimo, penltimo, suma inicio suma = 1 ltimo = 1 penltimo = 1 desde i = 3 hasta n penltimo = ltimo ltimo = penltimo suma = ltimo + penltimo fin_desde devolver (suma) fin_funcin // inicio el acumulador // inicio de la variable // inicio de la variable
3._ Disear un procedimiento que convierta coordenadas polares (radio,ngulo) a cartesianas (x,y). x = radio * cos (ngulo) y = radio * sin (ngulo)
Diseo del algoritmo Procedimiento Polares (E real : ngulo, radio; S real : x, y) inicio 32
Elaborado por: Lucia Martino M. (rev_2_2011)
4._ Disee una funcin que permita calcular el factorial de un nmero entero positivo.
Entero Funcin Factorial (E entero : n) var entero : i, f inicio f=1 Si n >1 entonces desde i = 2 hasta n f=f*i fin_desde fin_si devolver (f) fin_funcin // inicio el acumulador
33
Elaborado por: Lucia Martino M. (rev_2_2011)