Procedimientos, Funciones y Recursividad en Pascal

February 6, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Procedimientos, Funciones y Recursividad en Pascal...

Description

Procedimientos, Funciones y Recursividad Gonzalo Soriano gsorianob@ [email protected] 9 de junio de 2009

”Divide y vencer´  as”

1.

Intr Introdu oducc cci´ i´ on a procedimientos y funciones. on

Un procedimiento o funci´on on es un bloque de c´odigo odigo que no se encuentra en el bloque blo que o programa principal; p ero puede ser invocado por p or ´este este cuantas veces quiera el programador. Cuando tenemos que resolver un gran programa, muchas veces es muy ´util util dividirlo en varios peque˜nos nos problemas; de esta forma resolvemos m´as as problemas, pero m´as as sencillos. Tambi´en en es muy util u ´ til usar procedimientos y funciones cuando una tarea la tenemos que realizar varias veces; de esta forma, la implementamos una vez y la invocamos cuantas veces sea necesario. Por ejemplo; si tenemos que desarrollar un programa de ´algebra, algebra, es muy probable que para distintos problemas necesitamos calcular la norma de un vector, o el determinante de una matriz. En este caso podemos hacer una funci´on on que ser´a llamada cuando se la necesite.

1.1. 1.1.

Funcio uncione ness

La estructura de una funci´on on es: function function nombre_fu nombre_funcion ncion (param1:ti (param1:tipo1; po1; ... ; paramN:tip paramN:tipoN): oN): Tipo_reto Tipo_retorno; rno; var { Bloque Bloque de declar declaraci aci´ ´ on on de variab variables les locales locales a la funci´ funci´ on. o n. } { El ´ ambi a mbito to dond donde e se pueden pueden usar usar esta estas s variab variable les s es solo } { entr entre e el begi begin n y end end que que marc marcan an el comie comienz nzo o y fin fin de la } { mi misma. } begin { Bloq Bloque ue de c´ odigo odigo de la funci´ funci´ on. o n. } nombre_funci´ on on := valorReto valorRetornoTi rnoTipoRet poRetorno; orno; { Esta ´ ultima ultima l´ ınea ı nea debe debe ejec ejecut utar arse se si o si antes antes de llegar llegar } { al final de la funci´ on, o n, no nece necesa sari riam amen ente te just justo o ante antes. s. } end;

Donde nombre_funcion ser´a el nombre que usemos para indicarle a Pascal que queremos que ejecute el c´odigo odigo de la funci´on. on. Tipo_retorno tiene que ser un tipo de dato at´omico omico (boolean, integer, real, char, etc), el cual tiene que ser del mismo tipo que se le asigne a la funci´on on con valorRetornoTipoRetorno. Y Bloq on Bloque ue de c´ odigo odigo de la funci´ funci´ on on son las sentencias para que la funci´on cumpla con el objetivo con el que fue creada. La cantidad de par´ametros ametros (variables) pasados a la funci´on on van desde cero hasta los permitidos por la capacidad de la memoria. Los tipos de estos par´ametros, ametros, a diferencia del Tipo_retorno, pueden ser de cualquier tipo, incluso tipos compuestos. Cuando en la funci´on on hacemos: nombre_funci´ on on := valorReto valorRetornoTi rnoTipoRet poRetorno; orno; le estamos asignando un valor a esa funci´on on para que devuelva, pero hay que tener en cuenta que una vez que le asignamos ese valor no se le puede cambiar; por lo menos por esa llamada.

2

1.1. 1.1.1. 1.

Pasaje Pasaje de par´ par´ ametros por valor y referencia ametros

Existen dos formas de pasarle los par´ametros ametros a las funciones; por valor y por referencia. Cuando pasamos un par´ametro amet ro por po r valor el compilador crea una copia exacta (para esto necesitamos m´as as memoria) y se la pasa a la funci´on; de forma que si lo modificamos dentro de la funci´on, on, esas diferencias diferen cias no se s e ver´ıan ıan fuera de ella. Cuando pasamos un par´ ametro ametro por referencia refere ncia el compilador crea una especie de apuntador a la variable original; por lo que cualquier modificaci´ on on se reflejar´a en el bloque de c´odigo odigo que lo invoco. Para pasar una variable por referencia hay que anteponer la palabra reservada var a la variable; de la forma: (var param:tipo-parametro); param:tipo-parametro);. Las variables usadas en la secci´on on bloque de c´odigo odigo de la funci´on on pueden ser las pasadas por par´ametros ametros y/o las variables locales a la funci´on. on. En caso de usar una variable declarada para el programa principal y que no sea pasada por par´ ametros se dice que estas usando una variable global; cosa prohibida por la ametros c´atedra. atedra.

