Funciones Chávez

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 8

6.

SUBPROGRAMAS

Un ordenador digital
es como el cálculo.
Puede dividir un problema
en partes tan pequeñas
como desee.
Van Doren

A lo largo de este documento se han propuesto y explicado numerosos ejemplos; no


obstante, estos han sido pensados para ilustrar un tema en particular y no tienen la
complejidad de los problemas reales, en los que la solución puede incluir miles, cientos de
miles o millones de líneas de código fuente.

Los programas diseñados para solucionar problemas reales de procesamiento de datos,


que atienden conjuntos grades de requisitos y responden a múltiples restricciones, aquellos
que Booch(1994: 4) denomina software de dimensión industrial no pueden emprenderse
como una sola pieza, pues su construcción, corrección y mantenimiento resultaría una tarea
demasiado difícil y costosa.

La estrategia más difundida para reducir la complejidad se conoce como divide y


vencerás. Ésta consiste en descomponer el problema que se quiere resolver en un
determinado número de subproblemas más pequeños, resolver sucesiva e
independientemente todos los subproblemas, luego combinar las soluciones obtenidas para,
de esta manera, solucionar el problema original (Brassard y Bratley, 1997: 247), (Aho,
Hopcroft y Ullman, 1988: 307). De ésta forma, un programa está conformado por varios
subprogramas.

Un subprograma o subrutina implementa un algoritmo diseñado para una tarea particular,


por tanto no puede constituirse en una solución a un problema por sí mismo, sino que es
llamado desde otro programa o subprograma.

En Oviedo (2002) se puede identificar algunas ventajas de la utilización de subprogramas,


como son: la fragmentación del programa en módulos proporciona mayor claridad y facilidad
para distribuir el trabajo entre los miembros del equipo de desarrollo, facilidad para escribir,
probar y corregir el código, estructura lógica del programa más comprensible y la posibilidad
de ejecutar repetidas veces el subprograma.

Considerando la naturaleza de la tarea que el subprograma realiza y si devuelve o no


datos al programa que lo llama, los subprogramas se catalogan como funciones o
procedimientos (Oviedo, 2002).

6.1. FUNCIONES

El concepto de función en el campo de la programación fue tomado de las matemáticas y


consiste en establecer una relación entre dos conjuntos: origen y espejo, donde a cada
elemento del primero le corresponde uno del segundo (Gran Enciclopedia Espasa, 2005:
5140). En términos de Joyanes (1996: 166), una función es una operación que toma uno o
más valores y genera un nuevo valor como resultado. A los valores que entran a la función
se les denomina argumentos. En este mismo sentido, Timarán et al (2009: 57) define una
función como: un subprograma que recibe uno o más parámetros, ejecuta una tarea
específica y devuelve un único valor como resultado, al programa o función que la invocó.

Una función se representa de la forma:

y = f(x)
f(x) = 3x - 2

Y se lee y depende de x o y es una función de x y significa que para obtener el valor de y


es necesario reemplazar x por un valor (argumento) y realizar la operación que indica la
función. Por ejemplo, si se resuelve la función con x = 2, se obtiene y= 4.

Una característica importante de las funciones es que su resultado depende


exclusivamente del valor o los valores que recibe como argumentos. Si se toma la función del
Máximo Común Divisor, ésta requiere dos argumentos y el resultado que genere será
diferente para cada par de argumentos.

Sea f(x,z) el Máximo Común Divisor de x y z. Entonces:

f(12,18) = 6
f(40,60) = 20

Las funciones se clasifican en dos tipos: internas y externas.

Funciones internas. Son aquellas que están definidas en el lenguaje de programación, se


distribuyen en forma de librerías* o de APIs* y se utilizan como base para el desarrollo de los

*Es una colección de programas y subprogramas normalizados y probados con los que se puede resolver
problemas específicos (Lopezcano, 1998: 322).
los programas. Estas atienden necesidades generales y suelen agruparse dependiendo del
dominio en que pueden ser utilizadas, por ejemplo: matemáticas, cadenas, fechas, archivos.

Funciones externas. También se conocen como funciones definidas por el usuario y son
todas aquellas escritas por el programador para atender necesidades particulares en sus
aplicaciones.

6.1.1. Diseño de una Función

Una función tiene dos partes: la definición y la implementación, algunos autores, como
Joyanes (1996: 167) y Galve et al (1993: 30), las denominan cabecera y cuerpo
respectivamente. En un programa, por ejemplo en lenguaje C, la definición de la función le
proporciona al compilador información sobre las características que tiene la función cuya
implementación aparecerá más adelante. Esto ayuda a verificar la corrección del programa.

