Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Subprogramas, Procedimientos y
Funciones
Tema II
Introduccin a los subalgoritmos o subprogramas. Funciones. Declaracin e
invocacin de funciones. Procedimientos (subrutina). Procedimientos
versus Funciones. Sustitucin de parmetros. mbito: Variables locales y
globales. Funciones y Procedimientos con parmetros. Efectos laterales.
Procedimientos y funciones
Supongamos que queremos escribir un programa que pida al usuario
el valor de un cierto ngulo en grados sexagesimales, calcule su
tangente y escriba su valor con dos decimales. En una primera
aproximacin podramos escribir:
Procedimientos y funciones
Procedimientos y funciones
Concretando algunas de las ideas introducidas
Pascal proporciona mecanismos para ampliar los procedimientos y funciones
predefinidos, definiendo otros nuevos a la medida de las necesidades del programador.
Cada procedimiento o funcin es, en s mismo, un pequeo programa, tanto por su
estructura sintctica (con encabezamiento, declaraciones y cuerpo) como por su
cometido (resolver un problema concreto con los datos recibidos y ofrecer los
resultados obtenidos).
Existen dos puntos de consideracin de estos subprogramas: su definicin, donde se
introducen, y su llamada, donde se utilizan.
En su definicin, ambas clases de subprogramas operan sobre datos genricos, sus
parmetros, que tomarn valores en cada llamada, esto es, cuando se hace uso de
los subprogramas para unos datos particulares.
Un procedimiento es un subprograma que desempea el papel de una instruccin,
mientras que una funcin es un subprograma que desempea el de una expresin,
puesto que calcula un valor, que se reemplaza por la llamada a la funcin.
Procedimientos y funciones
Este distinto cometido se refleja en su llamada: los procedimientos se
usan como las dems instrucciones.
Mientras que las funciones representan un valor, por lo que tienen sentido
como expresiones:
Por el contrario, no est permitido ni tiene sentido llamar a una funcin como un
procedimiento:
Son canales de comunicacin para pasar datos ente programas y subprogramas en ambos sentidos.
Estn asociados a variables. constantes, expresiones, etc., y por tanto, se indican mediante los
correspondientes identificadores o expresiones.
Los parmetros son opcionales y si no se necesitan no se deben usar. Para utilizarlos es necesario
declararlos: PROCEDURE nombre (lista de parmetros);
Parmetros
En Pascal, es obligatorio indicar el tipo de los parmetros que pasan como
argumentos a los subprogramas. En el caso de una funcin, se debe
indicar adems el tipo del resultado que se devuelve al programa principal
subprograma que efectu la llamada.
No es obligado que el(los) argumento(s) de una funcin sea(n) del mismo tipo
que su resultado.
PROCEDURE Titulo;
BEGIN
WriteLn ('Programa de Turbo Pascal');
END;
En Pascal cada
identificador tiene un
campo de accin,
solo dentro de ste
campo es posible
utilizarlo. Ej.: Las
variables, que pueden
ser globales o locales.
PROGRAM Variables;
VAR
Hola : String;
PROCEDURE prueba;
VAR
Adis : String;
BEGIN
{En esta seccin si es posible usar la variable Hola}
Adis := 'Adios, que les vaya bien';
WriteLn (Adis);
END;
BEGIN
{En esta seccin no se reconoce a la variable Adis}
Hola := 'Hola, bienvenidos al programa';
WriteLn (Hola);
WriteLn (Adis);
{Al compilar el programa se generar un error ya}
prueba;
END.
Criterios de localidad
De esta forma se puede modificar un subprograma sin tener que cambiar los dems,
facilitando tanto el diseo del programa como posteriormente su depuracin y
mantenimiento.
Condiciones:
Principio de mxima localidad: Todos los objetos particulares de un subprograma,
necesarios para que desempee su cometido, deben ser locales al mismo.
Principio de autonoma de los subprogramas: La comunicacin con el exterior debe
realizarse exclusivamente mediante parmetros, evitndose dentro de los subprogramas
toda referencia a objetos globales.
Efectos laterales
Tanto para los procedimientos como para las funciones, dichos valores
pueden enviarse mediante parmetros por referencia.
Programacin Estructurada
Los avances tecnolgicos no necesariamente estn acompaados por una evolucin en las
tcnicas de construccin de programas.
Se requieren programas mas complejos y de gran tamao.
Diseo Descendente o Diseo Top-Down. Consiste en una serie de descomposiciones
sucesivas del problema inicial, que describen el refinamiento progresivo del conjunto de
instrucciones que van a formar parte del programa.
Las tcnicas de desarrollo y diseo de programas, que se utilizan en la programacin
convencional o lineal, tienen inconvenientes, sobre todo a la hora de verificar y modificar
programas.
Tcnicas que facilitan la comprensin del programa: Programacin estructurada
Pioneros de esta metodologa: Dijkstra, Warnier, Jackson, Chapin y Bertini; y de los
Lenguajes de Programacin Estructurada Niklaus Wirth, Dennis Ritchie y Kenneth
Thompson.
Estructura: Es la descomposicin ordenada de las partes de un todo. Conjunto de
elementos interrelacionados que forman un todo.
Programacin Estructurada: Consiste en el diseo, escritura y prueba de un programa,
construido con estructura, o sea con una organizacin ordenada del todo en partes
interdependientes.
Programacin estructurada
Los bloques de un diagrama de flujo
pueden ser de cuatro clases
distintas
Smbolos terminales, que indican el
principio y el final del algoritmo. Se
representan usando valos.
Smbolos de entrada y salida de
datos. Respectivamente, significan
lectura y escritura.
Bloques de procesamiento de datos,
que realizan operaciones con los
datos ledos o con datos privados.
Se representan mediante
rectngulos que encierran la
especificacin del proceso.
Nudos de decisin, en los que se
elige entre dos o ms alternativas.
Segn las alternativas sean dos
(generalmente dependiendo de una
expresin lgica) o ms de dos.
Programacin estructurada
Diagramas y diagramas propios
Figuras Lgicas
Secuencia: En este caso, las instrucciones
se ejecutan una despus de la otra sin
omitir ninguna de ellas.
Begin
N := 0;
Write (Nombrey Apellido, NYA);
N := N + 1
End.
Figuras Lgicas
Seleccin: La seleccin de alternativas en Pascal se realiza con alguna de las
dos siguientes formas :
Figuras Lgicas
Iteracin:
El cuerpo del bucle contiene las sentencias que se repiten. Pascal proporciona
tres estructuras o sentencias de control para especificar la repeticin:
Teorema de la Estructura
Mtodos
Con la filosofa de la programacin estructurada distintos autores han desarrollados trabajos
que varan unos de otros en el mtodo, pero todos tienen como bases los conceptos
tericos de Dijkstra.
Mtodo Jackson. La filosofa del mismo tiene caractersticas comunes con la programacin
estructurada. Las estructuras bsicas se llaman diagramas de bloques y se representan
con los smbolo. La representacin de la secuencia de acciones se hace en forma de
rbol, leyndose de izquierda a derecha a un mismo nivel.
PROGRAMA
INICIO
PROCESO
FIN
*
FIN DE ARCHIVO
SECUENCIAL
ALTERNATIVA
REPETITIVA
IMPRIME
TOTALES
TOTALES
CALCULO
CARGAS
FAMILIARES
TIENE
NO TIENE
CALCULO HORAS
EXTRAS
HAY HORAS
NO HAY
Mtodo Bertini
En esta metodologa las estructuras bsicas se representan con los siguientes smbolos.
Estas estructuras forman los que se denominan rboles programticos, donde cada nivel
es, como en otros modelos, los refinamientos que se van realizando.
PROGRAMA
SECUENCIAL
ALTERNATIVA
REPETITIVA
PROGRAMA
PARA CADA
EMPLEADO
FIN
INICIO
HORAS
EXTRAS
CARGA
FAMILIA
NO
SI
NO
SI
Mtodo Warnier
Una de las caractersticas de esta manera de hacer programas estructurados consiste
en la representacin por medio de lo que se denomina cuadro de descomposicin en
secuencias, forma grfica que utiliza llaves para representar los niveles de
descomposicin del problema.
Las estructuras bsicas de esta metodologa son las siguientes:
Secuencia: acciones especificadas que no son ni repeticiones ni alternativas. La
secuencia de acciones es de arriba hacia abajo en el cuadro de descomposicin de
secuencia
Repetitiva: En esta estructura, entre parntesis se escribe el nmero de veces que
se repite
PRINCIPIO
(1 vez)
PRINCIPIO
(1 vez)
TRATAMIENTO A
(0, 1 vez)
REPETITIVA
TRATAMIENTO
(t veces)
FINAL
(1 vez)
ALTERNATIVA
TRATAMIENTO B
(1, 0 vez)
FINAL
(1 vez)
PROGRAM USO_PROCEDIMIENTO;
USES CRT;
VAR
CANT_ALUMNOS:INTEGER;
CANT_REG:INTEGER;
CANT_LIB:INTEGER;
CANT_PROM:INTEGER;
CONDICION:STRING[10];
LIBRETA:INTEGER;
NOTA1:REAL;
NOTA2:REAL;
PROCEDURE VERCONDICION;
PROCEDURE PRIPROG;
BEGIN
CANT_ALUMNOS:=0;
BEGIN
CANT_REG:=0;
CANT_LIB:=0;
IF PROMEDIO (NOTA1, NOTA2) >= 7 THEN
BEGIN
CANT_PROM:= CANT_PROM + 1;
CONDICION:='PROMOCIONO';
END
CANT_PROM:=0;
INGRESODATOS;
END;
ELSE
BEGIN
CANT_REG:=CANT_REG + 1;
CONDICION:='REGULARIZO';
END;
PROCEDURE INGRESODATOS;
BEGIN
CLRSCR;
END;
END;
PROCEDURE PROCESO;
BEGIN
IF(
' );NOTA1 >= 6) AND (NOTA2 >= 6) THEN
VERCONDICION
ELSE
' );
BEGIN
CANT_LIB:= CANT_LIB + 1;
CONDICION:='LIBRE'
END;
MOSTRAR;
PROCEDURE MOSTRAR;
GOTOXY(10, 10);
READKEY;
END;
END;
PRIPROG;
BEGIN
CLRSCR;
WRITELN(LIBRETA, '
CONDICION);
BEGIN
CLRSCR;
PROCESO;
********************************** ',
INGRESODATOS;
END;
FINPROGRAMA;
READKEY;
END.
PROCEDURE FINPROGRAMA;
BEGIN
CLRSCR;
GOTOXY(10, 10); WRITE(' TOT. REGULARES ------>
');
GOTOXY(10, 12); WRITE(' TOT. LIBRES
------> ');
GOTOXY(10, 14); WRITE(' TOT.PRIOMOCIONAL -----> ');
GOTOXY(35, 10); WRITE(CANT_REG:4);
GOTOXY(35, 12); WRITE(CANT_LIB:4);
GOTOXY(35, 14); WRITE(CANT_PROM:4);
END;
Ventajas
Propende a la formacin de la biblioteca propia: Puesto que muchas de estas rutinas pueden
constituir procesos comunes a otras aplicaciones, con lo que se ahorra tiempo de programacin.
Facilita la prueba: Ya que sta se realiza sobre partes razonablemente pequeas, lo que hace mas
fcil identificar los errores. Se realiza un claro seguimiento del problema.
Ventajas
Se cometen menos errores: Por la misma naturaleza del mtodo, que divide en partes al problema, y cada
una de esas partes tienen menos instrucciones que el diagrama hecho en forma convencional.
La demostracin terica es la siguiente : e = k * n2 (1)
Donde :
e: cantidad de errores que se cometen en un programa
k: factor de proporcionalidad que depende de la experiencia del programador
n: nmero de instrucciones del programa
O sea la cantidad de errores es directamente proporcional al cuadrado del nmero de instrucciones y a la
experiencia del programador.
Supongamos que el programa de n instrucciones lo dividimos en dos subprogramas de n1 y n2 instrucciones
respectivamente, donde n n1 + n2 y en el que la cantidad de errores de cada subprograma es:
e1 = k * n12; e2 = k * n22
Si sumamos:
et = e1 + e2 = k (n12 + n22)
(2)
Si en la frmula (1) reemplazamos n por su equivalente n1 + n2, se obtiene:
e = k (n1 + n2)2 = k (n12 + n22 + 2 n1 n2) = k (n12 + n22) + k 2 n1 n2
(3)
Si restamos al error del programa e (3), el error de los subprogramas et (2), se tiene:
= e - et = k 2 n1 n2
Donde es la cantidad mayor de errores que se cometen en la programacin tradicional respecto de la
estructurada.
Esta deduccin nos dice que cuando mayor sea la cantidad de subprogramas en que se divide un programa
tradicional, mayor ser la diferencia .
Conclusin
Bibliografa
Libros
Internet