Title: Procedimientos y Funciones
1Procedimientos y Funciones
- El desarrollo de un programa es un proceso que
requiere el uso de estrategias y herramientas. - En la etapa de diseno una estrategia muy útil es
dividir para conquistar. - La estrategia consiste en dividir el problema en
subproblemas más simples que puedan atacarse por
separado. - Cada subproblema puede dividirse a su vez hasta
alcanzar un nivel de complejidad razonable.
2Procedimientos y Funciones
- Esta materia está enfocada a la división en base
a acciones. - En la etapa de diseno se divide el problema en
problemas más simples identificando las acciones.
- En la etapa de implementación cada subproblema
quedará asociado a un subprograma. - Así la estructura del programa reflejará la
estructura del problema identificada en la etapa
de diseno.
3Procedimientos y Funciones
- Escribir un programa que lea dos fracciones,
compute la suma y muestre el resultado como una
fracción irreducible.
4Procedimientos y Funciones
- Leer la primera fracción
- Leer la segunda fracción
- Sumar las dos fracciones para generar la fracción
resultado - Reducir la fracción resultado
- Mostrar la fracción reducida
Representamos cada fracción como un par de
números enteros, numerador y denominador. El
denominador tiene que ser positivo.
5Procedimientos y Funciones
program suma var num1,num2,nsum,nred,
den1,den2,dsum,dred integer ... begin
leerFraccion (num1,den1) leerFraccion
(num2,den2) sumarFracciones (num1,den1,num2,den
2, nsum,dsum) reducirFraccion
(nsum,dsum,nred,dred) mostrarFracción
(nred,dred) end.
La estructura del programa refleja la estructura
del problema
6Procedimientos y Funciones
procedure leerFraccion (var num , den
integer) begin write (Ingrese el
numerador) readln (num) repeat write
(Ingrese el denominador) readln (den)
if (den lt 0) then writeln(Error en el
denominador) until (den gt 0) end
begin leerFraccion ( num1 , den1 )
leerFraccion ( num2 , den2 ) ... end.
7Procedimientos y Funciones
- El programa principal invoca al procedimiento
mediante una instrucción de llamada y se
suspende. - Cuando un procedimiento es invocado el control
pasa al procedimiento. - El bloque de instrucciones del procedimiento se
ejecuta y cuando termina el control retorna al
programa principal. - El mismo procedimiento puede ser invocado en
distintos puntos del programa. - En cada invocación o llamada el control retorna a
la instrucción siguiente.
8Procedimientos y Funciones
programa principal
invoca y se suspende
leerfraccion
retorna
reanuda
invoca y se suspende
leerfraccion
retorna
reanuda
9Procedimientos y Funciones
- El procedimiento se comunica con el exterior a
través del pasaje de parámetros. - En la invocación se incluye una lista de
parámetros llamados argumentos o parámetros
actuales. - En la definición se incluye una lista de
parámetros llamados parámetros formales. - Los parámetros formales incluyen el tipo de dato
y el tipo de pasaje.
10Procedimientos y Funciones
- El tipo de pasaje puede ser por valor o por
referencia. - Si los valores computados por el procedimiento
deben comunicarse hacia el exterior, el pasaje de
parámetros es por referencia. - La lista de parámetros pasada por referencia está
precedida por la palabra reservada var. - El pasaje de parámetros es por valor cuando los
valores de los parámetros no van a ser
modificados o la modificación no tiene que
afectar al exterior del procedimiento.
11Procedimientos y Funciones
procedure leerFraccion (var num , den
integer) begin write (Ingrese el
numerador) readln (num) repeat write
(Ingrese el denominador) readln (den)
if (den lt 0) then writeln(Error en el
denominador) until (den gt 0) end
begin leerFraccion ( num1 , den1 ) ... end.
12Procedimientos y Funciones
procedure leerFraccion (var num , den
integer) begin write (Ingrese el
numerador) readln (num) repeat write
(Ingrese el denominador) readln (den)
if (den lt 0) then writeln(Error en el
denominador) until (den gt 0) end
begin leerFraccion ( num1 , den1 )
leerFraccion ( num2 , den2 ) ... end.
13Procedimientos y Funciones
procedure sumaFraccion (num1 , den1
num2 , den2 integer
var nsum, dsum integer ) begin
nsum num1den2 num2den1 dsum den1
den2 end
begin ... sumaFraccion (num1, den1, num2,
den2, nsum, nden) ... end.
14Procedimientos y Funciones
- El procedimiento sumaFraccion recibe dos
fracciones y genera una tercera fracción. - Cada fracción está asociada a dos variables
enteras. - Las cuatro variables que mantienen a los
operandos de la suma no van a ser modificadas,
usamos pasaje de parámetros por valor. - Los valores de las dos variables que mantienen el
resultado de la suma se computan en el
procedimiento y deben ser comunicados al programa
principal, el pasaje de parámetros es por
referencia.
15Procedimientos y Funciones
program suma var num1,num2,nsum,nred,
den1,den2,dsum,dred integer ... begin
leerFraccion (num1,den1) leerFraccion
(num2,den2) sumarFracciones (num1,den1,num2,den2
, nsum,dsum) reducirFraccion ( nsum ,
dsum , nred , dred ) mostrarFracción
(nred,dred) end.
16Procedimientos y Funciones
- El procedimiento reducirFraccion recibe una
fracciones y genera otra. - Cada fracción está asociada a dos variables
enteras. - Las dos variables que representan a la fracción
recibida no van a cambiar de valor, el pasaje de
parámetros es por valor. - Los valores de las dos variables que mantienen el
resultado de la suma se computan en el
procedimiento y deben ser comunicados al programa
principal, el pasaje de parámetros es por
referencia.
17Procedimientos y Funciones
procedure reducirFraccion (num , den integer
var nred, dred
integer ) begin nred num div mcd
(num,den) dred den div mcd (num,den) end
begin ... reducirFraccion (nsum,dsum,nred,dred
) ... end.
18Procedimientos y Funciones
- El procedimiento reducirFraccion invoca a la
función mcd que debe ser definida por el
programador. - La función se invoca en el contexto del cómputo
de una expresión. - Cuando la función es invocada el control pasa al
bloque de instrucciones de la función. - El bloque de instrucciones de la función se
ejecuta y cuando termina el control retorna al
cómputo de la expresión - Al retornar se espera que la función haya
computado un valor.
19Procedimientos y Funciones
function mcd (n,m integer) integer var r
integer begin mayorPrimero (n,m) while (n mod
m ltgt 0) do begin r n mod m n
m m r end mcd n end
20Procedimientos y Funciones
- La invocación incluye la lista de parámetros
actuales o argumentos, sobre los que se aplica la
función. - La definición incluye la lista de parámetros
formales cada uno acompanado de un tipo de dato y
un tipo de pasaje - Aunque los parámetros de una función pueden pasar
por referencia, por el momento adoptaremos la
convención de que el pasaje sea por valor.
21Procedimientos y Funciones
function mcd (n,m integer) integer var r
integer begin mayorPrimero (n,m) while (n mod
m ltgt 0) do begin r n mod m n
m m r end mcd n end
22Procedimientos y Funciones
procedure mostrarFraccion (num , den
integer) begin writeln (num, /,den) end
begin ... sumaFraccion (num1, den1, num2,
den2, nsum, nden) reducirFraccion
(nsum,dsum,nred,dred) mostrarFraccion
(nred,dred) end.
23Procedimientos y Funciones
program suma ... procedure leerFraccion (var
num,den integer) begin ... end procedure
sumarFracciones (num1,den1,
num2,den2 integer
var nsum,dsum integer ) begin
... end procedure reducirFraccion ( num,den
integer var
nred,dred integer) begin ... end begin
... end.