Definición de la función. Ésta incluye tres elementos que son explícitos en las notaciones
pseudocódigo y diagramas de Nassi-Shneiderman, más no en los diagramas de flujo, estos
son:

a. El tipo de retorno
b. El identificador o nombre de la función
c. La lista de parámetros

Hasta hace algunos años era común definir una función de la forma:

Función identificador(parámetros): tipo_retorno

Ejemplo:

Función factorial(entero n): entero

Esta instrucción define la función llamada factorial la que recibe un número entero como
parámetro y lo almacena en la variable n y devuelve como resultado un número entero.

Actualmente y para mantener la similitud con los lenguajes de programación actuales se


definen de la forma:

Tipo_retorno identificador(parámetros)

*API es una sigla de las palabras en Inglés Application Programming Interface, en Español: Interfaz para
programación de aplicaciones o conjunto de herramientas para desarrollar un programa.
Ejemplos:

Entero factorial(entero n)
Real potencia(entero base, entero exponente)
Boobleano esprimo(entero n)

Se ha suprimido la palabra reservada función y se coloca el tipo de retorno al comenzar la


definición. Esta es la forma como se definirán las funciones en lo que sigue del libro.

Parámetros. Dado que una función se especializa en desarrollar una tarea, que por lo
general es un cálculo, no se puede esperar que también se encargue de la lectura e
impresión de datos; por eso, es necesario suministrarle los datos que ésta requiere para
desarrollar el cálculo, a estos datos que se le entregan se les denomina parámetros.

En este orden de ideas, los parámetros son los datos que se le envían a la función para
que desarrolle la tarea para la que fue diseñada. Por ejemplo, si se diseña una función para
calcular el factorial, es necesario pasarle como parámetro el número para el cual se desea
encontrar el factorial; si se diseña una función para calcular una potencia, es preciso que se
le proporcione la base y el exponente.

La declaración de parámetros forma parte de la definición de la función, se trata de colocar


entre paréntesis los tipos y los identificadores de los datos que se entregarán a la función.
Estas declaraciones se constituyen en variables locales de la función. En la definición:

Real potencia(entero base, entero exponente)

Se está expresando que la función potencia recibirá dos datos de tipo entero y los
almacenará en las variables: base y exponente.

En diagrama de flujo, una función no tiene una definición explícita. No obstante, en este
documento, se la diferencia de un programa en cuanto incluye un símbolo de entrada/salida
para recibir los parámetros y otro para devolver el resultado, como se aprecia en la figura
106.
Figura 106. Diagrama de flujo de una función

Inicio

Parámetros: p1, p2, …, pn

Cuerpo de la función

Retornar fac

Fin

Si bien la definición es fundamental por cuando le da existencia e identidad a la función, la


implementación es lo que permite que la función desarrolle una operación.

Implementación. Es el conjunto de líneas de código o instrucciones que procesan los


datos recibidos como parámetros y producen el resultado esperado por el programa que
invoca la función. El cuerpo de la función comienza después de la definición y termina con la
palabra reservada fin seguido del nombre de la función, pero en la penúltima línea debe
aparecer la instrucción Retornar o Devolver seguida de un valor o una expresión, como se
puede apreciar en los ejemplos 54 y 55.

Ejemplo 54. Función sumar

Diseñar una función para sumar dos números enteros

Este ejemplo tiene como propósito mostrar la estructura de una función, haciendo evidente
su definición, parámetros, implementación y retorno.

La función sumar recibe dos parámetros enteros, los suma y devuelve el resultado, como
se muestra en el cuadro 83.

Cuadro 83. Pseudocódigo de la función sumar

1 Entero sumar(entero a, entero b)


2 Entero resultado
3 resultado = a + b
4 Retornar resultado
5 Fin sumar
Obsérvese que la función se define de tipo entero, lo que significa que el dato que
devolverá será de este tipo; en consecuencia, la variable local que se declara para
almacenar el resultado es de tipo entero. En cuanto a los parámetros, aunque son del mismo
tipo es necesario especificar para cada uno que son de tipo entero, ya que no siempre ocurre
así.

Las variables que se declaran en el cuerpo de una función son de ámbito local y por tanto
sólo se puede acceder a ellas dentro de la función. En cuanto la ejecución termina, las
variables dejan de existir.

Ejemplo 55. Función factorial

