Beruflich Dokumente
Kultur Dokumente
Funciones y Procedimientos
Funciones y Procedimientos
Introduccin Funciones Procedimientos Diferencias Paso de parmetros
Por valor Por referencia
Introduccin
Para resolver problemas complejos es conveniente dividir el problema en otros subproblemas ms simples (Divide y Vencers) Programacin modular: cada subproblema se resuelve con un mdulo independiente (subalgoritmo) Debe existir un algoritmo principal Ventajas
Cada subalgoritmo se identifica con un nombre y se puede llamar en cualquier momento Posibilidad de parametrizar los mdulos
Cuando un algoritmo utiliza otro mdulo se dice que activa, llama o invoca a dicho mdulo
Al mdulo que activa otro mdulo se le denomina mdulo llamador, llamante o simplemente mdulo principal Al mdulo que es invocado se le llama mdulo subordinado
Funciones Procedimientos
Tema 5. Funciones y Procedimientos 3
Introduccin
Tanto los procedimientos como las funciones se declaran despus de la declaracin de variables y antes del cuerpo principal del algoritmo Deben aparecer fsicamente antes de que se les llame desde el cuerpo principal o desde otro procedimiento o funcin La comunicacin del mdulo principal y los mdulos subordinados se debe realizar nicamente a travs de unos parmetros especificados cuando se declara el mdulo Estos parmetros constituyen la entrada (y, en el caso de los procedimientos, tambin la salida) al subalgoritmo Estos parmetros se denominan parmetros formales cuando forman parte de la declaracin del subalgoritmo y parmetros actuales o reales cuando forman parte de la invocacin al mdulo
Funciones
Tipos de funciones
Funciones predefinidas: estn incorporadas al lenguaje de programacin y pueden ser utilizadas directamente Funciones definidas por el usuario: utilizadas cuando las funciones predefinidas no permiten realizar el tipo de clculo deseado, y es el usuario el que debe implementar, mediante estructuras de control adecuadas, la tarea a realizar
El formato de declaracin de una funcin es el siguiente: FUNCION ident_func (lista de parmetros formales):tipofunc Seccin de Declaracin de variables, constantes y tipos locales a la funcin Seccin de mdulos locales a la funcin INICIO sentencias FIN_FUNC La lista de parmetros formales son la entrada a la funcin y tienen el siguiente formato: (ident_param1: tipo1;....; iden_paramN:tipoN) Cada funcin se invoca utilizando su nombre en una expresin con los parmetros actuales encerrados entre parntesis y siempre devuelve un valor que ser del tipo especificado como tipo de la funcin
Tema 5. Funciones y Procedimientos 5
ident_funcexpresion
Variables locales
ALGORITMO combinatorio. VARIABLES a,b,c:ENTERO [-------Funcin para calcular el factorial------] FUNCION factorial(N:ENTERO):ENTERO VARIABLES i, fact: ENTERO INICIO Parmetro formal fact 1 PARA i=1 HASTA N HACER fact fact * i FIN_PARA Devolucin del valor factorial fact de la funcin FIN_FUNC [--------- Mdulo principal ----------------------] INICIO REPETIR ESCIRIBIR(Introduzca a y b) LEER(a,b) Parmetros actuales HASTA (a>=b) AND (a>=0) AND (b>=0) [-----Llamada a la funcin factorial------------] c factorial(a)/(factorial(b)*factorial(a-b)) Tres llamadas a la ESCRIBIR(c) funcin factorial FIN
6
Implementar una funcin para determinar si un nmero real es menor que otro
Ejemplo
FUNCIONES ERRNEAS FUNCION erronea (a,b:real):logico a,b:real):logico INICIO SI (a<b) ENTONCES (a<b) menor Verdad FIN_SI FIN_FUNC FUNCION menor (a,b:real):logico (a,b:real):logico INICIO SI (a<b) ENTONCES (a<b) menor Verdad FIN_SI FIN_FUNC
Tema 5. Funciones y Procedimientos
FUNCIONES CORRECTAS FUNCION menor (a,b:real):logico (a,b:real):logico INICIO SI (a<b) ENTONCES (a<b) menor Verdad SINO menor Falso FIN_SI FIN_FUNC FUNCION menor (a,b:real):logico (a,b:real):logico INICIO menor (a<b) FIN_FUNC
7
v factorial(z*2) v factorial(3.0) ESCRIBIR(factorial(z)*2) ESCRIBIR(factorial(z)*2) LEER(factorial(3)) LEER(factorial(3)) LEER(factorial(z)) LEER(factorial(z)) Factorial(4) v Factorial(z) v Factorial(z) v factorial(factorial(3)) v factorial(factorial(z)/2) PARA i=1 HASTA z HACER v factorial(i) FIN_PARA
v menor(5,4) v menor(a,b) ESCRIBIR(menor) ESCRIBIR(menor) LEER(menor(4,4)) LEER(menor(4,4)) v menor(c,d) OR NOT menor(c,d) menor(c,d) menor(c,d) Menor(c,d) VERDAD Menor(c,d) v menor(menor(a,b),b) v menor(a*2,factorial(b)) PARA i=1 HASTA 5 HACER SI menor(i,3) ENTONCES menor(i,3) ESCRIBIR(factorial(i)) ESCRIBIR( factorial(i)) FIN_SI FIN_PARA
8
Procedimientos
Una procedimiento es un subalgoritmo que ejecuta un proceso especfico Ningn valor est asociado con el nombre del procedimiento El formato de declaracin de un procedimiento es el siguiente:
PROCEDIMIENTO identificador (lista de parmetros formales) Seccin de Declaracin de variables, constantes y tipos locales al procedimiento Seccin de mdulos locales INICIO sentencias
FIN_PROC
Si el parmetro formal se va a utilizar como salida al procedimiento debe estar precedido de la palabra VAR Para invocar o llamar a un procedimiento se pone el nombre del procedimiento como si fuera una sentencia normal del programa, seguido de una lista de parmetros actuales
Tema 5. Funciones y Procedimientos 9
Ejercicio 72
ALGORITMO gestion. gestion. VARIABLES opcion:ENTERO {-------- Procedimiento que muestra el men en pantalla ----------} PROCEDIMIENTO mostrar_menu INICIO BORRARPANTALLA {procedimiento estndar para limpiar pantalla} ESCRIBIR(1.- Insertar nuevos datos) ESCRIBIR(1.ESCRIBIR(2.- Modificar datos existentes) ESCRIBIR(2. ESCRIBIR(3.- Borrar datos) ESCRIBIR(3.ESCRIBIR(4.- Consultar datos) ESCRIBIR(4.ESCRIBIR(5.- Terminar) ESCRIBIR(5.ESCRIBIR(Introduzca una opcin) FIN_PROC {-------------------Mdulo principal---------------} INICIO REPETIR REPETIR mostrar_menu {llamada al procedimiento} LEER(opcion) HASTA (opcion>0) AND (opcion<6) (opcion>0) (opcion<6) CASO opcion 1: insertar(parametros) {llamada al mdulo de insercin} 2: modificar(parametros) {llamada al mdulo de modificacin} 3: borrar(parametros) {llamada al mdulo de borrado} 4: consultar(parametros) {llamada al mdulo de consulta} FIN_CASO HASTA opcion=5 FIN Tema 5. Funciones y Procedimientos 10
Ejemplo
ALGORITMO conversion. conversion. VARIABLES a:ENTERO importe,c:REAL {-------------------Procedimiento que hace el cambio de moneda---------------} PROCEDIMIENTO cambio_moneda(cod:ENTERO;cantidad:REAL;VAR cambio:REAL) cambio:REAL) INICIO SI cod=1 ENTONCES {Euros a pesetas} cambio cantidad * 166.4 SINO {Pesetas a euros} cambio cantidad / 166.4 FIN_SI FIN_PROC {-------------------Mdulo principal---------------} INICIO ESCRIBIR(Euros a pesetas (1); Pesetas a Euros (0)) LEER(a) ESCRIBIR(Introduzca la cantidad) LEER(importe) cambio_moneda(a,importe,c) SI cod=1 ENTONCES ESCRIBIR(importe, Euros son ,c, pesetas) SINO ESCRIBIR(importe, Pesetas son ,c, euros) FIN_SI FIN
Tema 5. Funciones y Procedimientos 11
12
Paso de parmetros
Cuando se utilizan subalgoritmos, es el algoritmo principal el que se encarga de transferir el control entre los distintos mdulos, los cuales cuando terminan su tarea, devuelven el control al algoritmo que los llam Para que las acciones de un subalgoritmo se ejecuten debe ser invocado mediante su nombre y una lista de parmetros actuales que se corresponden uno a uno con los parmetros formales Las dos listas de parmetros (actuales y formales) deben tener el mismo nmero de argumentos y los que se vayan a emparejar deben coincidir en tipo Cuando un algoritmo llama a un mdulo, la comunicacin se realiza a travs de la lista de parmetros. Los parmetros actuales son utilizados en el lugar de los parmetros formales. La correspondencia entre unos y otros se establece emparejando los parmetros actuales con los formales segn la posicin que ocupan en la lista Los parmetros utilizados pueden servir de
Entrada: para recoger datos procedentes del algoritmo que los llama Salida: para obtener los resultados tras la ejecucin del subalgoritmo Entrada y salida simultneamente: un mismo parmetro que representa la entrada de datos, se modifica en el interior del subalgoritmo y se devuelve el resultado
13
15
18
19
10
Ejercicio
Considerando el siguiente esqueleto de algoritmo, determinar si las instrucciones de llamada al procedimiento son vlidas ALGORITMO demo CONSTANTES pi=3.14 dos=2 inicial=N VARIABLES dia,mes,ao,p,q:ENTERO horas, tarifa,cantidad,u,v:REAL codigo,clase:CARCTER PROCEDIMIENTO calcular( a: REAL; VAR b: REAL; m: ENTERO; VAR k,n: ENTERO; VAR c: CARACTER) ............ ..
Tema 5. Funciones y Procedimientos
1. 2. 3. 4. 5. 6. 7.
Calcular(u,v,dos,p,q,codigo) Calcular(pi,u,dos,p,v,clase) Calcular(horas,u,dos,dia,ao,clase) Calcular(16,horas,pi,13,ao,clase) Calcular(pi*horas,pi,dos,dia,ao,clase) Calcular(pi,pi*horas,dos,dia,ao,clase) MIENTRAS u>0 HACER Calcular(u,v,dos,p,q,codigo) FIN_MIENTRAS 8. Calcular(0,horas,(p+1)/2,dia,ao,codigo) 9. Calcular(sqrt(cantidad),tarifa,7,p,q,Inicial) 10. Calcular(dos,cantidad,dia,p+q,dia,clase) 11. ESCRIBIR(Calcular(u,v,dos,p,q,codigo))
21
Ejercicio
Considerando el siguiente esqueleto de algoritmo, determinar si las instrucciones de llamada a los subalgoritmos son vlidas ALGORITMO demo CONSTANTES pi=3.14 pi=3.14 dos=2 VARIABLES dia,mes,ao,p,q:ENTERO horas, tarifa,cantidad,u,v:REAL codigo,clase:CARCTER FUNCION f(x,y:REAL; f(x,y:REAL; d:ENTERO):REAL d:ENTERO):REAL .. .. .. PROCEDIMIENTO calcular( a: VAR b: m: VAR k,n: k,n: VAR c: REAL; REAL; ENTERO; ENTERO; CARCTER) 1. 2. 3. 4. 5. 6. 7. 8. Cantidad f(pi,tarifa,mes) tarifa f(horas,dia,dos) F(horas,tarifa,mes) F(horas,tarifa,mes) ESCRIBIR(f(0,0,0)) ESCRIBIR(f(0,0,0)) Calcular(u,v,p,dos,dia,codigo) Calcular(u,v,p,dos,dia,codigo) horas dos*f(pi,cantidad)/(2.71*tarifa) cantidad f(pi*horas,(2.71+dia)/tarifa,dos) SI mes=dos ENTONCES Ao f(horas,f(tarifa,pi,dos),dia) FIN_SI SI u>0 ENTONCES cantidad calcular(u,v,dos,p,q,codigo) FIN_SI SI Calcular(sqrt(cantidad),tarifa,7,p,q,Inicial)>0 Calcular(sqrt(cantidad),tarifa,7,p,q,Inicial)>0 ENTONCES ESCRIBIR(OK) MIENTRAS f(cantidad,0,0)>0 HACER f(cantidad,0,0)>0 cantidad f(cantidad,0,0) FIN_MIENTRAS Calcular(f(u,v,dia),tarifa,7,p,q,codigo) Calcular(f(u,v,dia),tarifa,7,p,q,codigo) Calcular(tarifa, f(u,v,dia),7,p,q,codigo) Calcular(tarifa, f(u,v,dia),7,p,q,codigo) Cantidad f(a,b,dia)
9.
10. 11.
.. .. ..
22
11
23
PILA
24
12
PILA
25
Tipos de variables
Variable local
Se declara dentro de un subalgoritmo Su valor se conoce dentro del subalgoritmo donde se define Si otro subalgoritmo declara una variable con el mismo nombre se trata de otra variable distinta
Variable global
Se declara en el algoritmo principal Su valor se conoce en cualquier parte del algoritmo incluidos los subalgoritmos declarados Si otro subalgoritmo declara una variable con el mismo nombre, la variable global no tendr efecto (no se conocer) dentro de dicho subalgoritmo
26
13
Las constantes y variables locales son aquellas constantes y variables que un mdulo necesita por s mismo, y que no son necesarias en el resto del programa (no son visibles para mdulos superiores) La residencia en memoria de estas variables y constantes locales se sita en el entorno del mdulo, es decir, en la pila, por lo que su tiempo de vida coincidir precisamente con el tiempo que dure el mdulo en ejecutarse
27
mbito de un mdulo
El mbito de un mdulo M es el conjunto de mdulos que pueden llamar a M Sean P, M y N mdulos
Si M y N estn declarados directamente dentro de P se dice que M y N son hijos de P, P es el padre de M y N, y M y N son hermanos Si M est declarado directamente dentro de P y N est declarado dentro de M, se dice que N es nieto o descendiente no directo de P y P es el abuelo o ascendiente no directo de N
28
14
mbito de un mdulo
Algoritmo S Procedimiento T Funcin W
Mdulo Puede invocar a S T,U,V T W U T,W W U,T V,U,T,X X,U,T,Y,Z Y,U,T Z,Y,U,T
mbito de T
W,T
T,S,U,V,X,Y,Z
V X Y Z
29
Reglas de mbito
El mbito de un objeto es el programa o subprograma en el que se ha declarado Un objeto declarado dentro de un subprograma no es accesible fuera del subprograma Se puede acceder a un objeto global a travs de todo el programa principal y en cualquier subprograma que no tenga ningn objeto local con el mismo nombre Se puede acceder a un objeto declarado en un subprograma en cualquier subprograma definido dentro de l, siempre que no se haya declarado un objeto con el mismo nombre en un subprograma interior Si SubA y SubB son subprogramas definidos en el mismo programa o subprograma y si SubB llama a SubA, entonces SubA debe definirse antes de SubB.
Tema 5. Funciones y Procedimientos 30
15
Precedencia de nombres
Cuando el compilador encuentra dentro del entorno de un mdulo una referencia a un identificador, buscar si se encuentra dentro del entorno de dicho mdulo. Si lo encuentra, ser esa referencia la que utilice. Si no lo encuentra, entonces buscar en los mdulos superiores para buscar en sus entornos dicho identificador. Si lo encuentra en estos entornos, ser ese el que utilizar; si se llega al mdulo ms alto sin haber encontrado ese identificador, entonces se producir un error. A esta preferencia en la eleccin de los identificadores se le denomina precedencia de nombres La precedencia de nombres puede dar lugar en muchos casos a efectos laterales
Tema 5. Funciones y Procedimientos
a,b,c,d a,b
31
Efectos laterales
Cuando se modifica una variable global respecto a un mdulo M en un mdulo subordinado M', se dice que se produce un efecto lateral Los efectos laterales son totalmente indeseables, y por tanto deben deben evitarse en lo posible Para modificar el valor de una variable fuera del mdulo en el que que ha sido declarada, deber pasarse esta variable como parmetro por por referencia El uso de variables locales es muy conveniente porque hace que los los subalgoritmos sean independientes y puedan programarse de manera individual Para ello, es necesario que toda comunicacin con el algoritmo principal se realice exclusivamente a travs de la lista de parmetros parmetros formales Si un mdulo necesita conocer algn dato del algoritmo principal se pasar como un parmetro por valor desde dicho algoritmo. Si tambin se necesitan devolver valores al algoritmo principal, se pasarn los resultados por referencia
Tema 5. Funciones y Procedimientos 32
16
FIN_PROC {P2} INICIO {P1} .. .. .. FIN_PROC {P1} INICIO {Mdulo principal} .. .. .. FIN {Mdulo principal}
ALGORITMO reglas_ambito1 VARIABLES a,b:ENTERO FUNCION F1(x:REAL):REAL F1(x:REAL):REAL VARIABLES b,c:ENTERO INICIO .. .. .. FIN_FUNC {F} PROCEDIMIENTO P1(d:REAL) P1(d:REAL) VARIABLES e,f:ENTERO PROCEDIMIENTO P2(a:REAL) P2(a:REAL) VARIABLES e,g:ENTERO INICIO {P2} .. .. ..
Ejercicio
1. La variable a declarada en el algoritmo principal es una variable global 2. La variable a declarada en el algoritmo principal es accesible en la funcin F1 3. La variable a declarada en el algoritmo principal es accesible en el procedimiento P2 4. Se puede acceder a la funcin F1 en el procedimiento P2 5. La variable g es accesible solamente en el procedimiento P2 6. La instruccin b c en la parte de instrucciones de F1 asignara el valor de c a la variable global b 7. Se puede usar la instruccin ESCRIBIR(F1(f)) en ESCRIBIR(F1(f)) la parte de instrucciones de P1 8. Se puede usar la instruccin P2(3) en la parte de instrucciones de P1 9. Se puede acceder a la variable f en P2 10.Se puede usar la instruccin P2(b) en la parte de 10.Se instrucciones del algoritmo principal 11.Se puede usar la instruccin P1(F1(a)) en la 11.Se parte de instrucciones del programa principal
33
Describir la salida del siguiente algoritmo o explicar por qu se produce un error. se ALGORITMO reglas_ambito2 FUNCION producto(x:ENTERO):ENTERO producto(x:ENTERO):ENTERO INICIO producto 3*x FIN_FUNC FUNCION suma(x:ENTERO):ENTERO suma(x:ENTERO):ENTERO FUNCION producto(a:ENTERO):ENTERO producto(a:ENTERO):ENTERO INICIO producto 4*a FIN_FUNC INICIO suma 5+producto(x) FIN_FUNC INICIO ESCRIBIR(producto(2),suma(2)) ESCRIBIR(producto(2),suma(2)) ESCRIBIR(suma(producto(3)),producto(suma(3)) ESCRIBIR(suma(producto(3)),producto(suma(3)) FIN
Ejercicio
34
17
Ejercicio
Describir la salida del siguiente algoritmo o explicar por qu se produce un error. se ALGORITMO reglas_ambito3 VARIABLES num,i:ENTERO PROCEDIMIENTO P(VAR num:ENTERO) num:ENTERO) INICIO i i+1 num 2*num FIN_PROC INICIO {Mdulo principal} i 1 num 3 MIENTRA i<=4 HACER ESCRIBIR(i,num) ESCRIBIR(i,num) P(num) P(num) ESCRIBIR(i,num) ESCRIBIR(i,num) i i+1 FIN_MIENTRAS FIN {Mdulo principal}
Tema 5. Funciones y Procedimientos 35
Ejercicio
Describir la salida del siguiente algoritmo o explicar por qu se produce un error. se ALGORITMO reglas_ambito4 VARIABLES num,mitad:ENTERO PROCEDIMIENTO doble(VAR num:ENTERO) num:ENTERO) INICIO num 2*num FIN_PROC INICIO {Mdulo principal} num 4 mitad 2 ESCRIBIR(mitad) ESCRIBIR(num) doble(mitad) ESCRIBIR(mitad) ESCRIBIR(num) FIN {Mdulo principal}
Tema 5. Funciones y Procedimientos 36
18