Clase 4 - Funciones y Procedimientos - Removed
Clase 4 - Funciones y Procedimientos - Removed
Clase 4 - Funciones y Procedimientos - Removed
Capítulo 4
1. Subprogramas - Ventajas y características de la programación modular
2. Funciones
3. Procedimientos
4. Ámbito de alcance (Local- Global)
5. Definiciones anidadas
1. Subprogramas
La solución de un problema puede abarcar varios aspectos o etapas bien diferenciados, cada una
de ellas, puede ser pensada e implementada como un proceso individual, la unión de todos ellos
lleva a la solución del problema completo.
Estos procesos son llamados subprogramas.
Un subprograma es un módulo o sección autónoma del programa, que realiza una tarea
específica.
Puede ser llamado (invocado, activado) por el programa o por otros subprogramas siempre que
se necesite ejecutar la tarea para la cual fue hecho.
Al “partir” la solución, cada subprograma, está acotado y atiende una tarea específica, siendo
más fácil de interpretar y corregir, para garantizar el correcto funcionamiento.
La unión de los subprogramas conforma la solución integral al problema original.
1.1. Cohesión y Acoplamiento
En la programación modular, se persigue obtener alta cohesión y bajo acoplamiento
Cohesión: Se produce cuando los elementos (instrucciones, declaraciones, etc.) se agrupan
juntos en un módulo por una razón lógica, no al azar, teniendo en cuenta que todas ellas
contribuyen a realizar un objetivo común que es el funcionamiento del módulo.
Un módulo tiene alta cohesión si todos sus componentes están relacionados fuertemente.
Acoplamiento: se dice al grado de dependencia que tienen dos módulos o subprogramas entre
sí. Cuando dos módulos son independientes (cada uno puede hacer su trabajo sin contar para
nada con el otro), encontramos el grado más bajo de acoplamiento, y decimos que ambas
unidades están totalmente desacopladas.
FUNCION
1.5.Tipos de subprogramas
PROCEDIMIENTO
2. Funciones
Una función es un módulo de programa que realiza una tarea específica y devuelve un único
valor (de tipo simple) en el nombre.
Consta de un encabezamiento y un cuerpo (este último tiene una parte declarativa y otra
ejecutable).
El encabezamiento contiene la palabra reservada function, seguida del nombre de la misma
(sigue las reglas de un identificador), los parámetros y sus respectivos tipos encerrados entre
paréntesis y por último el tipo del resultado que devuelve.
La función recibe información a través de parámetros y devuelve un resultado en el nombre.
No lee, ni escribe.
40
UNMDP Programación I
Una función devuelve un único valor de tipo simple (resultado) en el lugar donde se realiza la
invocación. Ejemplo de un programa que invoca funciones predefinidas en Pascal.
Program funciones;
Var
X : real;
Begin
Readln ( X );
X:= Abs( X ); { a la derecha de una asignación }
If Frac( X ) < 0.5 Then { Como parte de una condición }
X:= X+1;
Writeln ( Trunc ( X):8) { En una lista de salida }
End.
2.3.Parámetros
Los parámetros permiten la comunicación entre la función y el programa que la invoca.
41
UNMDP Programación I
3. Procedimiento
Un procedimiento es un módulo de código independiente, que se ejecuta cuando es invocado o
llamado por otro proceso para realizar una tarea específica, que puede incluir lectura y/o
escritura, devolver cero o más resultados de tipo simple o estructurado (registros, tablas).
Existen procedimientos incorporados al lenguaje Pascal (clrscr, readln), pero el programador
puede definir otros "a medida" del problema que resuelve.
Program EjemploProcedimientos;
Uses
15/5/2015
Crt, Dos;
tedo
Var
techado
Anio, Mes, Dia, DS : word;
Palabra: string;
Begin
ClrScr; {limpia la pantalla, Crt}
GetDate(Anio, Mes, Dia, DS ); {devuelve la fecha del sistema, Dos}
Writeln(Dia,’/’, Mes’/’, Anio);
Palabra := ‘tejido’;
Delete(Palabra, 3, 2); {borra 2 caracteres de Palabra comenzando en la posición 3}
Writeln(Palabra);
Insert(‘cha’, Palabra, 3); { inserta la cadena ‘cha’ a partir de la posición 3 de Palabra}
Writeln(Palabra);
End.
Notar que:
a. Las invocaciones a procedimientos constituyen en sí una sentencia ejecutable, a diferencia de
las funciones que forman parte de una expresión y son reemplazadas por el resultado que
devuelven en el mismo lugar de la invocación.
b. ClrScr es un procedimiento que no tiene parámetros ni devuelve resultados
c. GetDate es un procedimiento que devuelve 4 resultados. (parámetros de Entrada,
comunicación bidireccional)
d. Delete e Insert son procedimientos que reciben y transforman valores sobre los mismos
parámetros. (parámetros de Entrada/Salida, comunicación bidireccional)
44
UNMDP Programación I
Ejemplos:
Ej5-Leer dos valores reales, mostrar su suma y su producto, utilizar :
5_a - Procedimiento que a partir de dos valores reales imprima su suma y su producto
5_b - Procedimiento que a partir de dos valores reales devuelva su suma y su producto, el
programa invocante imprime los resultados.
Program Ej5_a;
Var
X,Y : real;
Procedure CalculaImprime ( W, Z : real); {define procedimiento,
Begin W y Z parámetros formales de entrada}
Writeln ('La suma es = ', W + Z);
Writeln ('El producto es = ', W * Z);
End;
Begin
Write('Ingese dos numeros'); Readln (X, Y);
CalculaImprime (X, Y); {invoca el procedimiento, X e Y parámetros actuales}
End.
Para la solución del inciso 5_b es necesario que el procedimiento comunique resultados a través
de parámetros, la comunicación debe ser Bidireccional
3.2.Parámetros VARIABLE o REFERENCIA
La comunicación es bidireccional, se produce intercambio de información, se pueden obtener
a través de los parámetros resultados de cualquier tipo.
El parámetro formal no recibe el valor del parámetro actual (no copia), sino la dirección de
éste, por lo tanto cuando el subprograma opera sobre el mismo no lo hace sobre una copia
sino sobre la misma variable, la referencia a través de la dirección Cada vez que se modifica
el parámetro formal, se modifica el parámetro actual.
El parámetro formal VARIABLE es siempre un identificador y el actual debe ser variable (ya
que representa una dirección donde se almacenará un resultado).
En la definición del subprograma a este tipo de parámetro, se le antepone la palabra VAR.
Como las funciones devuelven un solo resultado (de tipo simple en el nombre), no utilizan este
tipo de parámetros.
Program Ejemplo5_b ;
Var
X,Y , Sum, Prod: real;
..............
Procedure Intercambia (Var A, B : real); { A y B son parámetros de entrada salida}
Var
Aux : real;
Begin
Aux:= A;
A:= B;
B:= Aux;
End;
Definidos en el ámbito de la
invocación
Debe tener un valor
Se utiliza una función cuando el proceso arroja un único resultado (de tipo simple), cuando no se
requiere lectura ni escritura, en caso contrario un procedimiento.
Siempre es posible escribir una función como procedimiento, pero no siempre es posible escribir
un procedimiento como función.
46
UNMDP Programación I
50
UNMDP Programación I
5. Definiciones anidadas
Un subprograma, en su parte declarativa, puede definir otro procedimiento y/o función, se dice
que hay un anidamiento y el subprograma interno es privado del subprograma y solo reconocido
dentro de su ámbito. Estas definiciones se pueden realizar en forma sucesiva. Ejemplo:
Program Anidamientos;
Procedure C(….);
Procedure B(….);
Procedure A(….);
Begin{cuerpo del proc. A}
……..
End;
Begin {cuerpo del proc. B}
A (....);
……..
End;
Begin
B (....); {cuerpo del proc. C}
……..
End;
Begin {programa principal }
.........
C(......); Los procedimientos A y B son desconocidos en el
End. programa principal y no pueden ser invocados por éste.
6.Tipo Subprograma
Es posible definir el tipo procedimiento y función, y luego declarar variables de dichos tipos.
Una aplicación es utilizar las variables tipo función o procedimiento como parámetros de otro
subprograma.
También las componentes de una tabla (vector) pueden ser tipo procedimiento o función.
Ventaja:
permite flexibilizar el código que toma su forma definitiva en la ejecución.
Sintaxis :
Type
Id_procedure = procedure(lista de parámetros);
Id_function = function(lista de parámetros): tipo;
Ejemplos:
Program TiposSubprograma;
Type
Tfunc = function( m: integer): real;
Tproce = procedure(var x, y : real);
function F1( m: integer) : real;
begin
F1 := m*(m - 0.5);
End;
function F2( m: integer) : real;
begin
F2 := m / (m - 0.5)
End;
51
UNMDP Programación I
function F3( m: integer) : real;
begin
F3 := (m - 1) / m
End;
procedure intercambia (var x, y : real);
var
aux:real;
begin
aux := x; x := y; y := aux
end;
procedure transforma (var x, y : real);
begin
if x < y then
x := x/y
else
y := y/x
end;
Procedure Cualquiera( m: integer; f: Tfunc);
Var
i : integer;
begin
for i := 1 to m do
write ( f ( i ) : 6: 2)
end;
Consideraciones
Las funciones y procedimientos que se corresponderán con variables o parámetros de este tipo
deben coincidir en la cantidad y el tipo de parámetros, y en el tipo de resultado en el caso de
funciones.
Las variables de tipo función o procedimiento, almacenan las direcciones de memoria del código
de un procedimiento o función compatible (son punteros).
52