Diseñar una función para calcular en factorial de un número entero positivo. Se sabe que
el factorial de 0 es 1 y el factorial de cualquier número n mayor 0 es el producto de los
números entre 1 y n.
La función factorial requiere un parámetro: el número, y devuelve otro número: el factorial,
en su implementación incluye un ciclo en el que se calcula el producto desde 1 hasta n, como
se muestra en el pseudocódigo del cuadro 84.

Cuadro 84. Pseudocódigo de la función factorial

1 Entero factorial(entero n)
2 Entero fac = 1, con
3 Para con = 1 hasta n hacer
4 fac = fac * con
5 Fin para
6 Devolver fac
7 Fin factorial

6.1.2. Invocación de una Función

La invocación o llamada a una función se hace escribiendo su nombre y la lista de


parámetros que ésta requiere, de la forma:

Nombre_función(parámetros)

Ejemplo:

Sumar(123, 432)
Factorial(5)

Al ejecutarse un algoritmo o un programa, en el momento en que se encuentra la


invocación de una función, el control de ejecución pasa a la función. En la ejecución de la
función, la primera tarea que se realiza es la declaración de las variables locales y su
inicialización con los datos proporcionados como parámetros. Por eso, es muy importante
tener en cuenta que los argumentos escritos al invocar la función y la lista de parámetros
definidos en el diseño de la función deben coincidir en tipo y en cantidad, en caso contrario
se presentará un error y la ejecución de la función se cancelará.
En el momento en que la ejecución de la función encuentra la palabra retornar el control
vuelve exactamente a la línea donde se invocó la función con el resultado del cálculo
efectuado.

El resultado devuelto por una función puede almacenarse en una variable, puede ser enviado
directamente a un dispositivo de salida o puede utilizarse como argumento para otra función,
como se muestra en las expresiones a, b y c, respectivamente.

a. x = factorial(8)
b. Escribir “Factorial de 8:”, factorial(8)
c. sumar(factorial(3), factorial(4))

Ejemplo 56. Operaciones aritméticas

Diseñar el algoritmo principal y las funciones necesarias para realizar las operaciones
aritméticas: suma, resta, multiplicación y división de dos números.

Para solucionar este ejercicio es necesario diseñar cuatro funciones, una para cada
operación, y un programa principal que invoque la función que corresponda según el
requerimiento del usuario. Como cada función se encarga exclusivamente de hacer el
cálculo, el programa principal debe encargarse de leer los números, la operación a realizar y
mostrar el resultado.

En la implementación de los programas en algunos lenguajes es necesario definir las


funciones antes de invocarlas. Para desarrollar buenas prácticas de programación, en este
ejercicio y en los que siguen, se diseña primero las funciones o procedimientos y al final el
programa principal.

Las funciones y el programa para este ejercicio se presentan en los cuadros 85, 86, 87 y
88. La función sumar ya se diseñó y aparece en el cuadro 83 por ello no se incluye.

Cuadro 85. Pseudocódigo de la función restar

1 Entero restar(entero a, entero b)


2 Entero diferencia
3 resultado = a – b
4 Retornar diferencia
5 Fin restar
Cuadro 86. Pseudocódigo de la función multiplicar

1 Entero multiplicar(entero a, entero b)


2 Entero producto
3 resultado = a * b
4 Retornar producto
5 Fin multiplicar

Cuadro 87. Pseudocódigo de la función dividir

1 Entero dividir(entero a, entero b)


2 Real cociente = 0
3 Si b != 0 entonces
4 cociente = a / b
5 Fin si
6 Retornar cociente
7 Fin dividir

Cuadro 88. Pseudocódigo del algoritmo operaciones aritméticas

1 Inicio
2 Entero x, y, opc
3 Leer x, y
4 Escribir “1. Sumar 2. Restar 3. Multiplicar 4. Dividir”
5 Leer opc
6 Según sea opc hacer
7 1: Escribir “sumatoria = “, sumar(x,y)
8 2: Escribir “Diferencia = “, restar(x,y)
9 3: Escribir “Producto = “, multiplicar(x,y)
10 4: Si y = 0 entonces
11 Escribir “Error, divisor = 0”
12 Si no
13 Escribir “Cociente = “, dividir(x,y)
14 Fin si
15 Fin según sea
16 Fin suma

En las líneas 7, 8, 9 y 13 se realiza el llamado a las funciones previamente definidas.


Aunque en la función dividir incluye un condicional para evitar el error de dividir sobre 0, la
validación de los datos se hace en el algoritmo principal (línea 10) ya que la función sólo
puede retornar un valor: el cociente, no un mensaje de error.

También podría gustarte