Funciones y Procedimientos
Programacin 1
InCo - FING
Contents
1 Subprogramas 2
1.1 Ejemplo (1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Ejemplo (2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Ejemplo (3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Estructura de un bloque . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Encabezados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Funciones 4
2.1 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Declaracin de una funcin . . . . . . . . . . . . . . . . . . . . . 5
2.3 Encabezado de una funcin . . . . . . . . . . . . . . . . . . . . . 5
2.4 Parmetros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5 Parmetros nominales y efectivos . . . . . . . . . . . . . . . . . . 5
2.6 Ejemplo de funcin . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.7 Ejemplo de invocacin . . . . . . . . . . . . . . . . . . . . . . . . 6
2.8 Nombre de la funcin . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.9 Ejemplo. Funciones booleanas. . . . . . . . . . . . . . . . . . . . 6
2.10 Ejemplo. Funciones booleanas (2) . . . . . . . . . . . . . . . . . . 7
1
3 Procedimientos 7
3.1 Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Ejemplo. Procedimiento de salida. . . . . . . . . . . . . . . . . . 7
4 Pasaje de parmetros 8
4.1 Pasaje de parmetros por valor . . . . . . . . . . . . . . . . . . . 8
4.2 Pasaje de parmetros por referencia . . . . . . . . . . . . . . . . 8
4.3 Pasaje de prmetros por referencia: ejemplos (1) . . . . . . . . . 8
4.4 Pasaje de prmetros por referencia: ejemplos (2) . . . . . . . . . 9
4.5 Pasaje de prmetros por referencia: ejemplos (3) . . . . . . . . . 9
5 Recomendaciones de estilo 9
5.1 Recomendaciones de estilo: funciones . . . . . . . . . . . . . . . . 9
5.2 Recomendaciones de estilo: procedimientos . . . . . . . . . . . . 9
6 Reglas de alcance 10
6.1 Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
6.2 Identificadores locales y globales . . . . . . . . . . . . . . . . . . 10
6.3 Identificadores locales vs. globales . . . . . . . . . . . . . . . . . . 10
6.4 Funciones y procedimientos (1) . . . . . . . . . . . . . . . . . . . 11
6.5 Funciones y procedimientos (2) . . . . . . . . . . . . . . . . . . . 11
1 Subprogramas
program triangulo;
(*
declaracion de subprogramas
*)
2
LeerDatos(base_triangulo,altura_triangulo);
area_triangulo:=
CalcularAreaTriangulo(base_triangulo,altura_triangulo);
MostrarResultado(area_triangulo);
end.
program triangulo;
var base_triangulo, altura_triangulo, area_triangulo : real;
(* declaracion de subprogramas *)
procedure LeerDatos(var base,altura : real);
begin
(* lectura de la base *)
Write(Ingrese base del triangulo: );
ReadLn(base);
while base <= 0 do (* validacion *)
begin
WriteLn(La base debe ser un real positivo);
Write(Ingrese base del triangulo: );
ReadLn(base);
end;
(* lectura de la altura *)
Write(Ingrese altura del triangulo: );
ReadLn(altura);
while altura <= 0 do (* validacion *)
begin
WriteLn(La altura debe ser un real positivo);
Write(Ingrese altura del triangulo: );
ReadLn(altura);
end;
end; { LeerDatos }
LeerDatos(base_triangulo,altura_triangulo);
area_triangulo:=
CalcularAreaTriangulo(base_triangulo,altura_triangulo);
3
MostrarResultado(area_triangulo);
end.
1.4 Introduccin
Un subprograma es un fragmento de cdigo que se comporta de manera independiente dentro de
un programa.
Los subprogramas pueden ser invocados varias veces desde otras partes del programa.
Se comunican mediante el pasaje de parmetros.
Algunos identificadores pueden ser compartidos entre subprogramas y el programa principal (iden-
tificadores globales).
const
<declaraciones de constantes>
type
<declaraciones de tipos>
var
<declaraciones de variables>
<declaraciones de subprogramas>
begin
<instrucciones>
end
1.6 Encabezados
Todo bloque viene precedido de un encabezado:
2 Funciones
2.1 Introduccin
Una funcin es un subprograma que retorna un valor simple.
4
2.2 Declaracin de una funcin
Sintaxis:
2.4 Parmetros
La lista de parmetros tiene esta forma:
Los parmetros efectivos son las expresiones que aparecen en la invocacin de la funcin.
pot:= potencia(pi,23);
...
WriteLn(potencia(2*pi*sqr(radio),N+2));
Para cada parmetro, el tipo del parmetro nominal y el tipo del respectivo parmetro efectivo
deben ser compatibles.
5
2.6 Ejemplo de funcin
La funcin potencia
if negativo then
potencia:= 1 / pot
else
potencia:= pot;
end;
ReadLn(base);
for i:= 1 to 10 do
WriteLn(base:6:2,
^,
i:2,
=,
potencia(base,i):10:2);
begin
...
potencia:= valor; (* valor retornado *)
...
end
(* incorrecto *)
potencia:= potencia * base
6
type
arreglo = array [0..N] of integer;
pertenece:= i <= N;
end; {pertenece}
begin
i:= 2;
tope:= trunc(sqrt(numero));
while (i<=tope) and not divide(i,numero) do
i:= i+1;
3 Procedimientos
3.1 Introduccin
Los procedimientos no retornan un valor en su nombre.
Se invocan como una instruccin independiente.
El encabezado de un procemiento tiene esta forma:
7
for i:= 1 to N do
WriteLn(i,-->,A[i]);
end;
4 Pasaje de parmetros
4.1 Pasaje de parmetros por valor
Pasaje por valor: Son los parmetros no precedidos por var
En el momento de la invocacin se realiza una copia de los valores de los parametros efectivos
a los parmetros nominales.
Los parmetros efectivos pueden ser expresiones
(* pasaje de parmetros *)
a:= 23;
b:= N*2;
(* cdigo de la funcin *)
...
8
4.4 Pasaje de prmetros por referencia: ejemplos (2)
Modificar un arreglo: Sumar algo a todos los elementos.
(* el tipo T es cualquiera *)
procedure intercambio(var a,b: T);
var
aux: T;
begin
aux:= b;
b:= a;
a:= aux;
end;
5 Recomendaciones de estilo
5.1 Recomendaciones de estilo: funciones
No utilizar pasaje por referencia con funciones.
No hacer entrada y salida dentro de funciones (read, write, etc)
No utilizar variables globales (declaradas en el programa principal) dentro de subprogramas.
Asignar una sola vez y al final el valor de la funcin.
Definir funciones para todo clculo intermedio que sea independiente.
Slo definir funciones cuya semntica sea clara.
9
6 Reglas de alcance
6.1 Alcance
El alcance de un identificador es aquella porcin del programa en que dicho identificador es
visible.
Existen reglas de alcance que definen la visibilidad de cada identificador.
Ejemplo:
begin
... (* sentencias de p *)
end;
begin
... (* sentencias de p *)
end;
10
6.4 Funciones y procedimientos (1)
Los identificadores de funciones y procedimientos son visibles en el bloque donde estn definidos y
en todos los sub-bloques que siguen a su declaracin (incluyendo el de su propia definicin).
begin
... (* sentencias de p *)
end; {p}
11