Está en la página 1de 6

Apuntes del Prof. Hugo A. Cuello. CLASE 5: Mdulos. Procedimientos.

Procedimientos

Mdulos: Procedimientos.

Un procedimiento es un mdulo que presenta las siguientes partes:


Una cabecera Un cuerpo

La cabecera presenta las siguientes partes:


El nombre del procedimiento Una lista de parmetros, que podra estar vaca

El cuerpo del procedimiento es un bloque, dentro del cual se escriben las sentencias. Un procedimiento lo podemos ver como una caja negra no nos interesa saber su interior- o como una caja transparente si nos interesa saber su interior-. Para que un procedimiento pueda ser ejecutado, se deber llamarlo o invocarlo. Los parmetros formales aquellos que se definen en la cabecera del procedimiento, pueden ser pasados por valor, en estos casos, se trabaja con una copia del valor pasado desde la invocacin, cualquier modificacin que se realice en los parmetros formales, no repercute en los parmetros actuales los indicados en el momento de la invocacin- o pueden ser pasados por referencia, tambin llamados por direccin o como los denomina el Lenguaje Pascal parmetros variables, en estos casos, lo que se enva no es el valor en s, sino la direccin del objeto, por lo tanto, los parmetros actuales enviados por referencia solo pueden ser objetos que sean variables. Dentro del mdulo los parmetros formales enviados por referencia contienen la direccin del parmetro actual correspondiente, cualquier valor asignado al parmetro formal, en realidad est modificando al parmetro actual. Un procedimiento se lo invoca en forma directa, debido a que es una sentencia en s mismo, como se vi bajo el apartado sentencias simples. Un procedimiento puede necesitar trabajar con variables internas a su mbito, en estos casos esas variables definidas dentro del procedimiento son denominadas variables locales. Fuera del procedimiento en que han sido definidas no existen, salvo en los casos en que el procedimiento invoque a un mdulo definido dentro de su mbito, -mdulos anidados- all sern reconocidas. La comunicacin entre el mdulo que invoc al procedimiento y el procedimiento invocado se establece por medio de los parmetros. Estructura de un procedimiento: -definicinNomProc (lst_par_Formales : tipo ) Sentencias Cuerpo R Cabecera

Clase 5

AyE

U.T.N. F.R.B.A.

Pgina 1

Apuntes del Prof. Hugo A. Cuello. Declaracin de procedimiento

Mdulos: Procedimientos.

Cabecera del procedimiento

Cuerpo del procedimiento

Cabecera del procedimiento

procedure

identificador

Lista parmetros formales

Lista de parmetros formales

Declaracin de parmetros ;

Declaracin de parmetros
var

Lista de identificadores

Tipo de parmetro

Llamada o invocacin a un procedimiento Ejemplo: NomProc(lst_par_Actuales)

Pasaje de parmetros: Los parmetros a un procedimiento pueden ser pasados por:


Valor o contenido Referencia o direccin.

El pasaje de parmetros por valor o contenido, significa que lo que se est pasando es el valor del objeto enviado que puede ser un valor constante, el contenido de una variable o el resultado de una expresin; el valor recibido por el parmetro formal realiza una copia de ese valor en un rea de almacenamiento temporal el Stack o Pila, Clase 5 AyE U.T.N. F.R.B.A. Pgina 2

Apuntes del Prof. Hugo A. Cuello.

Mdulos: Procedimientos.