1.1. 1.1.2. 2.

Usos Usos de las las func funcio ione ness

Para invocar la funci´on on es suficiente con poner el nombre de la funci´on on y pasarle los par´ametros ametros necesarios; es importante recalcar que se deben pasar la misma cantidad par´ametros ametros y del mismo tipo que fueron declarados cuando se defini´ o la funci´on. on. No es necesario que tengan el mismo nombre. Como las funciones retornan un valor, es posible (no obligatorio), asignarle ese valor a una variable o usarlo en una expresi´on. program ejemplo_funciones; ejemplo_funciones; uses crt; var { Var Variab iables les glo glob bale ales a las las que que se pue pued de acc accede eder des desde } n, entero: integer; { cualquier parte del programa. } functi function on ejempl ejemplo o (n : intege integer) r) : intege integer; r; begin ... end; { Progra Programa ma Princi Principal pal } begin ... { Llamo a la funci´on on y guardo guardo el result resultado ado en la variab variable le ’enter ’entero’. o’. } entero entero := ejemplo(n) ejemplo(n); ; { Llamo a la funci´on on sin guardar guardar el result resultado ado. . } ejemplo(n); { Llamo a la funci´on on pas´ pas´ andole andole el n´ umer u mero o 5. } n := ejem ejempl plo o (5); (5);

3

{ Llamo a la funci´on on pas´ pas´ ando a ndole le una varia variabl ble e con con nomb nombre re { distin distinto to al puesto puesto en la defini definici´ ci´ on o n de la funci´ funci´ on. n := ejemplo(e ejemplo(enter ntero); o);

} }

{ Uso Uso la funci´ funci´ on on en una expresi´ expresi´ on. o n. } if ( 7 = ejem ejempl plo( o() ) ) then then ... end.

Una posibilidad para asegurarse que no est´an an usando accidentalmente una variable global en el ´ambito ambito de una funci´on on (problema que puede generar noches sin sue˜ no no por no encontrar un bug  cerca de una entrega) es ubicar las variables del programa programa principal principal despu´ despu´es es de las funciones, funciones, y justo antes antes del programa programa principal. program ejemplo_funciones; ejemplo_funciones; uses crt; functi function on ejempl ejemplo o (n : intege integer) r) : intege integer; r; begin ... end; var { Var Varia iab bles les glo glob bale ales a las las que que se se pue pued de acc acced ede er sol solo o } n, ente entero ro: : int integ eger er; ; { en en el el Pro Progr gram ama a Pri Princ ncip ipal al. . } { Progra Programa ma Princi Principal pal } begin ... entero entero := ejemplo(n) ejemplo(n); ; ... end. 1.1. 1.1.3. 3.

Par´ ar´ ametros ametros actuales actual es y par´ p ar´ ametros ametros formales formale s

Los par´ametros amet ros formale for maless son aquellos que, como el nombre lo indica, le dan forma  a la funci´on. on. Es decir, son aquellos que aparecen en su definici´on on y se usan para indicar la cantidad y tipos de par´ametros ametros que va a recibir la funci´on. on. Por ejemplo: function function nombre nombre (param_for (param_formal1: mal1:tipo1 tipo1; ; ... ; param_for param_formalN: malN:tipoN tipoN): ): tipo; begin ... end;

Los par´ametros an an usando actualmente en la amet ros actual act uales es son los que se est´ ejecuci´ on del programa. Estos par´ametros on ametros deben coincidir en su tipo, cantidad 4

y orden a los definidos en el encabezado de dicha funci´on, on, ya que son los que reservado ocuparan el lugar por los par´ametros ametros formales.

1.1. 1.1.4. 4.

Ejemp Ejemplo lo

program expo;

uses crt; var

n: integer; x: real;

{ Funcion que multiplica  |n | veces a x, y si n era negativo, lo invierte. Le paso por valor x y n; y retorna un real. } function exponencial (x: real; n: integer ):real; var

i, modulo : integer ; resultado : real; begin

resultado :=1; { Le calculo el modulo a n. } modulo := abs(n); 5

{ Multiplico x las |n | veces. } for i:=1 to (modulo) do resultado := resultado ∗x; { Si n era negativo, lo invierto. } if  (n
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF