Funciones, Procedimientos y Arrays en Turbo Pascal

6

Click here to load reader

description

Este manual me sirvio mucho al inicio cuando aprendi a programar en pascal, espero les sea util tambien....

Transcript of Funciones, Procedimientos y Arrays en Turbo Pascal

Page 1: Funciones, Procedimientos y Arrays en Turbo Pascal

-1-

Funciones, Procedimientos y Arrays en Turbo Pascal

1.- INTRODUCCIÓN En la presente práctica se pretende dar las nociones y sintaxis para poder incluir procedimientos, funciones y arrays dentro de los programas escritos en el lenguaje Pascal. Desde este momento nuestros programas no vas a estar constituidos únicamente por un cuerpo de ejecución, habrá tantos cuerpos de ejecución como subprogramas tengamos escritos dentro de nuestro código. 2.- FUNCIONES Éste es el primer subprograma que vamos a describir. Debemos tener presente donde hay que incluir el código de una función y cómo debe ser invocada para poder obtener el resultado que de ella se espera. Si recordamos la estructura de un programa en Pascal: Program <Nombre>; [Uses Crt; ] [Const <CONS_1> = expresión;

... <CONS_N> = expresión;

] [Var <var1> : Tipo; ... <varN> : Tipo; ] Begin [ Sentencia1; .... SentenciaN; ] End. Vamos a completarlo para ver dónde hemos de colocar las funciones dentro del mismo:

Page 2: Funciones, Procedimientos y Arrays en Turbo Pascal

-2-

Program <Nombre>; [Uses Crt; ] [Const <CONS_1> = expresión;

... <CONS_N> = expresión;

] [Var <var1> : Tipo; ... <varN> : Tipo; ] [Function <nombreFuncion> (<lista de parámetros>): Tipo; [Var <var1> : Tipo; ... <varN> : Tipo;

] Begin {Cuerpo de la función}

[ Sentencia1; .... SentenciaN; ]

End; ] Begin {Cuerpo del programa principal} [ Sentencia1; .... SentenciaN; ] End. Esto quiere decir que las funciones se deben escribir antes del cuerpo del programa principal. Ahora vamos a pasar a repasar de una forma más precisa la sintaxis de una función: Function <nombre>(var1:Tipo; var2:Tipo; ...; varN:Tipo): Tipo; [Var <var1> : Tipo; ... <varN> : Tipo; ] Begin {Cuerpo de la función} [ Sentencia1; .... SentenciaN; ] End; Una función debe tener un nombre y una lista de parámetros donde se colocan los nombres de cada uno de sus parámetros formales así como los tipos de los mismos. Todos los parámetros formales se separan por “;”. Una vez finalizada la declaración de los parámetros formales se debe poner el tipo de retorno de nuestra función. Todos los tipos implicados dentro de un subprograma deben de ser simples, es decir, no se puede pasar ningún tipo a la función que no sea simple o definido por el usuario dentro de la sección Type que pasará a describirse más adelante. Como la función debe retornar un valor no debemos de olvidar que dentro de las sentencias de la función debe asignarse este valor al nombre de la función por medio de una

Page 3: Funciones, Procedimientos y Arrays en Turbo Pascal

-3-

sentencia de asignación, es decir, dentro del cuerpo de la función el nombre de la misma es como una variable más y para devolver el valor se debe asignar el mismo como si se tratara de una variable más dentro del programa. Lo más cómodo es que la última sentencia de nuestra función tuviera la forma siguiente: nombreFuncion := ValorDeRetorno; Dentro de la función las únicas variables que tienen sentido para nosotros son los parámetros formales de la función así como las nuevas variables que definamos dentro de la sección Var de la propia función. Cualquier otra variable no podrá ser utilizada para la resolución de la función. Para poder llamar a una función previamente definida deben realizarse los siguientes pasos:

1. La función debe estar escrita anteriormente a su llamada, es decir, si una función llama a otra función la función que es llamada debe haberse escrito dentro del programa Pascal antes que la que realiza la llamada. Si sólo se llama a la función dentro del programa principal esta comprobación es superflua pues por la sintaxis hemos de tener escrita la función antes de poder escribir el cuerpo principal de nuestro programa.

2. Dentro de la sentencia donde se invoca a la función debemos asegurarnos que la misma se encuentra dentro de una expresión correcta y la invocación se realizará:

NombreFuncion(para1,para2,...,paraN) Donde la lista de parámetros con la que se invoca la función deben ser variables o valores calculables dentro del cuerpo de ejecución donde queremos llamar a nuestra función y además deben coincidir con el tipo de los parámetros formales previamente escritos en la definición de la misma.

2.- PROCEDIMIENTOS Éste es el segundo subprograma que vamos a describir. Debemos tener presente donde hay que incluir el código y cómo debe ser invocada para poder obtener el resultado esperado Si recordamos la estructura de un programa en Pascal: Program <Nombre>; [Uses Crt; ] [Const <CONS_1> = expresión;

... <CONS_N> = expresión;

] [Var <var1> : Tipo; ... <varN> : Tipo; ] Begin [ Sentencia1; .... SentenciaN; ]

Page 4: Funciones, Procedimientos y Arrays en Turbo Pascal

-4-

