Programacion Modular : funcion y procedimiento

Creado por yoniki el 22.06.2011 a las 13:21 hs en Teoría
¿Qué es programación modular?

Uno de los métodos más conocidos para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de ellas llegamos a la solución. Esta técnica se usa mucho en programación ya que programar no es más que resolver problemas, y se le suele llamar diseño descendente, metodología del divide y vencerás o programación top-down.

Es evidente que si esta metodología nos lleva a tratar con subproblemas, entonces también tengamos la necesidad de poder crear y trabajar con subprogramas para resolverlos. A estos subprogramas se les suele llamar módulos, de ahí viene el nombre de programación modular. En Pascal disponemos de dos tipos de módulos: los procedimientos y las funciones.

Veamos un ejemplo de cómo emplear el diseño descendente para resolver un problema. Supongamos que un profesor quiere crear un programa para gestionar las notas de sus alumnos. Quiere que dicho programa le permita realizar tareas tales como asignar notas, cambiar notas, ver las notas según distintas calificaciones, etc. A continuación tienes un esquema que representa una de las posibles divisiones del problema en módulos.




ALGORITMO PRINCIPAL Y SUBALGORITMOS

En general, el problema principal se resuelve en un algoritmo que denominaremos algoritmo o módulo principal, mientras que los subproblemas sencillos se resolverán en subalgoritmos, también llamados módulos a secas. Los subalgoritmos están subordinados al algoritmo principal, de manera que éste es el que decide en qué orden deben ejecutarse los subalgoritmo y con qué conjunto de datos.

El algoritmo principal realiza llamadas o invocaciones a los subalgoritmos, mientras que éstos devuelven resultados a aquél. Así, el algoritmo principal va recogiendo todos los resultados y puede generar la solución al problema global.





Cuando el algoritmo principal hace una llamada al subalgoritmo (es decir, lo invoca), se empiezan a ejecutar las instrucciones del subalgoritmo. Cuando éste termina, devuelve los datos de salida al algoritmo principal, y la ejecución continúa por la instrucción siguiente a la de invocación. También se dice que el subalgoritmo devuelve el control al algoritmo principal, ya que éste toma de nuevo el control del flujo de instrucciones después de habérselo cedido temporalmente al subalgoritmo.

El programa principal puede invocar a cada subalgoritmo el número de veces que sea necesario. A su vez, cada subalgoritmo puede invocar a otros subalgoritmos, y éstos a otros, etc. Cada subalgoritmo devolverá los datos y el control al algoritmo que lo invocó.




Los subalgoritmos pueden hacer las mismas operaciones que los algoritmos, es decir: entrada de datos, proceso de datos y salida de datos. La diferencia es que los datos de entrada se los proporciona el algoritmo que lo invoca, y los datos de salida son devueltos también a él para que haga con ellos lo que considere oportuno. No obstante, un subalgoritmo también puede, si lo necesita, tomar datos de entrada desde el teclado (o desde cualquier otro dispositivo de entrada) y enviar datos de salida a la pantalla (o a cualquier otro dispositivo de salida).

UN EJEMPLO

Vamos a diseñar un algoritmo que calcule el área y la circunferencia de un círculo cuyo radio se lea por teclado. Se trata de un problema muy simple que puede resolverse sin aplicar el método divide y vencerás, pero lo utilizaremos como ilustración.

Dividiremos el problema en dos subproblemas más simples: por un lado, el cálculo del área, y, por otro, el cálculo de la circinferencia. Cada subproblema será resuelto en un subalgoritmo, que se invocará desde el algoritmo principal. La descomposición en algoritmos y subalgoritmos sería la siguiente (se indican sobre las flechas los datos que son interrcambiados entre los módulos):




Lógicamente, los subalgoritmos deben tener asignado un nombre para que puedan ser invocados desde el algoritmo principal, y también existe un mecanismo concreto de invocación/devolución.


PROCEDIMIENTOS Y FUNCIONES

Un algoritmo que resolviera un problema complejo, contendría cientos o miles de líneas de código en su interior. Esto es inabarcable para cualquier programador, por lo que se utiliza el concepto de procedimientos y funciones para subdidivir el problema en partes.
La idea es que cada una de estas partes contenga un conjunto de instrucciones que permita la ejecución de algún proceso determinado y lógico desde el punto de vista humano.
Dos ejemplos, función y procedimiento respectivamente:


FUNCION multiplicar(E a: ENTERO, E b: ENTERO): ENTERO
RETORNA ( a * b )
FIN_FUNCION
ó
PROCEDIMIENTO escribirEdad(E mensaje: CADENA, E edad: ENTERO)
ESCRIBIR( mensaje, edad )
FIN_PROCEDIMIENTO

FUNCIONES

Una función es una un conjunto de instrucciones, con un nombre asociado, que cumple
las siguientes características:
? Tiene uno o más parámetros de entrada.
? Tiene un parámetro exclusivamente de salida y de tipo simple (es decir, lo que devuelve). Muchos lenguajes de programación no requieren el hecho de que el parámetro  sea simple pero en esta asignatura se considerará la versión más purista.
? Todos los valores de entrada son necesarios y suficientes para determinar el valor
de salida.
Su sintaxis es la siguiente:


FUNCION nombre_funcion(lista de parámetros formales): Tipo_de_salida
CONSTANTES
...
TIPOS
...
VARIABLES
...
INICIO
instrucción 1
instrucción 2
....
RETORNA ( expresión ){ de Tipo_de_salida }
FIN_FUNCION
A continuación se muestra, como ejemplo, una función que devuelve la mayor de
dos variables.

FUNCION max (E a: ENTERO, E b: ENTERO): ENTERO
VARIABLES
valorDeRetorno: ENTERO
INICIO
SI a > b
valorDeRetorno ? a
SINO
valorDeRetorno ? b
FINSI
RETORNA ( valorDeRetorno )
FIN_FUNCION

PROCEDIMIENTOS

Son conjuntos de instrucciones con un nombre asociado, al igual que las funciones, pero
no devuelven ningún valor. Los parámetros pueden ser de entrada, salida o de entrada /
salida.
Su sintaxis es la siguiente:


PROCEDIMIENTO nombre_procedimiento(lista_de_parámetros_formales)
CONSTANTES
...
TIPOS
...
VARIABLES
...
INICIO
instrucción 1
instrucción 2
....
FIN_PROCEDIMIENTO

Al no soportar el retorno, al contrario que las funciones, para devolver valores se
usan parámetros de salida o de entrada/salida.


PARAMETROS

PARAMETRO POR VALOR: tiene dicho nombre porque lo que recibe el subprograma no son más que copias de los valores de los datos que el programa invocador le pasa. Por tanto si en el procedimiento modificamos alguno de estos valores, los datos originales permaneceran inalterados.

PARAMETROS POR REFERENCIA: aqui lo que se pasa al procedimiento son los datos en sí. Y si éste los modifica, los cambios permanecerán una vez que la ejecución vuelva al módulo que invocó al procedimiento. Se utilizan para obtener valores de los cálculos que haga un subprograma, y en el anterior


EJEMPLOS CON PUNTOS DEL TRABAJO PRACTICO Nº 8 DE INTRODUCCIÓN A LA INFORMÁTICA

Realizar los siguientes módulos
1) Función resto acepta dos parámetros enteros y devuelve un numero entero que es el resto de la división entera del primer parámetro sobre el segundo parámetro


FUNCION RESTO (N1,N2) : entero

      (Entero: parametro pasado por valor)     
      variables:  res
  INICIO
      res ?--  N1 - N1/ N2 * N2
      RESTO ?--  res
FIN

2) Funcion primo que acepta un parametro entero y devuelve un valor logico verdadero si el parametro es un numero primo y falso si no lo es

el algoritmo principal seria


algoritmo primo
variable
Entero: N

INICIO
      Escribir "ingrese N"
      Leer N
      Si primo entonces
          Escribir "es primo"
          Si no
                  Escribir "no es primo"
      FInsi
FIN

y el subalgoritmo seria

Funcion primo

(Entero: N ; parametro pasado por valor)

variables
Logico: band
Entero: i

INICIO
          i ?-- 2
          band ?--  V
          mientras (i < = N/2 ) y (band = V) Hacer
                            Si N mod i = 0 Entonces
                                band ?-- F
                            finsi
                                i ?-- i + 1
            fin mientras
                     
                      primo ?-- band
FIN   


SI CREEN Q ESTA MAL ACEPTO CORRECCIONES SOY NUEVO EN ESTO
  • ¿Fue útil o te gustó mi post?
Posteado por:
yoniki
Dios



Medallas



Últimos Comentarios


Publicaciones Populares



5 Comentarios


Cargando comentarios espera un momento...
No tienes permisos para comentar.


Para poder comentar necesitas estar Registrado. O.. ya tienes usuario? Logueate!