Sie sind auf Seite 1von 18

Tema 5.

Funciones y Procedimientos

Funciones y Procedimientos
Introduccin Funciones Procedimientos Diferencias Paso de parmetros
Por valor Por referencia

El proceso de invocacin y el manejo de la pila Tipo de variables


Variables locales Variables globales mbito de las variables
Tema 5. Funciones y Procedimientos 2

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

Tema 5. Funciones y Procedimientos

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

Ejemplo (ejercicio 69)

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

Tema 5. Funciones y Procedimientos

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

Ejemplos de invocacin a funciones


Suponiendo z=3 y v una variable entera, indicar cules de las siguientes sentencias son incorrectas y por qu. En caso de ser correcta, indicar el resultado obtenido Suponiendo a=2, b=4, c y d variables a=2, b=4, reales y v una variable lgica, indicar cules de las siguientes sentencias son incorrectas y por qu. En caso de ser correcta, indicar el resultado obtenido

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

Tema 5. Funciones y Procedimientos

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

La lista de parmetros formales son la entrada y la salida al procedimiento:


([VAR] ident_param1: tipo1;....; [VAR] iden_paramN:tipoN)

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

Diferencias entre funciones y procedimientos


Las funciones devuelven un valor mientras que los procedimientos pueden devolver 0, 1 n valores El procedimiento se declara igual que la funcin, pero su nombre no est asociado a ninguno de los resultados que obtiene. Adems, la declaracin de una funcin debe incluir el tipo de dato que se devolver El nombre de una funcin puede aparecer como parte de una expresin mientras que el nombre de un procedimiento debe aparecer como una instruccin independiente

Tema 5. Funciones y Procedimientos

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

Tipos de paso de parmetros


Paso de parmetros por valor o copia Paso de parmetros por referencia o direccin

Tema 5. Funciones y Procedimientos

13

Paso de parmetros por valor


Es el que se utiliza por defecto Los parmetros formales reciben una copia de los valores de los parmetros actuales y no es posible cambiar su valor Los cambios que se producen en los parmetros formales como consecuencia de la ejecucin de las sentencias incluidas en el subalgoritmo no tienen ningn efecto (y por tanto no producen un cambio) en los parmetros actuales El paso por valor se utiliza cuando los parmetros se van a utilizar nicamente como entrada ya que no se pueden pasar valores de retorno al punto de llamada
Tema 5. Funciones y Procedimientos 14

Ejemplo paso por valor


ALGORITMO paso_p_valor. VARIABLES num:ENTERO PROCEDIMIENTO incremento(a:ENTERO) INICIO a a+1 ESCRIBIR(Dentro del procedimiento el nmero vale ,a) FIN_PROC 1.[Entrada del nmero num] LEER(num) 2.[Llamada al procedimiento] incremento(num) 3.[Mostrar el resultado] ESCRIBIR(Fuera del procedimiento el nmero vale ,num) 4.[Fin]

Tema 5. Funciones y Procedimientos

15

Ejemplo paso por valor


ALGORITMO paso_p_valor. VARIABLES num,i:ENTERO PROCEDIMIENTO incremento(a:ENTERO) INICIO a a+1 ESCRIBIR(Dentro del procedimiento el nmero vale ,a) FIN_PROC 1.[Entrada del nmero num] LEER(num) 2.[Llamada al procedimiento] PARA i=1 HASTA 4 HACER incremento(num) FIN_PARA 3.[Mostrar el resultado] ESCRIBIR(Fuera del procedimiento el nmero vale ,num) 4.[Fin]
Tema 5. Funciones y Procedimientos 16

Paso de parmetros por referencia


En la declaracin del subalgoritmo hay que incluir la palabra VAR antes del parmetro formal Los parmetros formales reciben la direccin de memoria del parmetro actual con lo que cualquier modificacin del parmetro formal afecta directamente al parmetro actual El parmetro actual debe ser una variable (no puede ser una constante, valor constante, nombre de funcin o expresin) y debe ser del mismo tipo que el parmetro formal por referencia con el que se asocia (es decir, no pueden asociarse tipos compatibles sino exactamente el mismo tipo)
Tema 5. Funciones y Procedimientos 17

Ejemplo paso por referencia


ALGORITMO paso_p_referencia. VARIABLES num:ENTERO PROCEDIMIENTO incremento(VAR a:ENTERO) INICIO a a+1 ESCRIBIR(Dentro del procedimiento el nmero vale ,a) FIN_PROC 1.[Entrada del nmero num] LEER(num) 2.[Llamada al procedimiento] incremento(num) 3.[Mostrar el resultado] ESCRIBIR(Fuera del procedimiento el nmero vale ,num) 4.[Fin]

Tema 5. Funciones y Procedimientos

18

Ejemplo paso por referencia


ALGORITMO paso_p_referencia. VARIABLES num,i:ENTERO PROCEDIMIENTO incremento(VAR a:ENTERO) INICIO a a+1 ESCRIBIR(Dentro del procedimiento el nmero vale ,a) FIN_PROC 1.[Entrada del nmero num] LEER(num) 2.[Llamada al procedimiento] PARA i=1 HASTA 4 HACER incremento(num) FIN_PARA 3.[Mostrar el resultado] ESCRIBIR(Fuera del procedimiento el nmero vale ,num) 4.[Fin]

Tema 5. Funciones y Procedimientos

