Procedimientos y Funciones

Los módulos se pueden clasificar en procedimientos y en funciones. Las funciones devuelven un único valor al programa o subprograma que hizo la llama- da. Los procedimientos, generalmente, no devuelven ningún valor, aunque podrían hacerlo. Las funciones se usan para resolver algún cálculo y devolver el resultado, mientras que los procedimientos se utilizan para realizar una tarea concreta, pero que no involucre devolver nada al programa o subprograma que lo llamó. En la mayoría de los lenguajes de programación, los procedimientos y funciones deben recibir un nombre consistente en un identificador válido según las reglas léxicas del lenguaje.

Otra de las ventajas de la división en subprogramas reside en que nos permite usar el mismo grupo de sentencias varias veces en el mismo programa sin necesidad de volver a escribirlas. Sin embargo, lo más probable es que en los distintos lugares donde podamos llamar a un procedimiento o función, los datos que necesitamos manejar no sean los mismos. Es necesario, entonces, poder pasarle información adicional al subprograma. Esto se realiza mediante el uso de parámetros o argumentos. Un parámetro es una variable que el procedimiento o función recibe como dato de entrada y que puede usar para cambiar su comportamiento sobre la base del valor recibido (usando, por ejemplo, una sentencia condicional).

DIVIDE Y VENCERÁS
La técnica de dividir un problema en problemas más pequeños que sean más fáciles de resolver se conoce habitualmente como la técnica de Dividir y vencer, en referencia a pensamientos de Nicolás Maquiavelo. En su libro  El Príncipe, Maquiavelo habla sobre generar discordia entre los pueblos, de manera que se separen y así poder dominarlos más fácilmente.


Los parámetros del argumento pueden ser de entrada o de salida. Los de entrada son los que el programa o módulo que llama le pasa al subprograma, mientras que los parámetros de salida son aquellos que el procedimiento o función utiliza para devolver información a quien lo llamó. Es importante no confundir un parámetro de salida con el resultado de una función: los parámetros de salida pueden ser usados tanto en procedimientos como en funciones, y se puede utilizar la cantidad que sea necesaria, mientras que el valor de resultado sólo se puede usar en las funciones, y no puede haber más de uno por función.

Para ilustrar el uso de funciones, retomemos el ejemplo del algoritmo de Euclides y convirtámoslo en una función (en pseudocódigo):

Funcion MCM(A,B)

Mientras A > 0 hacer:
    Si A > B
           A := A – B
    Si no
           B := B – A
Devolver A

En este caso, la función se llama MCM y posee dos parámetros de entrada, de tipo numérico, A y B. La función MCM consiste de una única sentencia de repetición que hace restas sucesivas entre A y B y, finalmente, devuelve el valor de A como resultado de la función.

Para entender el uso de una función, vamos a utilizar la función MCM del ejemplo anterior dentro de un procedimiento:

Procedimiento MostrarMCM()

Pedir un numero y guardarlo en V1
Pedir un numero y guardarlo en V2
M := MCM(V1, V2)
Mostrar valor de M

En el ejemplo, se pide al usuario que ingrese un número y se lo almacena en la variable V1. Se hace lo mismo con la variable V2. Luego, a la variable M se le asigna el resultado de la función MCM llamada con los valores V1 y V2 (los parámetros A y B del ejemplo). Por último, se muestra el valor de la variable M.