Blog de conceptos básicos de Algoritmos y Estructuras de Datos

Procedimientos y funciones

PROCEDIMIENTOS Y FUNCIONES

La resolución de problemas complejos se facilita considerablemente si se dividen en problemas mas pequeños; y la resolución de estos subproblemas se realiza mediante subalgoritmos.

imagen2

Los subalgoritmos son unidades de programa o módulos que están diseñados para ejecutar laguna tarea específica. Éstos, constituidos por funciones o procedimientos, se escriben solamente una vez, pero pueden ser referenciados en diferentes puntos del programa, de modo que se puede evitar la duplicación innecesaria del código.

imagen3

El módulo principal se ejecuta en una primera instancia, que da la orden de inicio de ejecución de los subprogramas. Puede ser ejecutado n veces. Es importante saber que datos se van a compartir entre los programas.

imagen4

El subprograma es un programa en sí mismo, ejecutado por la solicitud del programa principal o de otro subprograma, una n cantidad de veces. Cuando realiza la solicitud, el programa se detiene hasta que el subprograma deja de realizar su tarea, luego continúa; esto se conoce como control de ejecución.

FUNCIONES

Una función es un subprograma que recibe, como argumentos o parámetros, datos de tipo numérico o no numérico, y devuelve un único resultado.
Las funciones incorporadas al sistema se denominan funciones internas, o intrínsecas; las funciones definidas por el usuario se llaman funciones externas.
El algoritmo o programa invoca la función con el nombre de esta última en una expresión seguida de una lista de argumentos que deben coincidir en cantidad, tipo y orden con los de la función que fue definida.

Declaración de funciones
En pseudocódigo:
SINTAXIS
Funcion nombrefun(lista de parámetros): Tipo
..
…(Declaraciones locales)
..
Hacer
..(cuerpo ejecutable de la función)

nombrefun:= <valor de la función> // 1 //
Fin Hacer
Fin Funcion

DESCRIPCIÓN

nombrefun : es el nombre indicatorio de la función.
lista de parámetros : es la lista de parámetros formales. Esta lista NO puede ser vacía.
Tipo: es el tipo de resultado que devuelve la función.
// 1 // En el cuerpo de la función debe existir una sentencia que asigne valor explícitamente al nombre de la función.
Para que las acciones descritas en un subprograma función sean ejecutadas, se necesita que éste sea invocado desde un programa principal o desde otros subprogramas a fin de proporcionarle los argumentos de entrada necesarios para realizar estas acciones.

Invocación a las funciones

Una función definida por el usuario se llama haciendo referencia a su nombre. En pseudocódigo:
..
… //líneas de programa//

nombrefun(lista de parámetros reales o actuales)

..

La sentencia nombrefun acompañada de los parámetros es la que inicia la ejecución de la función. El control de ejecución lo toma la función, ejecuta secuencialmente cada una de sus sentencias, y cuando termina de ejecutarse, le devuelve el control al programa llamador, ejecutándose la secuencia inmediatamente siguiente a la de la llamada. El resultado lo devuelve en el nombre de la función; el mismo se refiere a la zona de memoria que contiene el valor devuelto por la ejecución de la función.

Cada vez que se llama a una función desde el algoritmo principal, se establece automáticamente una correspondencia entre los parámetros formales y los reales. Debe haber exactamente el mismo número de parámetros reales que de formales en la declaración de la función, y se presupone una correspondencia uno a uno de izquierda a derecha entre los parámetros formales y reales.

Una llamada a una función implica los siguientes pasos:

  1. A cada parámetro formal se le asigna el valor real de su correspondiente parámetro actual (cabe destacar que digo “real” refiriéndome al valor verdadero con el cual va a trabajar el subprograma, y no al tipo de dato).
  2. Se ejecuta el cuerpo de acciones de la función.
  3. Se devuelve el valor de la función al nombre de la función y se retorna al punto de llamada.

PROCEDIMIENTOS

Un procedimiento es un subprograma que ejecuta una tarea determinada. Está compuesto por un conjunto de sentencias, a las que s le asigna un nombre, o identificador. Constituyen unidades del programa, y su tarea se ejecuta siempre y cuando encuentre el nombre que se le asignó a dicho procedimiento.

Los procedimientos deben ser declarados obligatoriamente antes de que puedan ser llamados en el cuerpo del programa principal. Para ser activados o ejecutados, deben ser llamados desde el programa en que fueron declarados.

Pueden recibir cero o mas valores del programa principal que lo llama y lo activa, y devolver cero o mas valores a dicho programa llamador.

Todo procedimiento, al igual que un programa principal, consta de una cabecera, que proporciona su nombre y sus parámetros de comunicación; de una sección de declaraciones locales y el cuerpo de sentencias ejecutables. Las ventajas mas destacables de usar procedimientos son:

  1. Facilitan el diseño top-down.
  2. Se pueden ejecutar mas de una vez en un programa, con solo llamarlos las veces que así desee. Con esto se ahorra tiempo de programación.
  3. El mismo procedimiento se puede usar en distintos programas.
  4. Su uso facilita la división de tareas entre los programadores de un equipo.
  5. Se pueden probar individualmente e incorporarlos en librerías o bibliotecas.