19

Reglas para la asociacin de parmetros


Debe haber el mismo nmero de parmetros actuales que de formales Los tipos de los parmetros formales y actuales deben concordar. Sin embargo, un parmetro actual de tipo entero puede estar asociado con un parmetro formal por valor de tipo real, pero no con un parmetro formal por referencia de tipo real Un parmetro actual asociado con un parmetro formal por variable debe ser una variable (no puede ser una constante o una expresin)
Tema 5. Funciones y Procedimientos 20

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.

12. 13. 14.

.. .. ..

Tema 5. Funciones y Procedimientos

22

11

El proceso de invocacin y el manejo de la pila


Cuando se ejecuta el programa principal, se utiliza un rea de memoria principal en la que se almacenan las variables y constantes. Tambin se reserva una zona de memoria del ordenador que se llama pila para trabajar con los mdulos Cuando se llega a una sentencia dentro del programa principal en la que se produce la invocacin de un mdulo se crea en la pila un objeto que llamaremos registro de activacin o entorno. En el registro de activacin se guardan, entre otras cosas, las constantes y variables locales, as como los parmetros actuales Una vez que se crea el registro de activacin, se procede a ejecutar el cuerpo del mdulo de manera que todos los eventos que ocurran durante la ejecucin del mdulo, lo harn sobre su entorno Si el mdulo M contiene una llamada a otro mdulo M se crear en la pila, justo encima de la zona que est utilizando el mdulo M, otra zona para el mdulo M' activado por M Cuando M' termine su ejecucin, el entorno asociado a M' se destruye, restaurando el entorno de M. Por tanto, el entorno activo en cada momento es el ltimo llamado, que ocupa el lugar ms alto de la pila Cuando el retorno se haga al programa principal, al borrar el ltimo registro de activacin (el ltimo entorno) que quedaba en la pila, sta quedar vaca

Tema 5. Funciones y Procedimientos

23

Ejemplo del uso de la pila


ALGORITMO principal. VARIABLES {----------Mdulo M---------} MODULO M INICIO FIN {----------Mdulo N ---------} MODULO N INICIO llamada a MODULO M FIN {----------Mdulo P---------} MODULO P INICIO llamada a MODULO N FIN {------- Comienza el mdulo principal -----} INICIO llamada a MODULO P FIN Tema 5. Funciones y Procedimientos Entorno del mdulo M Entorno del mdulo N Entorno del mdulo P Entorno del programa principal

PILA

24

12

Ejemplo del uso de la pila


ALGORITMO uso_pila. VARIABLES i,n:ENTERO suma:REAL FUNCION factorial(a:ENTERO):ENTERO VARIABLES fact,i:ENTERO INICIO fact 1 PARA i=2 HASTA a HACER fact fact*i FIN_PARA factorial fact FIN_FUNC 1.[Inicio algoritmo] LEER(n) suma 0 PARA i=1 HASTA n HACER suma suma+factorial(i)/i FIN_PARA ESCRIBIR(Resultado ,suma) 4.[Fin] Antes de la llamada al mdulo PILA
Entorno del mdulo principal i n suma

Tras la llamada a Factorial


Entorno de la funcin factorial i fact factorial a

PILA

Entorno del mdulo principal i n suma

Tras devolver el control al mdulo principal PILA


Entorno del mdulo principal i n suma

Tema 5. Funciones y Procedimientos

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

Tema 5. Funciones y Procedimientos

26

13

mbito de las variables


Se puede definir el mbito de una variable, y lo notaremos como v, como aquellos mdulos de un programa en los que la variable tiene validez, es decir, aquellos mdulos de un programa que pueden utilizar esa variable (mdulos donde la variable es visible) Se dice que el mbito v de una variable es global respecto a un mdulo M si M pertenece al mbito de v, es decir, el mdulo M ve esa variable y puede utilizarla. De esta manera, el mbito de una variable engloba los siguientes mdulos:
El propio mdulo M en que ha sido declarada la variable. Cualquier mdulo M' incluido en M, ya sean hijos o nietos, siempre y cuando en M' no haya sido declarada otra variable ni exista ningn parmetro formal cuyo identificador coincida con el identificador de la variable

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

Tema 5. Funciones y Procedimientos

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

El mbito de un mdulo M comprende:


l mismo (M) El padre de M (es decir, el mdulo en el que est declarado) Cualquier hermano de M que est declarado con posterioridad a l Cualquier descendiente de un hermano de M que est declarado con posterioridad a l

Tema 5. Funciones y Procedimientos

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

mbito de W mbito de U mbito de V mbito de X mbito de Y mbito de Z


Z,X Y,X,Z X,V,Y,Z V,S,X,Y,Z U,S,V,X,Y,Z

T,S,U,V,X,Y,Z

Procedimiento U Procedimiento V Funcin X Funcin Y Funcin Z

V X Y Z

Tema 5. Funciones y Procedimientos

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

Mdulo 1 Mdulo 1.1 a b+c Mdulo 1.1.1 a b+c+d

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} .. .. ..

Considerando el siguiente esqueleto de algoritmo, determinar si las afirmaciones son ciertas

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

Tema 5. Funciones y Procedimientos

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

{suma} {suma} {Mdulo principal} {Mdulo principal}

Tema 5. Funciones y Procedimientos

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

Das könnte Ihnen auch gefallen