II.FUNCIÓN
Una función es un subprograma que tiene un
valor de retorno, el cual puede ser utilizado dentro de la evaluación de una
expresión. El diagrama sintáctico para la declaración de una función es el
siguiente:
function Tan( angulo : real) : real; { Cabecera de función }
begin
Tan := sin(angulo)/cos(angulo) { Bloque }
end;
Las funciones predefinidas, también llamadas estándar,
son las que el propio lenguaje pone a disposición del programador. Se las
llama palabra reservadas
Ejemplo:
sin(x:real)
|
seno de x
|
cos(x:real)
|
coseno de x
|
sqr(x:real)
|
cuadrado de x
|
sqrt(x:real)
|
raíz cuadrada de x
|
abs(x:real)
|
valor absoluto de x
|
ln(x:real)
|
logaritmo neperiano de x
|
int(x:real)
|
parte entera de x
|
frac(x:real)
|
parte decimal de x
|
pred(x:tipo ordinal)
|
predecesor de x
|
succ(x:tipo ordinal)
|
sucesor de x
|
pi (*no args.*)
|
valor de la constante pi
|
odd(x:integer)
|
si x es o no impar
|
Función nombre (parámetros): tipo
(Declaración de variables locales)
begin
<cuerpo de la función>
Nombre de la función:= valor de la función
End;
2.2 COMPONENTES
2.2.1.
Declaración Declaración de funciones La declaración de una función tiene la siguiente forma:
Ejemplos:
Función Nombre (p1, p2,...): tipo {declaraciones locales y subprogramas}
begin
<Cuerpo de la función>
Nombre:= valor de la función
end;
p1, p2,... lista de parámetros formales tipo de dato del resultado que devuelve la función
Función verifica: boolean;
Función sin parámetros formales}
Función cambia (Var valor_1, valor_2: real): real;
Función potencia (base, exponente: real): r;
Es una variable utilizada para recibir valores de entrada en una rutina o subrutina. Dichos valores, que serán enviados desde la rutina invocante, son llamados argumentos. La subrutina usa los valores asignados a sus parámetros para alterar su comportamiento en tiempo de ejecución. La mayor parte de los lenguajes de programación pueden definir subrutinas que aceptan cero o más argumentos.
Paso por valor
El paso de parámetros por valor consiste en copiar el contenido de la variable que queremos pasar en otra dentro del ámbito local de la subrutina, consiste pues en copiar el contenido de la memoria del argumento que se quiere pasar a otra dirección de memoria, correspondiente al argumento dentro del ámbito de dicha subrutina. Se tendrán dos valores duplicados e independientes, con lo que la modificación de uno no afecta al otro.
Paso por referencia
El paso de parámetros por referencia consiste en proporcionar a la subrutina a la que se le quiere pasar el argumento la dirección de memoria del dato. En este caso se tiene un único valor referenciado (o apuntado) desde dos puntos diferentes, el programa principal y la subrutina a la que se le pasa el argumento, por lo que cualquier acción sobre el parámetro se realiza sobre la misma posición de memoria.
Paso por valor resultado
Es un tipo poco usado en los lenguajes de programación actuales. Se basa en que dentro de la función se trabaja como si los argumentos hubieran sido pasados por valor pero al acabar la función los valores que tengan los argumentos serán copiados a las variables que pertenecían.
2.3
INVOCACIÓN Y RETORNO DE LA FUNCION
Para llamar a una función basta con hacer referencia a su nombre y si la misma requiere de parámetros estos deberán indicarse dentro de paréntesis. Para llamar a una función que no requiera de parámetros se deberá indicar el nombre de la misma seguida de paréntesis vacíos.
Las funciones se invocan de la siguiente manera:
<Nombre función> (parámetros locales);
Parámetros locales es una lista de variables y/o constantes separadas por comas. La existencia de parámetros locales dependerá de que existan parámetros formales en la declaración de la función.
2.4 ÁMBITO O ALCANCE DE LAS VARIABLES
Las
variables se clasifican en LOCALES y GLOBALES. Una variable LOCAL es una
variable declarada dentro de un subprograma, y el significado de dicha variable
se limita a ese subprograma y a los módulos que éste contiene. Cuando otro
subprograma utiliza el mismo nombre de variable, se crea una variable diferente
en otra posición de la memoria. Por eso, si un subprograma asigna un valor a
una de las variables locales, tal valor no es accesible a los otros subprogramas.
Cuando se
desea que otros subprogramas tengan acceso al valor de una variable, ésta debe
declararse como GLOBAL, lo cual se logra declarándola en el módulo que abarca a
dichos subprogramas.Para tener la seguridad de que una variable va a tener un alcance GLOBAL, conviene declararla en el módulo principal.
2.5 PASO DE PARÁMETROS
Al invocar a un
subprograma se le pueden pasar parámetros, los cuales pueden consistir de
valores de variables declaradas en el módulo invocador. El paso de tales
parámetros puede hacerse de dos maneras:
•
Por
valor
•
Por
referencia
2.5
1PASO POR VALOR
El paso de parámetros por
valor consiste en enviar una COPIA del valor de la variable al módulo invocado.
De esta manera se asegura que el valor de la variable sólo puede ser modificado
por el módulo que la declaró.
Si la palabra Var no
aparece delante del parámetro formal en un procedimiento, Turbo Pascal supone
que el parámetro formal es un parámetro por valor.
Ejemplo:
Program Suma_por_Valor;
{El siguiente programa realiza la suma de
dos números}
Uses Crt;
Var
A,
B,C:integer;
procedure
suma(A,B,C :integer);
begin
C:= A + B
end;
begin
ClrScr; C:=10; A:=10; B:=10; suma (A, B, C);
WriteLn (A,',', B,',', C); ReadKey; ClrScr
end.
El resultado de la
ejecución del programa sería: 10, 10,10
2.5.2PASO
POR REFERENCIA
En el caso de que se
requiera que el valor de una variable sea modificado por el módulo invocado,
debe hacerse el paso de parámetro por referencia, por medio del cual el módulo
invocado tiene acceso a la dirección en que se guarda el valor a modificar.
Para aclarar los
conceptos de paso por valor y paso por referencia, analicemos el programa de
suma y Multiplicación de matrices dado en las secciones anteriores. Observamos
que las invocaciones a subprogramas son similares en los casos de paso por
valor y paso por referencia.
Por ejemplo, las
invocaciones a los procedimientos imprimen y suma quedan de la siguiente
manera:
imprime('C',mat_c,ren_a,col_b);
suma(mat_a,mat_b,mat_c,ren_a, col_a); y sus respectivas declaraciones son :
procedure imprime(nmat:char;mat_f:mat;ren_f,col_f:integer);
procedure suma(mat_f_a,mat_f_b:mat;Var mat_f_c:mat;ren_f,col_f:integer);
Vemos
que en la declaración del procedimiento suma existe la parte: Var mat_f_c: mat la
cual significa lo siguiente:
"La variable mat_f_c
contiene la dirección de la variable correspondiente en la invocación (mat_c),
y es de tipo mat”
Esto significa que el
paso del parámetro mat_c se hizo por
referencia, y que el procedimiento invocado.
(Suma) puede modificar el
valor de mat_c. Ejemplo:
Program
Suma_por_Referencia; {El siguiente programa realiza la suma de dos números}
Uses
Crt;
Var
A, B, C: integer; procedure
suma(A, B: integer;
Var C: integer);
begin
C:=
A + B
end;
begin
ClrScr;
C:=10;
A:=10; B:=10;
Suma(A, B, C);
WriteLn
(A,',',B,',',C); ReadKey;
ClrScr
end.
El resultado de la
ejecución del programa sería: 10, 10,20
ACTIVIDADES
1 . EJEMPLO DE ARGUMENTO POR VALOR Y REFERENCIA
EJEMPLO 2 DE ARGUMENTO POR VALOR Y REFERENCIA
EJEMPLO DE FUNCIONES INTERNAS
No hay comentarios:
Publicar un comentario