Una estrategia muy utilizada para la resolución de problemas complejos con la computadora, es como lo he venido comentando, la división del problema en otros problemas mas pequeños o subproblemas. Estos subproblemas se implementan mediante módulos o subprogramas.
Los subprogramas son una herramienta importante para el desarrollo de algoritmos y programas de modo que normalmente un proyecto de programación esta compuesto generalmente de un programa principal y un conjunto de subprogramas con las llamadas a los mismos dentro del programa principal.
Los subprogramas se clasifican en: procedimientos y funciones.
El Diseño Descendente: Subprogramas
Uno de los métodos fundamentales para resolver un problema es dividirlo en problemas mas pequeños, llamados subproblemas, en referencias sucesivas.
Estos problemas a su vez pueden ser divididos repetidamente en problemas mas pequeños hasta que los problemas mas pequeños puedan ser solucionados.
Esta técnica de dividir el problema principal en subproblemas se denomina frecuentemente divide y vencerás. El método de diseño se denomina diseño descendente, debido a que se comienza en la parte superior con un problema general y se diseñan soluciones especificas a sus subproblemas.
El problema principal se resuelve con el programa principal (también llamado conductor del programa), y los subproblemas (módulos) mediante subprogramas: procedimientos y funciones.
Un subprograma realiza una tarea concreta que se describe con una serie de instrucciones.
Veamos un ejemplo:
Leer el radio de un círculo y calcular e imprimir su superficie y longitud.
- Análisis
Especificaciones de Entrada
Radio: Real
Especificaciones de Salida
Superficie: Real
Longitud: Real
- Algoritmo
- Leer el valor del radio
- Calcular la Superficie
- Calcular la Longitud
- Visualizar los valores de la superficie y la longitud
- Refinamiento del Algoritmo
- Leer el valor del radio
- Calcular la superficie
- pi <- 3.141592 (constante pi)
- S <- pi * Radio * Radio
- Calcular la longitud
- pi <- 3.141592
- L <- 2 * pi * Radio
- Visualizar los valores de la superficie y la longitud
El Diseño Modular
Los subproblemas o módulos se diseñan con subprogramas, que a su vez se clasifican en procedimientos y funciones.
Los procedimientos y las funciones son unidades de programas diseñadas para ejecutar una tarea específica. Por ejemplo, los procedimientos predefinidos, ReadLn y WriteLn de Pascal, estan diseñados para realizar operaciones de entrada y salida.
El proceso de descomposición de un problema en módulos se conoce como modulación y a la programación relativa a ellos programación modular.
Los procedimientos y funciones son similares, aunque presentan notables diferencias entre ellos:
Las funciones normalmente, devuelven un solo valor a la unidad de programa (programa principal u otro subprograma) que los referencia o llama. Los procedimientos pueden devolver cero, uno o varios valores. En el caso de no devolver ningún valor, realizan alguna tarea tal como alguna operación de entrada/salida.
A un nombre de procedimiento no se puede asignar un valor, y por consiguiente ningún tipo esta asociado con un nombre de procedimiento.
Una función se referencia útilizando su nombre en una instrucción (de asignación o expresión matematica), mientras que un procedimiento se referencia por una llamada o invocación al mismo.
Transferencia de Información a/desde Módulos
Los Parámetros
Los módulos o subprogramas sirven para ejecutar tareas concretas, pero no útilizan ningún tipo de dato del resto del programa. Sin embargo, una de las características importantes y diferenciadora de los subprogramas es la posibilidad de comunicación entre el programa principal y los subprogramas (o entre los subprogramas). Esta comunicación se realiza a traves de una lista de parámetros
Un parámetro es un método para pasar información (valores a variables) del programa principal a un módulo o viceversa.
Asi pues, los módulos se clasifican en:
- Módulos sin parámetros (no existe comunicación entre el programa principal y los módulos o entre módulos).
- Módulos con parámetros (existe comunicación entre el programa principal y los módulos, y entre ellos).
- Un parámetro es prácticamente, una variable cuyo valor debe ser o bien proporcionado por el programa principal al módulo o ser devuelto desde el módulo hasta el programa principal.
- Por consiguiente hay dos tipos de parámetros: entrada y salida.
Los parámetros de entrada son aquellos cuyos valores deben ser proporcionados por el programa principal, y los de salida son aquellos cuyos valores se calcularán en el subprograma o módulo y se deben devolver al programa principal para su proceso posterior.
Las sentencias llamadas a subprogramas constan de dos partes: un nombre de subprograma y una lista de parámetros llamados actuales.
nombreSubprograma(pa1,pa2,...)
En la declaración de un subprograma, cuando se incluyen parámetros, estos se denominan parámetros formales o ficticios. Ellos sirven para contener los valores de parámetros actuales cuando se llama al subprograma.
Procedimiento o funcion nombresubprograma(pf1,pf2,...)
Los parámetros actuales en la llamada al subprograma debe coincidir en número, orden y tipo con los parámetros ficticios de la declaración del subprograma. Es decir, debe existir una correspondencia entre parametros actuales y ficticios.
|