Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ingeniería en Informática
Universidad FASTA
Lic. Claudio Gea
Ing. Luis Buffoni
Ing. Gonzalo Amigo
2
Subprogramas
La solución de un problema puede abarcar un
A conjunto de etapas bien diferenciadas, cada una
de ellas, puede ser pensada e implementada como
un proceso individual. La unión de todos ellos lleva
B a la solución del problema completo.
Un subprograma es un módulo o sección
autónoma del programa, que realiza una tarea
C específica.
Puede ser invocado por el programa o por otros
{programa principal} subprogramas siempre que se necesite ejecutar la
begin
tarea para la cual fue hecho.
A;
Al “partir” la solución, cada subprograma, está
B; acotado y atiende una tarea específica, siendo más
fácil de interpretar y corregir, para garantizar el
C; correcto funcionamiento.
A;
End.
End.
3
Aporte de los subprogramas
Divide y reinarás!!
4
Subprogramas
Función
Tipos de subprogramas
Procedimiento
5
Concepto matemático de función
F(x) = 2x2 - 3.8 F(5)= 46.2
nombre
Argumento o parámetro formal
Se utiliza para definir o formalizar
lo que calcula la función
Nombre
Tipo de resultado de la
función
.............
9
Parámetros: tipos de comunicación
Program SumaN;
Function Suma(N: word): word;
Var
Aux, i: word; Variables locales
Propias del subprograma, no reconocidas fuera de su
Begin
ámbito.
Aux:= 0; Su permanencia en memoria se limita al tiempo de
For i := 1 to N do ejecución del subprograma.
Aux:= Aux + i;
Suma := Aux
End;
Var ¿Por qué no se lee N dentro de la función?
M: word; ¿Por qué se utiliza la variable Aux?
Begin
Write('Ingresar un numero: '); Readln(M);
Writeln('La suma es ' , Suma (M))
End.
12
Ejemplo 3 - Se desarrolla para el ejemplo 11 del capítulo 4 una solución que utiliza una función
string, que a partir de las tres notas (Matemáticas, Física y Química) devuelve una cadena que
indica si el alumno ingreso (‘C1’, ‘C2’, ‘C3’) o no (‘No’).
Program Cap4Ej11; {utilizando una función}
Type
St2 = string[2];
13
Subprogramas
Función
Tipos de subprogramas
Procedimiento
14
Procedimientos: declaración
...........
...........
End;
15
Ejemplo 4.a - Leer dos valores reales y mostrar como resultado su suma y su producto.
El subprograma debe escribir la suma y el producto, por lo tanto no puede ser una función,
se implementa un procedimiento.
Program Ejemplo4_a;
Procedure CalculaImprime( W, Z : real); {W y Z parámetros formales de entrada}
Begin
Writeln('La suma es = ', W + Z);
Writeln('El producto es = ', W * Z);
End;
Var
X, Y: real;
Begin
Write('Ingresar dos numeros: '); Readln (X, Y);
CalculaImprime (X, Y); {invoca el procedimiento, X e Y parámetros actuales}
End.
16
Ejemplo 4.b - Leer dos valores reales y desarrollar un procedimiento que devuelva su suma y
su producto, siendo el programa invocante el que imprima los resultados.
¿Cómo hacer para que el procedimiento devuelva los
resultados y el programa invocante los imprima?
Program Ejemplo4_b;
Begin
Suma := W + Z;
Producto := W * Z;
End;
Var
X, Y, Sum, Prod: real;
Begin
Write('Ingresar dos números: '); Readln (X, Y);
Calcula (X, Y, Sum, Prod); { invoca el procedimiento }
Writeln ('La suma es = ', Sum);
Writeln ('El producto es = ', Prod);
End. 17
Parámetros variables o por referencia
por referencia
18
Ejemplo 5.- Procedimiento que a partir de dos variables reales
intercambia el contenido.
19
Pasaje de parámetros por valor
20
Pasaje de parámetros por valor
Formales: identificadores
Actuales: Variable, Constante, Expresión
21
Pasaje de parámetros por referencia
22
Pasaje de parámetros por referencia
Formales: identificadores
Actuales: Variables
Ejemplo( x, b, w);
23
El siguiente cuadro resume la compatibilidad entre parámetros formales y actuales, de
acuerdo a su comunicación (bidireccional y unidireccional)
Los parámetros
formales
son siempre
identificadores
(nombres de fantasía
que se utilizan para PARÁMETROS ACTUALES
describir las acciones
que realiza el Debe tener un
subprograma) valor
F Constante Se evalúa su
resultado
O VALOR (Entrada) Variable
R -unidireccional- Expresión
M
A
VARIABLE (Salida o
L Variable Pueden tener o
E/S)
E no valor previo
-bidireccional-
S
24
¿Cuándo se debe utilizar procedimiento y cuándo una
función?
25
Algunas conclusiones
Los parámetros pueden ser clasificados por:
Su intervención en la definición (formales) o en su invocación (actuales)
Su forma de comunicación: unidireccional (valor) o bidireccional (variable o
referencia)
Su rol como ingreso de datos al subprograma (entrada), entrega de resultados
(salida) o ambos aspectos (entrada/salida)
26
Definiciones anidadas de subprogramas
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 DefinicionesAnidadas;
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 }
......... Los procedimientos A y B son desconocidos en el
C(......); programa principal y no pueden ser invocados por éste.
End.
27
Alcance local y global
Se define el alcance de un objeto (variable, tipo, función o procedimiento) al
ámbito de acción de dicho objeto. Puede ser global o local.
Program Globales;
En la declaración de un programa (programa Var
X,Y, W: real;
principal) se especifican constantes, tipos, Procedure Muestra(Z: real);
Begin
procedimientos y funciones que son reconocidos Writeln(X, Y, Z)
en todo el programa incluyendo los subprogramas End;
Begin {programa principal}
definidos dentro del mismo, por lo tanto estos Readln(X,Y,W);
Muestra(W);
objetos son globales. End.
Program Locales;
Procedure Muestra(Z: real);
En la declaración de un subprograma los Var X,Y: real;
Begin
identificadores de parámetros (formales), las Readln(X, Y);
definiciones de constantes, tipos, la declaración de Writeln(X, Y, Z)
End;
variables, procedimientos y funciones propios, son Var
locales al subprograma declarado, no se les W: real;
Begin {programa principal}
conoce fuera de este ámbito, estos objetos son Readln(W);
Muestra(W);
llamados locales. End.
28
Alcance local y global
Los objetos globales son reconocidos dentro del procedimiento, el cual puede
modificar las variables globales y producir alteraciones no deseadas.
Al utilizar una variable global, el subprograma establece una dependencia con
el identificador, (en contraste con la independencia de los identificadores
entre los parámetros formales y actuales).
La cabecera de un subprograma permite a través de su nombre asociar la
tarea que realiza (Suma, Escribe) y los parámetros indican qué información
recibe y qué resultados devuelve.
Ejemplo: Intercambia(A, B) y no Intercambia()
30
Program Electricidad;
Function Precio(Consum : word) : real; {define función, Consum parámetro de entrada}
Begin
If Consum <= 100 then
Precio := 0.54
else
if Consum <= 250 then
Precio := 0.48
else
Precio := 0.37;
End;
Procedure Boleta(EstAct, EstAnt: word; Var Imp: real; Var Cons: word);
Begin
Cons := EstAct - EstAnt;
Imp := 50 + Cons * Precio(Cons); {invoca función, el parámetro actual es parámetro formal del proced}
End;
{Programa Principal}
Var
NroUsu: string [10]; Cons, EstAct, EstAnt, I, N: word; Imp: real;
Begin
Write('Ingresar cantidad de usuarios: '); Readln(N); Es muy recomendable declarar las variables del
For I := 1 to N do programa principal inmediatamente antes del
Begin
Readln(NroUsu); Readln(EstAct, EstAnt); cuerpo del mismo, en lugar de hacerlo al comienzo
Boleta (EstAct, EstAnt, Imp, Cons); del programa (antes de la implementación de los
Imprime(NroUsu ,Imp, Cons,); subprogramas). La causa de esto es evitar el uso
end; 31
End. accidental de variables globales
Programación Modular
• División del programa principal en módulos independientes
• Facilita división del trabajo en tareas simultáneas
• “Divide y reinarás”
32
Programación Estructurada
• Programa con diseño modular
• Módulos diseñados de modo descendente (top-down)
– Serie de niveles o pasos sucesivos de refinamiento
– Se descompone el problema en etapas o estructuras jerárquicas
• Solamente se usan las 3 estructuras de control básicas: secuencial,
selección y repetición.
– Minimizar complejidad y reducir errores
• No permitir GOTO (salto incondicional a cualquier línea del
programa)
33
Programación Estructurada
• “Un solo punto de entrada y uno solo de salida”
• No salir o cortar arbitrariamente los ciclos con sentencia Break o Continue
34
Programación Estructurada - Funciones
Las funciones no deben:
•Tener parámetros de salida
•Leer ni escribir
35
Acoplamiento
Grado de dependencia entre módulos (subprogramas)
Si hacer cambios en un módulo implica que sea necesario hacerlos en
otro módulo distinto, entonces se puede decir que ambos están
acoplados.
Puede generarse por:
•Tener código repetido
•Compartir contenido
•Por el uso de variables globales (Evitar!)
36
Cohesión
Efecto de reunirse las cosas entre sí, con sentido y una dirección
común.
Alcance definido, límites claros, contenido delimitado.
Las funciones o procedimientos realizan una única tarea. Por ej, si tenemos
Es preferible subdividirlo en 2 subprogramas que hagan una sola cosa cada una
• Function calcula(a, b: integer): integer;
• Procedure imprime(resultado: integer);
37
Acoplamiento vs. Cohesión
Casos extremos:
•Subprograma “gigante” que hace demasiadas cosas.
•Muchos subprogramas pequeños con responsabilidad bien
delimitada, reutilizables. Comprenderlos implica explorar muchos
módulos.
38
Acoplamiento vs. Cohesión
Bajo acoplamiento:
•Más mantenible: facilita cambios sin tener que revisar módulos dependientes
•Más reutilizable
•Pruebas más fáciles
Alta cohesión:
•Código más entendible, legible y coherente
•Más reutilizable: todo lo relacionado con una cosa está junto en un módulo
•Más mantenible: facilidad de localizar funcionalidad
39