Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROCEDIMIENTOS Y FUNCIONES
Explicación Práctica
Programación I - 2021
Facultad de Informática y Facultad de Ingeniería - UNLP
Programa con módulos
Estructura
Program NombrePrograma;
Type
{declaraciones de tipos de datos}
var
{variables a usar en el programa principal}
begin
{Acciones del prog. principal}
end.
Procedimientos( Similares a los procesos vistos del R-info. )
le s:
Program NombrePrograma; Parámetros forma
o:
Type Para cada parámetr
{declaraciones de tipos de datos} • Tipo de pasaje: ia (VAR)
por valor o referenc
etro
Procedure nombre (lista de parámetros); • Nombre del parám
Var • Tipo de dato
{Variables locales al procedimiento}
Begin
{Cuerpo del procedimiento}
end;
var
cedure:
Invocación al pro l proc. con
{variables a usar en el programa
principal} re de
Utilizando el nomb
begin lis ta d e p a rá m e tr os actuales
la
{Acciones del prog. principal} e param.
La asociación entr
nombre(param actuales) les y a ctu a les es p or posición.
forma
end.
Parámetros por valor
Concepto:
• Similar a los parámetros de entrada (E) de R-Info
• USO: El módulo necesita recibir información para realizar su tarea.
• El llamador no ve modificaciones en el parámetro actual.
Mecanismo:
• Se realiza una copia del valor del parámetro actual en otra posición de
memoria correspondiente al parámetro formal. Esta copia se destruye
cuando se termina de ejecutar el módulo.
• Dentro del módulo se puede modificar el valor del parámetro, pero el
cambio no será visto por el llamador.
Parámetros por valor ¿Qué imprime?
Program paramValor;
Procedure uno (a: integer);
var
total: integer;
Begin
total:= 3;
total:= total + a;
a:= a + 1;
writeln ('El valor de total es:
',total);
writeln ('El valor de a es: ', a);
end;
var
x: integer;
begin
x:= 30;
uno(x);
writeln ('El valor de x es: ', x);
readln;
end.
Parámetros por valor ¿Qué imprime?
Program paramValor;
Uno
Procedure uno (a: integer);
var 30
31 3
33
total: integer;
Begin a total
total:= 3;
total:= total + a;
a:= a + 1;
writeln ('El valor de total es:
',total); El valor de total es: 33
writeln ('El valor de a es: ', a); El valor de a es: 31
end;
var Programa principal
x: integer;
begin
x:= 30; 30
uno(x); X
writeln ('El valor de x es: ', x);
readln;
end. El valor de x es: 30
Parámetros por referencia
Concepto:
•Similar que a los parámetros de entrada/salida (ES) del robot.
•USO: El módulo necesita opcionalmente recibir un dato, procesarlo y devolverlo
modificado al llamador.
•Cuando se modifica el parámetro formal, la modificación es vista por el módulo
llamador.
Mecanismo:
•El parámetro formal recibe la dirección de memoria donde se encuentra la
variable que se pasó como parámetro actual.
•El parámetro actual y formal “comparten” el mismo espacio de memoria.
Parámetro por referencia ¿Qué imprime?
Program paramReferencia;
Procedure uno (var a: integer);
var
total: integer;
Begin
total:= 3;
total:= total + a;
a:= a + 1;
writeln ('El valor de total es:
',total);
writeln ('El valor de a es: ', a);
end;
var
x: integer;
begin
x:= 30;
uno(x);
writeln ('El valor de x es: ', x);
readln;
end.
Parámetro por referencia ¿Qué imprime?
Program paramReferencia;
Uno
Procedure uno (var a: integer);
var a 3
33
total: integer; total
Begin
total:= 3;
total:= total + a;
a:= a + 1;
writeln ('El valor de total es: El valor de total es: 33
',total);
El valor de a es: 31
writeln ('El valor de a es: ', a);
e e l m ód ulo y su
o mu nica r ent r
¿Qué da t o s a c
llamador?
1. Calcular el factorial
2. ¿Qué necesitamos hacer con cada valor leído? 2. Imprimir resultado
Var
num, c: integer;
Begin
write('Ingrese un numero para calcular su factorial: ');
readln(num);
while (num > 0) do begin
c:= factorial(num);
writeln ('El factorial de ',num, 'es: ', c);
write('Ingrese un numero para calcular su factorial: ');
readln(num);
end;
end.
Program numeros;
Function factorial (n:integer): integer;
Solución
Var
i : integer;
fac: integer;
Begin
r la
fac:= 1;
For i:= 2 to n do ¿ Se p ue d e
al
e
fa
lim
c y
i n
u
a
t i li zar
fac:=fac * i;
factorial:= fac; variable lo c
end; para el cálculo
e n t e f a c t or ial ?
Var
num, c: integer; directam
Begin
write('Ingrese un numero para calcular su factorial: ');
readln(num);
while (num > 0) do begin
c:= factorial(num);
writeln ('El factorial de ',num, 'es: ', c);
write('Ingrese un numero para calcular su factorial: ');
readln(num);
end;
end.
Funciones
Invocación
Ejemplo
Hacer un programa que lea un carácter e indique si el mismo es un carácter
numérico o no. alor
rna un v
Reto
le a n o q ue se
program ejemplo1; boo
n if
function verificar (caracter: char) : boolean; usa en u
begin
verificar := (caracter >= ‘0') and (caracter <= '9');
end;
var
carac: char;
begin
writeln('Introduce un caracter para ver si es numerico.');
readln(carac);
if ( verificar (carac) )then
writeln('El carácter introducido es numérico.')
else
writeln('El carácter introducido no es numérico.');
end.
Invocación a una función
A la derecha de una asignación
Ejemplo
Realice un programa que lea dos números e imprima el cuadrado de ambos.
n a u n v a l or
f u n c ió n retor a lo r es
la h o v
program ejemplo2;
t ip o re al. Dic ble del
de a v a ria
si g na d o a un )
function cuadrado(a:real):real; a ( u a d1, cuad2
i po c
begin mismo t
cuadrado := a*a;
end;
var
x, y, cuad1, cuad2: real;
begin
writeln('Introduzca dos numeros reales: ');
write(' primer numero: '); readln(x);
write(' segundo numero: '); readln(y);
cuad1:= cuadrado (x);
cuad2:= cuadrado (y);
writeln(cuad1,cuad2);
end.
Invocación a una función
Dentro de un write (si el valor retornado se puede imprimir)
Ejemplo
Realice un programa que lea dos números e imprima el cuadrado de ambos.
e c ta m e nte el
u e stra dir
program ejemplo3; Se m
d e la f unción
o
resultad n write.
function cuadrado(a:real):real; d e u
dentro
begin
cuadrado := a*a;
end;
var
x, y: real;
begin
writeln('Introduzca dos numeros reales: ');
write(' primer numero: '); readln(x);
write(' segundo numero: '); readln(y);
writeln(cuadrado (x), cuadrado (y));
end.