Declaración de procedimientos

Al igual que cualquier otra variable, los procedimientos se deben declarar dentro del cuerpo del programa que los usa. La declaración del mismo NO indica que debe ejecutarse ese procedimiento, sino que le indica a la computadora cuales son las instrucciones del mismo y donde están localizadas.

ÁMBITO: VARIABLES LOCALES Y GLOBALES

Las variables utilizadas en los programas principales y subprogramas se clasifican en dos tipos:  locales y globales.

Una variable local es una variable que está declarada dentro de un subprograma, y se dice que es local al subprograma. Una variable local sólo está disponible durante el funcionamiento del subprograma que la declara, y su valor se pierde una vez que finaliza la ejecución del subprograma.

Las variables declaradas en el programa principal se llaman globales, pues pueden ser utilizadas en el programa principal y en todos los subprogramas en él declarados. Si existen dos variables con el mismo nombre, pero una es global y la otra es local, dentro del subprograma tiene prioridad la variable local de igual nombre. La variable global deja de existir cuando finaliza la ejecución del programa.

//ERROR DE EFECTO LATERAL: Se produce al realizarse un cambio de nombre, de naturaleza, o eliminación de una variable global, que afecta al subprograma. Esto se logra evitar utilizando parámetros.//

COMUNICACIÓN CON SUBPROGRAMAS: PASO DE PARÁMETROS

Cuando un programa llama a un subprograma, la información entre ellos se comunica a través de la lista de parámetros, y se establece una correspondencia automática entre los parámetros formales y los reales.
Un parámetro es un método de pasaje de valores de variables desde el programa principal al procedimiento y viceversa; es una variable cuyo valor debe ser proporcionado por el programa llamador al procedimiento, o bien ser devuelto desde el procedimiento, con un valor, hasta el programa que lo llama.
Cada subprograma tiene un encabezamiento, en el cual se indican los parámetros formales En el momento en que un subprograma realiza la llamada a otro módulo, se indican los parámetros reales Los parámetros reales son utilizados por el subprograma en lugar de los parámetros formales.

Paso de parámetros

Existen diferentes métodos para el paso de parámetros a subprogramas. Es preciso conocer el método adoptado por cada lenguaje, ya que la elección puede afectar a la semántica del código. Los parámetros pueden ser clasificados como:

  • Entradas (E): las entradas proporcionan valores desde el programa que llama, y se utilizan dentro del procedimiento.
  • Salidas (S): las salidas proporcionan los resultados del subprograma.
  • Entradas/Salidas (E/S): un solo parámetro se utiliza para mandar argumentos a un programa y para devolver resultados.

Los métodos mas empleados para realizar el paso de parámetros son:
o Paso por valor (parámetro valor)
o Paso por referencia o dirección (parámetro variable)
o Paso por nombre
o Paso por resultado

Los parámetros formales (locales al subprograma) reciben como valores iniciales los valores de los parámetros reales, y con ellos se ejecutan las acciones descritas en el subprograma.

Paso por valor
Son los parámetros unidireccionales, que se usan para dar información al subprograma, pero no pueden devolver valores desde el mismo. Aunque el procedimiento les cambie su valor, este nuevo valor no se refleja en el programa llamador. Esto se debe a que en la llamada al subprograma, se le asigna el valor del parámetro real a la variable que representa al parámetro formal correspondiente, dicho de otra forma, se crea una copia del parámetro real. Todo parámetro que NO esté calificado con la palabra reservada ref. es tomado como parámetro valor.

Paso por referencia

Son los parámetros que están precedidos por la palabra reservada ref., que indica que sólo reciben valor en el subprograma, o bien proporcionan valor al subprograma y reciben un valor nuevo en el mismo. Así, todo cambio realizado sobre los parámetros formales precedidos por “ref.”, se refleja en los parámetros reales correspondientes. Se los considera como parámetros bidireccionales o variables, ya que son de Entrada y/o Salida.

EFECTOS LATERALES
Las modificaciones que se produzcan mediante una función o procedimiento en los elementos situados fuera del subprograma se denominan efectos laterales.

En procedimientos
Si un procedimiento modifica una variable global (distinta de un parámetro real), éste es un efecto lateral. Por ello, excepto en contadas ocasiones, no debe aparecer en la declaración del procedimiento. Si se necesita una variable temporal en un procedimiento, se debe utilizar una variable local, no una global. Si se desea que el procedimiento modifique el valor de una variable global, utilícela como el parámetro real en una llamada al procedimiento.

En Funciones
Una función puede tener parámetros variables además de parámetros valor en la lista de parámetros formales. Una función puede cambiar el contenido de una variable global y ejecutar instrucciones de entrada/salida. Estas operaciones se conocen como parámetros laterales, y se deben evitar.

RECURSIÓN (recursividad)

Un subprograma que se puede llamar a sí mismo se llama recursivo. La recursión puede ser utilizada como una alternativa a la repetición o estructura repetitiva. La escritura de un procedimiento o función recursiva es similar a sus homónimos no recursivos; sin embargo, para evitar que la recursión continúe indefinidamente, es preciso incluir una condición de terminación.

Deja un comentario