End. Vamos a completarlo para ver dónde hemos de colocar los procedimientos dentro del mismo: Program <Nombre>; [Uses Crt; ] [Const <CONS_1> = expresión;

... <CONS_N> = expresión;

] [Var <var1> : Tipo; ... <varN> : Tipo; ] [Procedure <nombreProcedimiento> (<lista de parámetros>); [Var <var1> : Tipo; ... <varN> : Tipo;

] Begin {Cuerpo del procedimiento}

[Sentencia1; .... SentenciaN; ]

End; ] Begin {Cuerpo del programa principal} [ Sentencia1; .... SentenciaN; ] End. Esto quiere decir que los procedimiento se deben escribir antes del cuerpo del programa principal. NOTA: Es indistinto si primero ponemos todos los procedimientos y luego las funciones o viceversa. También se puede llegar a mezclar la escritura de los procedimientos y funciones. Lo que sí se debe cumplir es que antes del cuerpo del programa principal deben haberse escrito TODOS los procedimientos y funciones que tenga ese programa Pascal.

Page 5: Funciones, Procedimientos y Arrays en Turbo Pascal

-5-

Ahora vamos a pasar a repasar de una forma más precisa la sintaxis de un procediento: Function <nombre>(var1:Tipo; var2:Tipo; ..; VAR varN:Tipo) [Var <var1> : Tipo; ... <varN> : Tipo; ] Begin {Cuerpo del Procedimiento} [ Sentencia1; .... SentenciaN; ] End; Un procedimiento debe tener un nombre y una lista de parámetros donde se colocan los nombres de cada uno de sus parámetros formales así como los tipos de los mismos. Todos los parámetros formales se separan por “;”. Alguno de estos parámetros deben devolver los datos calculados dentro del mismo. Estor parámetros se distinguen porque van precedidos por la palabra reservada VAR. El número de estos parámetros no esta predeterminado y debe ser de uno o más, puesto que siempre se debe calcular algún valor para que la escritura de un procedimiento esté justificada. Todos los tipos implicados dentro de un subprograma deben ser simples, es decir, no se puede pasar ningún tipo a la función que no sea simple o definido por el usuario dentro de la sección Type que pasará a describirse más adelante. A diferencia de las funciones un procedimiento no devuelve un valor como parte de su proceso de llamada, por el contrario alguno de sus parámetros debe tener los valores que en él se han calculado. A estos parámetros se les conoce como parámetros de salida. Dentro del procedimiento las únicas variables que tienen sentido para nosotros son los parámetros formales del procedimiento así como las nuevas variables que definamos dentro de la sección Var del propio procedimiento. Cualquier otra variable no podrá ser utilizada para la resolución del procedimiento. Para poder llamar a un procedimiento previamente definido deben realizarse los siguientes pasos:

1. El procedimiento debe estar escrito anteriormente a su llamada. 2. Dentro de la sentencia donde se invoca al procedimiento debemos asegurarnos que se

encuentra escrito como si se tratara de una sentencia más de nuestro lenguaje, es decir, no puede formar parte de una expresión y la invocación se realizará:

nombreProcedimiento(para1,para2,...,paraN)

Donde la lista de parámetros con la que se invoca al procedimiento deben ser variables o valores calculables dentro del cuerpo de ejecución donde queremos llamar a nuestro procedimiento y además deben coincidir con el tipo de los parámetros formales previamente escritos en la definición del mismo. Otra cosa que debemos garantizar es que TODOS los parámetros de salida de nuestro procedimiento están asociados a variables y no a expresiones, es decir, cada uno de los parámetros con los que se invoca el procedimiento y que corresponden a parámetros de salida son variables definidas dentro del cuerpo de ejecución donde se invoca al procedimiento y que además coinciden en tipo.

Page 6: Funciones, Procedimientos y Arrays en Turbo Pascal

-6-

4.- ARRAYS Un array se define dentro de la sección Var del programa principal siguiendo la siguiente sintaxis: <nombre> : Array [1..<valorTope1>, ..., 1..<valorTopeN>] of Tipo; Donde el array debe tener un nombre, como cualquier variable, y entre “[..]” se lista los valores apropiados para cada uno de sus índices. El valorTope debe de ser un literal numérico o una constante de tipo entero. Si hay más de un índice para el array éstos se deben de separar por “,”. Como paso final debe declararse de qué tipo es el array que debe de ser uno de los tipos simples o cualquier otro definido por el usuario dentro de la sección Type. Para poder acceder a una posición del array se realiza de la siguiente manera: <nombreArray>[indice1,..,indiceN] Es decir, se debe poner el nombre de array y seguidamente se abre “[“ luego el valor para cada uno de sus índices separados todos ellos por “,” y para terminar se cierra “]”. 5.- SECCIÓN Type Esta es una nueva sección que no hemos visto hasta el momento. Esta sección se coloca, si la hubiera, justo antes de la sección Var del programa principal. Esta sección sirve para declarar nuevos tipos por el usuario para poder utilizarlos dentro de nuestro programa Pascal. La sintaxis es la siguiente: Type <identificador> = Tipo; Donde identificador es el nombre con el que se conocerá el nuevo tipo que hemos declarado. Nosotros utilizaremos esta sección para poder pasar arrays como parámetros a nuestras funciones y procedimientos. Necesitamos definir un tipo para cada uno de los arrays que pretendamos pasar a nuestras funciones y procedimientos. Desde el momento que definamos el tipo dentro de la sección Type todas las variables que queramos crear de ese tipo de array serán referenciadas por el identificador que hayamos utilizado dentro de la sección Type. La sintaxis es la siguiente: Type <identificador> = Array [1..tope1,..., 1..topeN] of Tipo; Desde este momento para poder crear variables de nuestro array haremos lo siguiente: Var <nombre> : identificadorArray; Lo mismo pasa si queremos referirnos al tipo dentro de lo parámetros y variables de un procedimiento o función.