Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Wuolah Free Tema 8 Informatica
Wuolah Free Tema 8 Informatica
Funciones
Las funciones son fundamentales para realizar programas de cierta envergadura. Por un lado
permiten desarrollar algoritmos y códigos modulares lo cual mejora la legibilidad, pero además
descargan el trabajo del programador pues cada función constituye un nuevo bloque constructivo
en el que apoyarse.
Una función es un conjunto de órdenes que lleva a cabo una tarea precisa. La función es utilizada
dentro de un programa como si de una orden se tratara. La función puede calcular resultados
utilizando los datos que se le suministran explı́citamente.
Un ejemplo de función es sin. Observemos que cumple las condiciones que hemos impuesto:
Recuerde que en el entorno MATLAB la función sin puede utilizarse para calcular el seno
como en el ejemplo siguiente:
>> x = 1.57
143
144 TEMA 8. FUNCIONES
x =
1.57000000000000
>> sin(x)
ans =
0.99999968293183
En este ejemplo el resultado es el seno de 1.57 radianes que aproximadamente el seno de π/2
y por tanto el resultado es casi 1.
También es posible asignar el resultado de una función a una variable, como en el ejemplo
siguiente:
>> x = 1.57
x =
1.57000000000000
>> y=sin(x)
y =
0.99999968293183
Finalmente es posible realizar la misma tarea pero sin que aparezca nada en la pantalla, para
ello basta con colocar unos signos punto y coma.
A pesar de que la pantalla no muestra ningún mensaje las asignaciones se han realizado
correctamente como puede comprobarse:
>> x
x =
1.57000000000000
>> y
y =
0.99999968293183
No pierda de vista estos ejemplos pues resultan muy útiles para comprender la forma en que
las funciones se usan y también para comprender porqué las funciones se escriben de una manera
c MRA & JAAR
� 2010 DISA. ESI. US. 145
especial que será descrita más adelante. Baste decir por ahora que las funciones pueden verse
como módulos con los cuales es posible construir programas. Son similares a los módulos que
se han utilizado en los diagramas de flujo. Además poseen una caracterı́stica que las hace muy
útiles: las funciones pueden usarse una y otra vez con datos distintos. Desde este punto de vista
la función es una máquina capaz de producir resultados a partir de datos que se le suministran.
Este aspecto es ilustrado por el diagrama de la figura 8.1.
Argumentos
Función
Resultados
Figura 8.1:
En matemáticas una función f calcula un valor (y variable dependiente) a partir de otro dado
(x variable independiente). Tanto x como y pueden ser escalares, vectores o matrices. Con las
funciones de MATLAB ocurre otro tanto. El papel de la variable independiente es represen-
tado por los datos que se le suministran a la función, llamados normalmente argumento. Se
dice habitualmente que la función ”devuelve” un resultado que es el equivalente a la variable
dependiente.
Para aclarar las ideas consideremos la sentencia de MATLAB y = sin(x). Hemos de recor-
dar que la ejecución de esta sentencia provoca lo siguiente:
1. El cálculo mediante la función sin del seno del dato proporcionado, que en este caso es el
valor de x.
2. La asignación a la variable y del valor calculado por la función sin (que es, lógicamente
sen(x)).
146 TEMA 8. FUNCIONES
Es muy conveniente no perder de vista estos pasos en las explicaciones que se darán poste-
riormente.
Son variables que sólo pueden ser vistas y utilizadas dentro de alguna función. Fuera de la
misma no son visibles y por tanto no son utilizables.
Las variables locales pueden ser efı́meras (volátiles, automáticas y dinámicas son otros nom-
bres que reciben) o permanentes. Las variables locales efı́meras son creadas por una función y
desaparecen al terminar la función. Debido a esto, las variables efı́meras no conservan su valor
de una llamada a otra de la función.
También existe la posibilidad de usar variables globales. Este tipo de variable puede ser
visto y utilizado en cualquier función, debido a ello su uso es más simple. Sin embargo conllevan
peligros que se desea evitar a toda costa y por ello no se van a usar en este curso variables
globales.
En los diagramas de flujo se indicará el uso de funciones mediante el bloque llamado función
(subprograma). Dentro de este bloque se va a utilizar la notación matemática para indicar el
envı́o de argumentos y una asignación para indicar la recogida de los valores de las variables
resultado.
A modo de ejemplo considere la tarea consistente en calcular la media de los valores absolutos
de dos cantidades a y b. El diagrama de flujo de la figura 8.2 resuelve dicha tarea utilizando
dos veces la función VAbs(). Nótese que el bloque en el cual se usan las funciones tiene su
forma particular. Dicho diagrama no está completo a menos que se incluya un diagrama de flujo
adicional que explique cómo se calcula dicha función VAbs(), dicho diagrama se encuentra en la
figura 8.3.
El diagrama de flujo de una función ha de operar con valores formales o ficticios puesto que
la función ha de poder ser utilizada con más de un conjunto de datos. Estos valores formales
c MRA & JAAR
� 2010 DISA. ESI. US. 147
inicio
primer dato a Variable real
Figura 8.2: El diagrama de flujo para calcular la media de | a | y de | b | utiliza dos veces la
función VAbs().
son los argumentos. En la figura 8.3 se muestra la forma en la que aparecen los argumentos en
el diagrama de flujo.
r x r -x
Cabe ahora resaltar la diferencia entre un módulo y una función. Como ya se ha visto en
temas anteriores, los módulos son trozos de diagrama que cumplen tareas concretas al igual
que las funciones, sin embargo las funciones no pueden utilizar ninguna variable que no esté
en su diagrama mientras que los módulos no tienen esta restricción. Se puede decir, utilizando
los conceptos explicados en este tema, que para los módulos todas las variables son globales
mientras que para las funciones no.
Otra diferencia que puede observar es que el diagrama de flujo de una función lleva su
148 TEMA 8. FUNCIONES
propia tabla de objetos en la cual se describen las variables y constantes propias de la función,
incluyendo argumentos y resultados.
Una vez escrita una función (el diagrama de flujo o el código de la misma) puede ser utilizada
una y otra vez de forma cómoda. Esta es otra diferencia con los módulos. Los módulos encajan
bien con un programa concreto mientras que las funciones encajan bien en todas partes. Esto
es ası́ gracias al pase de argumentos y la devolución de resultados. Para ilustrar este punto
suponga que debe resolver el problema de leer un valor real x y calcular y escribir la cantidad
y =| x |3 . Una posible solución viene dada por el diagrama de la figura 8.4 donde se ha utilizado
una vez más la función VAbs(), añadiéndola a la tabla de objetos como un objeto más.
inicio
dato x Variable real
variable auxiliar,
Leer x z Variable real
valor absoluto de x
fin
Este ejemplo ilustra la idea de que las funciones pueden re-usarse fácilmente. Esto facilita
el trabajo de producir algoritmos para problemas complejos, pues es posible dividir la tarea en
funciones que se utilizan más de una vez. Incluso se pueden usar funciones realizadas previamente
para otro problema.
A continuación se presentan algunos problemas que son susceptibles de ser resueltos con la ayuda
de funciones. Observe que la elección de las funciones no es casual sino que obedece a criterios
de economı́a y claridad. Pruebe a resolver algunos de estos problemas sin la ayuda de funciones
y comprobará esta afirmación.
Iniciar k a 0 y p a 1
Leer z
no
¿ k n-1 ?
r 1 - z sí
r r + 4·Pot(z,3)
r r + Pot(z,6) p p · x
r r - Pot(z,9)
k k + 1
Escribir r
Figura 8.5: Diagrama de flujo para la evaluación de un polinomio de grado 9 haciendo uso de
la función Pot().
k k + 1
k k + 1
que es necesario hacer antes de codificar se ve muy facilitado por este diseño modular.
4. Recta entre dos puntos. Se desea realizar una función que permita calcular los parámetros
de la recta y = ax + b que pasa por dos puntos del plano. Considere dos puntos genéricos
P0 = (x0 , y0 ) y P1 = (x1 , y1 ) de IR2 (suponga que x0 �= x1 ). El problema que la función
ha de resolver es el de calcular la pendiente a y la ordenada en el origen b de la recta que
pasa por P0 y P1 . Recuerde que dicha recta tiene como expresión y = y0 + xy11 −y
−x0 (x − x0 ).
0
La solución se muestra en la figura 8.8. Obsérvese que la función Recta() toma cuatro
argumentos correspondientes a las abscisas y ordenadas de los dos puntos que definen
la recta. Por otra parte esta función devuelve como resultado el vector formado por los
valores a y b.
Este tipo de funciones son análogas a las funciones vectoriales estudiadas en Matemáticas
cuyos valores son vectores y que pueden depender de más de una variable. La mayorı́a de
los lenguajes de programación admiten funciones vectoriales aunque con algún que otro
”truco” según el caso. Los diagramas de flujo que se realicen con funciones vectoriales
seguirán la nomenclatura matemática con independencia del lenguaje de programación
que se vaya a utilizar para codificar. Afortunadamente el programa MATLAB es bastante
fiel a esta forma matemática.
1. Función que calcule xy , con x ∈ IR, y suponiendo que y es un valor entero y > 0.
2. Función que calcule xy , con x ∈ IR, y sabiendo que y es un valor entero que puede ser
positivo, negativo o cero.
� �
3. Función que calcule m n siendo m y n dos enteros positivos. Puede hacer uso de las
funciones que haya realizado con anterioridad para calcular el factorial.
inicio Vector de
Vector dado v variables
i 1 reales
Dato. Dimensión de Variable
n
no v entera
¿ i n ? vector de
sí Vector resultado w variables de
reales
wi R(v i)
Variable
contador i
entera
i i + 1
Función que
Devuelve un
calcula el R(x)
valor real
polinomio R en x
fin
no Resultado
¿ k < n ? Variable
calculado como x p
real
sí elevado a n
p p · x
Variable
Contador k
entera
k k + 1
k k + 1
Figura 8.7: Diagrama de flujo para calcular un vector (w) a partir de otro dado (v) transformando
2 3 4
sus componentes según el polinomio R(x) = 1 + x + x2! + x3! + x4! .
c MRA & JAAR
� 2010 DISA. ESI. US. 153
Resultado, pendiente de
la recta que pasa por a Variable real
fin del cálculo de (a,b) como ambos puntos
Recta(x0,y0,x1,y1) Resultado, ordenada en
el origen de la recta b Variable real
que pasa por P 0 y P 1
Figura 8.8: Diagrama de flujo de una función que calcula la pendiente a y la ordenada en el
origen b de la recta que pasa por dos puntos genéricos del plano P0 y P1 .
Realice los diagramas de flujo de los algoritmos que resuelven los problemas planteados. Intente
utilizar funciones para hacer frente a tareas que aparecen con frecuencia.
1. Se ha de realizar un programa que lea dos valores enteros positivos x e y y calcule y escriba
xy +y x
la cantidad r = (x+y) x+y .
154 TEMA 8. FUNCIONES
inicio Vector de
Dato, vector de n
vx variables
abscisas
reales
k 1
Vector de
Dato, vector de n
vy variables
ordenadas
reales
no
¿ k n-1 ? Variable
Dimensión de vx y vy n
entera
sí Variable
contador k
entera
res Recta(vx k
,vy k ,vx k+1 ,vy k+1 )
vector auxiliar de 2
Vector de
componentes que recoge
res variables
el resultado de
va k res reales
1 Recta()
Resultado, pendiente de
la recta que pasa por a Variable real
ambos puntos
fin del cálculo de (a,b) como Resultado, ordenada en
el origen de la recta b Variable real
Recta(x0,y0,x1,y1)
que pasa por P 0 y P 1
Figura 8.9: Cálculo de las pendientes de las rectas que pasan por un conjunto de puntos de IR2 .
c MRA & JAAR
� 2010 DISA. ESI. US. 155
2. Se ha de realizar un programa que lea dos vectores de IR3 y calcule y escriba el coseno del
ángulo que forman.