Apuntes Nº 8 Subprogramas. prof. Dolores Cuiñas

Anuncio
PROGRAMACIÓN 10.
Recuerde que estos son apuntes
muy simplificados que deberá
completar
con
la
bibliografía
recomendada
Prof. Dolores Cuiñas H.
APUNTES Nº 8
SUBPROGRAMAS.
Un gran problema puede resolverse descomponiéndolo en subproblemas, (problemas más pequeños
o módulos), los cuales a su vez pueden sucesivamente seguir fragmentándose en problemas más
pequeños, hasta que estos sean solucionados. Este método se denomina diseño descendente, dado
que se comienza en la parte superior con un problema general y se van diseñando soluciones
específicas para cada uno de los subproblemas (módulos) en los que ha sido dividido ese problema
principal.
M
O
D
U
L
A
C
I
O
N
problema principal
Subproblema 1
Subproblema 3
Subproblema 2
En el caso que nos compete, los problemas que enfrentamos son aquellos que podemos resolver
aplicando la lógica de la programación estructurada y que, haciendo uso de la programación
modular, podremos descomponer el programa principal en módulos que realizan tareas específicas,
denominados subprogramas. De esta manera, normalmente un proyecto de programación se
compone, generalmente, de un programa principal (también llamado conductor del programa) y un
conjunto de subprogramas (módulos), con las llamadas a los mismos dentro del programa principal
o desde otro subprograma.
P
R
O
G
R
A
M
A
C
I
O
N
Programa Principal
M
O
D
U
L
A
R
Subprograma 1
Subprograma 2
entradas
proceso
subproceso 1
Subprograma 3
salidas
subproceso 2
Los subprogramas se clasifican en procedimientos y funciones, los cuales se definen como
unidades de programas diseñados para ejecutar una tarea específica.
PROCEDIMIENTO: es un subprograma (grupo de sentencias) que realiza una tarea particular. Al
igual que cualquier programa, un procedimiento consta de tres partes: Una cabecera, una lista de
parámetros formales (opcional), una sección de declaraciones de constantes, variables u otros
procedimientos y la sección ejecutable o cuerpo del procedimiento.
El cuerpo del procedimiento está constituido por una serie de sentencias, a las cuales se le asigna un
nombre mediante un identificador en la cabecera de éste, constituyendo así el nombre del
procedimiento. La tarea asignada al procedimiento, es decir, esta serie de sentencias, se ejecuta
siempre que el Turbo Pascal encuentre el nombre del procedimiento como parte de una instrucción
del cuerpo del programa principal o del cuerpo de otro subprograma, a lo cual se denomina llamada o
invocación al subprograma. De este modo se establece entre el programa principal y el subprograma
procedimiento una interacción mediante la cual el subprograma procedimiento recibe 0 o más
valores (a través de parámetros) del programa que llama y devuelve 0 o más valores (a través de
parámetros) a dicho programa. Esta interacción también puede realizarse entre dos subprogramas.
Denominaremos parámetro a una variable cuyo valor debe ser o bien proporcionada por el programa
principal al procedimiento (parámetro de entrada) o ser devuelto desde el procedimiento al programa
principal (parámetros de salida).
En otras palabras parámetros de entrada son aquellos cuyos valores deben ser proporcionados por
el programa principal y parámetro de salida son aquellos cuyos valores se calculan en el
procedimiento y se devuelven al programa principal para su proceso posterior.
Ahora bien, tanto en el subprograma procedimiento como en el programa principal debe hacerse
referencia a la lista de parámetros que van a ser intercambiados. Cuando la lista de parámetros es
referenciada en el programa principal se le denomina lista de parámetros actuales, porque son los
valores reales que en el momento de ejecución del programa (momento actual) van a tomar los
parámetros. Mientras que cuando la lista de parámetros es referenciada en el subprograma
procedimiento se le denomina lista de parámetros formales o ficticios, porque básicamente
constituyen sólo el formato (forma) de los valores que van a ser intercambiados.
Esquemáticamente la interacción entre el programa principal y el subprograma procedimiento tiene la
siguiente forma:
cabecera programa principal
PROCEDURE nombreprocedimiento (parámetros formales)
cuerpo del subprograma
0 o más valores
nombreprocedimiento (parámetros actuales)
cuerpo programa principal
llamada al
procedimiento
El subprograma procedimiento debe ser declarado (PROCEDURE) antes de que pueda ser
referenciado en el cuerpo de un programa principal y es llamado desde éste u otro procedimiento
directamente por su nombre. En Turbo Pascal tiene la forma siguiente:
PROGRAM identificador;
USES
CONST
cabecera del programa principal
TYPE
VAR
PROCEDURE nombreproc (lista de parámetros formales);
declaraciones locales
opcional
BEGIN
cuerpo del procedimiento
declaración del
subprograma
procedimiento
END;
BEGIN
opcional
nombreproc (lista de parámetros actuales);
cuerpo
del
programa principal
llamada al procedimiento
END.
Donde:
PROCEDURE es la palabra reservada que se utiliza para declarar el procedimiento
nombreproc es un identificador válido, que representa el nombre del procedimiento
(lista de parámetros formales) puede tener la forma siguiente: lista1:tipo1;lista2:tipo2;...
donde lista1 tiene la forma siguiente: PF1, PF2, ... PFN:tipo1
lista2 tiene la forma siguiente: VAR PF3,PF4,...PFN:tipo2
siendo PF1, PF2, PF3, PF4... parámetros formales (identificadores válidos) que van a contener
los valores de los parámetros actuales cuando se llama al procedimiento.
tipo1 y tipo2: son los tipos de datos (valores) que van a contener los parámetros de la lista1 y
lista2, respectivamente.
Los parámetros formales sirven para pasar información al procedimiento y/o devolver información
del procedimiento a la unidad de programa que le llama. Los parámetros formales pueden ser de dos
tipos, parámetros valor o parámetros variable.
A los PF1, PF2 (ilustrados como lista1) se les denomina parámetros valor porque éstos son
unidireccionales. Es decir, se usan para proporcionar información a un procedimiento, pero no
pueden devolver valores. Si la palabra VAR no aparece delante del parámetro formal en un
procedimiento, el Pacal supone que el parámetro formal es un parámetro valor. Los parámetros valor
también se denominan parámetros de entrada, dado que son parámetros formales que suministran
valores para ser usados por un procedimiento.
A los PF3, PF4 (ilustrados como lista2) se les denomina parámetros variable, cuando en la
declaración del procedimiento están precedidos con la palabra VAR; se usan tanto para recibir como
para transmitir valores entre el subprograma procedimiento y el programa principal. A los parámetros
variable también se le denomina parámetros de salida dado que son parámetros formales que sirven
de salida o de entrada/salida de resultados.
Aunque ya se mencionó, insistimos en lo siguiente: para hacer una llamada al subprograma
procedimiento, es decir para iniciar su ejecución, basta con utilizar, dentro del programa principal u
otro procedimiento, el nombre del procedimiento acompañado o no de la lista de parámetros
actuales. Después que se ha terminado su ejecución, se ejecuta la sentencia que sigue a la llamada
al procedimiento, tal como se ilustra con la flecha punteada en el esquema anterior.
En Turbo Pascal la llamada a un procedimiento adquiere la forma descrita a continuación:
nombreproc (lista de parámetros actuales)
inicia la ejecución del procedimiento nombreproc
(lista de parámetros actuales) tiene la forma siguiente: (PA1, PA2, PA3,....)
siendo PA1, PA2, PA3... parámetros actuales (identificadores válidos) que tienen los valores
que se pasan al procedimiento nombreproc.
NOTAS:
• El valor de los parámetros actuales no se conoce cuando se declara el procedimiento, pero cuando
se ejecuta la sentencia de llamada al procedimiento es preciso que tengan valores asignados o
previamente leídos, de los contrario dará error.
• Los parámetros actuales en la llamada al procedimiento deben coincidir en número, orden y tipo
con los parámetros formales o ficticios de la declaración del procedimiento.
• Las variables que son usadas en un programa con subprogramas procedimientos pueden ser de
dos tipos: locales y globales. Las variables locales son las que se declaran en el subprograma y
sólo están disponibles durante el funcionamiento del mismo. Las variables globales son las que
se declaran en el programa principal y pueden ser usadas tanto en el programa principal como en
todos los subprogramas.
Ver ejemplos en clase
FUNCION: es un subprograma que devuelve un único resultado al programa principal o subprograma
que le llamó. A este tipo de funciones se les denomina funciones definidas por el usuario. En Turbo
Pascal tiene un formato similar al de un procedimiento:
PROGRAM identificador;
USES
CONST
TYPE
VAR
FUNCTION nombrefun (lista de parámetros formales): tipo;
declaraciones locales
BEGIN
cuerpo de la función
nombrefun := valor de la función o resultado
END;
BEGIN
nombrefun (lista de parámetros actuales);
declaración del
subprograma
función
sentencia de asignación mediante la que
se devuelve el resultado al programa que
llamó a la función
cuerpo
del
programa principal
llamada a la función
END.
Donde:
FUNCTION es la palabra reservada que se utiliza para declarar la función
nombrefun es un identificador válido que representa el nombre de la función
tipo es el tipo del dato del resultado que devuelve la función, o sea tipo del valor devuelto
(tipo de nombrefun).
(lista de parámetros formales) tiene la siguiente forma: PF1,PF2,...: tipo-p
tipo-p es el tipo de los parámetros
Igual que en los procedimientos
NOTA: en las funciones no existen parámetros variable (VAR) dado que el resultado de la evaluación
del subprograma function se devuelve o está contenido en su nombre (nombrefun)
NOTAS GENERALES:
• Los arreglos se pueden usar como parámetros en funciones y procedimientos, pero el valor de una
función no puede ser arreglo (ARRAY).
• Es mejor pasar el arreglo completo que como elementos individuales, aunque de ambas maneras
puede ser realizado.
• Los arreglos como parámetros pueden ser valor o variable: cuando se usan como variable el
procedimiento trabaja directamente con el arreglo actual (real). Cuando se usan como parámetro
valor el procedimiento trabaja con una copia local y cualquier cambio que se haga en el arreglo
local no se refleja en el arreglo real.
Ver ejemplos en clase
COMPARACIÓN ENTRE FUNCIONES Y PROCEDIMIENTOS
FUNCTION
Debe usarse cuando tenemos un resultado
único y cero o más parámetros de entrada.
Devuelve sólo un valor.
Una función se referencia usando su nombre
en una expresión dentro del programa
principal.
Al nombre de la función se le asigna el valor
del resultado del proceso efectuado en la
Function.
El tipo del resultado en la función debe estar
indicado en la cabecera (declaración del
function) y puede ser cualquier tipo de dato
(integer, real, boolean, char, enumerado,
subrango o puntero)
PROCEDURE
Debe usarse cuando no hay resultado o hay
varios resultados.
Devuelve 0,1, varios valores.
Un procedimientos se referencia por una llamada
o invocación al mismo dentro del programa
principal.
Al nombre del procedimiento no se le puede
asignar un valor
El tipo del resultado o resultados en el
procedimiento debe(n) ser declaro(s) dentro de
la lista de parámetros formales y dentro de la
sección de declaraciones del programa principal.
Los conceptos anteriores son tomados básicamente de:
Programación en Turbo/ Borland. Pascal 7. Luis Joyanes Aguilar
Programación con Lenguaje Turbo Pascal. F.J. Sanchis Llorca.-
Descargar