eliminndose en el momento de abandonar el mdulo; cualquier cambio que se produzca sobre ese objeto, el cambio se lo est realizando en la copia, por lo tanto el parmetro actual jams se ver afectado de esas modificaciones. En cambio el pasaje de parmetros por referencia o direccin, tambin llamado parmetro variable, significa que lo que se est pasando es la direccin del objeto enviado, que slo podr ser una variable. El parmetro formal correspondiente recibe la direccin de ese objeto y, cualquier valor que se le asigne, en realidad se lo est asignando al parmetro actual correspondiente, por lo tanto, no se trabaja con una copia sino con el propio objeto. La forma de establecer si un parmetro formal debe ser por referencia es indicando antes de la lista de parmetros la palabra reservada var. Todos aquellos parmetros que deban ser pasados por valor, entonces no se debe anteponer esa palabra. Cundo pasar parmetros por valor o por referencia? Usamos parmetros por valor cuando conocemos previamente el valor de esos parmetros y deseamos pasarlo al mdulo para que realice algn tratamiento con esos datos; an si se cambiara su valor dentro del mdulo invocado, no afecta al parmetro actual. En cambio usamos parmetros por referencia cuando el dato se va a conocer en el mdulo o sabiendo su valor debemos modificarlo y se requiere saberlo en el mbito en que fue invocado Los parmetros actuales cuando son pasados por valor pueden ser valores constantes, variables o expresiones. En cambio los parmetros actuales cuando son pasados por referencia solo pueden ser objetos variables.
Parmetros formales por valor Parmetro formal por referencia

Ejemplos: Bloque principal a!9 Proc1(a,3,sqrt(a)+2.4,b) Emitir(a,b)

Proc1( w,x:integer; y:real;


h es una variable local

var z:longint)

Parmetros actuales: los 3 primeros son pasados por valor, por lo tanto pueden ser; variables, constantes, o expresiones, en cambio el 4to. parmetro es pasado por referencia, solo puede ser un objeto variable

h!x+y w!w2 x!x+w z!h*x+3 Emitir(h,x,z) R

Prueba de escritorio Direccin Llamada d:231 d:1528 valores enviados valores recibidos Var.Loc. Emite a b w x y z h 9 87 9, 3,5.4,d:1528 9 3 5.4 d:1528 8.4 8.4 10 87 7 10 9 87

Procedimientos definidos por el usuario


Como ya se vi en prrafos previos, un procedimiento est formado por una cabecera que contiene el nombre del procedimiento, eventualmente una lista de parmetros y el cuerpo en donde se indican las acciones a realizar. Siguiendo estos pasos el usuario podr definir sus propios procedimientos. Clase 5 AyE U.T.N. F.R.B.A. Pgina 3

Apuntes del Prof. Hugo A. Cuello.

Mdulos: Procedimientos.

Variables globales y variables locales Las variables globales se definen en tiempo de compilacin, reservando el espacio en el segmento de datos -un bloque de memoria cuyo tamao mximo es de 64K bytesla cantidad de bytes que corresponda al tipo de esa variable y ese espacio estar reservado hasta la finalizacin del programa, por lo tanto, estas variables son estticas. Las variables locales se definen en tiempo de compilacin dentro del mbito de un mdulo procedimientos o funciones-, pero no se reserva espacio hasta el momento en que el mdulo es invocado, en ese instante se crean esas variables y al abandonar el mdulo son eliminadas de esa regin de memoria temporal. Esa regin de memoria es el segmento del Stack o Pila, cuyo tamao mximo es de 64K bytes. El valor por defecto reservado por el lenguaje Turbo Pascal es de 16384 bytes, pero puede ser ampliado o disminuido por medio de la directiva al compilador de mbito global escribindola dentro del cdigo del programa {$M Stack Size, heapmin,heapmax} o por medio de los comandos de men del IDE Option | Compiler | Memory Sizes. Stack Size debe ser un valor entre 1024 y 65536 bytes y que establece el tamao del segmento del stack, heapmin debe ser un valor en el intervalo 0 655360 bytes y heapmax debe ser un valor en el intervalo heapmin y 655360 bytes y que establece el tamao del rea del heap o montculo, regin de memoria en donde se crean o eliminan las variables dinmicas en tiempo de ejecucin. Variables dinmicas Las variables dinmicas se definen en tiempo de ejecucin por medio del procedimiento new y son eliminadas por medio del procedimiento dispose. La regin de memoria en donde son creadas/eliminadas es en el heap o montculo. Debido a que la cantidad de variables globales que podemos contar en un programa no puede superar el lmite de 64Kbytes, bajo estas condiciones estamos en la obligacin de utilizar el heap a efectos de poder incrementar el espacio para poder contar con ms variables. Cdigo del programa El cdigo del programa que incluye al bloque principal y todos los mdulos definidos en el programa se ubican en el segmento de cdigo cuyo tamao mximo es de 64 Kbyte. Si se necesita un mayor tamao estamos obligados a crear unidades, cada una de las cuales no puede superar el lmite de 64 Kbytes. Estas unidades estarn referenciadas en el programa en la seccin uses que incorporar el cdigo ya compilado de la unidad a nuestro programa, logrando en consecuencia romper la barrera de los 64 Kbytes para el cdigo del programa. De esta manera hemos visto que la memoria total estar dividida en cuatro regiones:

Segmento de Datos Mximo 64 Kbytes, si se requiere un mayor tamao utilizar variables dinmicas, esto es en el rea del heap-. Segmento de Cdigo Mximo 64 Kbytes, para ampliar el tamao utilizar unidades c/u. con un mximo de 64 Kbytes-. Segmento del Stack o Pila Mximo 64 Kbytes-. AyE U.T.N. F.R.B.A. Pgina 4

Clase 5

Apuntes del Prof. Hugo A. Cuello.

Mdulos: Procedimientos.

rea del heap o Montculo resto de la memoria disponible-

Memoria convencional bajo el D.O.S. de 640Kbytes. Segmento de Datos Mx. 64Kb. Variables globales, estticas definidas en tiempo de compilacin. Segmento del Stack Mx. 64Kb. Valor por defecto 16Kb. Variables locales, se crean al invocar al mdulo y se eliminan al salir de l.

3 ? a d:1000

4 ? b d:1006

? c d:1012

d:1000 x

d:1006 y

Instancia Invocacin mdulo ObtCatetos

Segmento de Cdigo Mx. 64Kb. Para mayor tamao utilizar Unidades c/u. Mx. 64Kb. Cdigo del programa formado por: el bloque principal, ms los mdulos definidos en l, ms el cdigo de las unidades indicadas.

rea del Heap resto de la memoria disponibleVariables dinmicas, creadas/eliminadas en tiempo de ejecucin por medio de los procedimientos new y dispose.

C ObtCatetos(a,b) CalcHipot(a,b,c) Emitir(c) F

ObtCatetos(var x, y : real) Ing.catetos x,y R Emitir(h:real) Hipotenusa: , h R

CalcHipot( x, y:real; var h:real) h ! sqrt(sqr(x) + sqr(y)) R

El siguiente cuadro muestra los objetos variables globales y los objetos variables locales o parmetros formales en el segmento del Stack Pila- en el instante de la invocacin o llamada al mdulo y de su retorno. Observar sus contenidos segn los casos. Si el nmero est precedido por d: entonces indica que es una direccin de memoria. Si el parmetro formal contiene un nmero precedido por d: entonces en esos casos, el parmetro ha sido pasado por referencia.

Clase 5

AyE

U.T.N. F.R.B.A.

Pgina 5

Apuntes del Prof. Hugo A. Cuello.

Mdulos: Procedimientos.

Segmento de Datos a b c d:1000 d:1006 d:1012 Invocacin ? ? ? ObtCatetos Retorno 3 4 ? Invocacin 3 4 ? CalcHipot Retorno 3 4 5 Invocacin 3 4 5 Emitir Retorno 3 4 5 Fin corrida. ------Mdulo Instancia

Segmento del Stack* x y h d:1000 --3 --------d:1006 --4 ------------d:1012 --5 -----

* Los parmetros o variables locales slo existen cuando se invoca al mdulo. --- Indica que las variables globales o locales o los parmetros correspondientes de la columna no existen.

Clase 5

AyE

U.T.N. F.R.B.A.

Pgina 6

También podría gustarte