Está en la página 1de 14

Tema 8

Funciones
Las funciones son fundamentales para realizar programas de cierta envergadura. Por un lado
permiten desarrollar algoritmos y codigos modulares lo cual mejora la legibilidad, pero ademas
descargan el trabajo del programador pues cada funcion constituye un nuevo bloque constructivo
en el que apoyarse.
8.1 Concepto de funcion
Una funcion es un conjunto de ordenes que lleva a cabo una tarea precisa. La funcion es utilizada
dentro de un programa como si de una orden se tratara. La funcion puede calcular resultados
utilizando los datos que se le suministran explcitamente.
Un ejemplo de funcion es sin. Observemos que cumple las condiciones que hemos impuesto:
Es un conjunto de ordenes aunque en las modernas versiones de MATLAB no podamos
verlo pues se encuentra en una forma especial.
Realiza una tarea concreta consistente en calcular el seno del n umero indicado.
Calcula resultados a partir de datos suministrados.
Recuerde que en el entorno MATLAB la funcion 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.
Tambien es posible asignar el resultado de una funcion 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.
>> x=1.57; y=sin(x);
A pesar de que la pantalla no muestra ning un 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 utiles para comprender la forma en que
las funciones se usan y tambien para comprender porque las funciones se escriben de una manera
c MRA & JAAR 2010 DISA. ESI. US. 145
especial que sera descrita mas adelante. Baste decir por ahora que las funciones pueden verse
como modulos con los cuales es posible construir programas. Son similares a los modulos que
se han utilizado en los diagramas de ujo. Ademas poseen una caracterstica que las hace muy
utiles: las funciones pueden usarse una y otra vez con datos distintos. Desde este punto de vista
la funcion es una maquina capaz de producir resultados a partir de datos que se le suministran.
Este aspecto es ilustrado por el diagrama de la gura 8.1.
Funcin
Argumentos
Resultados
Figura 8.1:
8.1.1 Datos y resultados
En matematicas una funcion 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 funcion, llamados normalmente argumento. Se
dice habitualmente que la funcion 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 ejecucion de esta sentencia provoca lo siguiente:
1. El calculo mediante la funcion sin del seno del dato proporcionado, que en este caso es el
valor de x.
2. La asignacion a la variable y del valor calculado por la funcion sin (que es, logicamente
sen(x)).
146 TEMA 8. FUNCIONES
Es muy conveniente no perder de vista estos pasos en las explicaciones que se daran poste-
riormente.
8.1.2 Variables locales
Son variables que solo pueden ser vistas y utilizadas dentro de alguna funcion. Fuera de la
misma no son visibles y por tanto no son utilizables.
Las variables locales pueden ser efmeras (volatiles, automaticas y dinamicas son otros nom-
bres que reciben) o permanentes. Las variables locales efmeras son creadas por una funcion y
desaparecen al terminar la funcion. Debido a esto, las variables efmeras no conservan su valor
de una llamada a otra de la funcion.
Tambien existe la posibilidad de usar variables globales. Este tipo de variable puede ser
visto y utilizado en cualquier funcion, debido a ello su uso es mas 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 resumen, las variables se clasican seg un su alcance en locales y globales y seg un su
tiempo de vida en efmeras y persistentes. Aunque las cuatro combinaciones son posibles en
este curso solo se van a emplear variables locales efmeras. Esta perdida voluntaria de libertad
producira programas con un codigo mas legible y estructurado.
8.2 Diagramas de ujo con funciones
En los diagramas de ujo se indicara el uso de funciones mediante el bloque llamado funcion
(subprograma). Dentro de este bloque se va a utilizar la notacion matematica para indicar el
envo de argumentos y una asignacion 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 ujo de la gura 8.2 resuelve dicha tarea utilizando
dos veces la funcion VAbs(). Notese que el bloque en el cual se usan las funciones tiene su
forma particular. Dicho diagrama no esta completo a menos que se incluya un diagrama de ujo
adicional que explique como se calcula dicha funcion VAbs(), dicho diagrama se encuentra en la
gura 8.3.
El diagrama de ujo de una funcion ha de operar con valores formales o cticios puesto que
la funcion ha de poder ser utilizada con mas de un conjunto de datos. Estos valores formales
c MRA & JAAR 2010 DISA. ESI. US. 147
Variable real
resultado, media de
los valores absolutos
de a y b
Variable real
variable auxiliar,
valor absoluto de a
Variable real
variable auxiliar,
valor absoluto de b
Escribir m
Leer a y b
va VAbs(a)
vb VAbs(b)
inicio
m (va + vb)/2
fin
Devuelve un
valor real
funcin que calcula
el valor absoluto de
x
Variable real primer dato
Variable real segundo dato
m
va
vb
VAbs(x)
a
b
Figura 8.2: El diagrama de ujo para calcular la media de | a | y de | b | utiliza dos veces la
funcion VAbs().
son los argumentos. En la gura 8.3 se muestra la forma en la que aparecen los argumentos en
el diagrama de ujo.
r Variable real
resultado, valor
absoluto del
argumento
inicio del clculo de r
mediante VAbs(x)
x < 0 ?
s no
r x r -x
fin del clculo de r
mediante VAbs(x)
x Variable real argumento
0 Constante entera
valor auxiliar
para comparar
Figura 8.3: Diagrama de ujo de la funcion VAbs().
Cabe ahora resaltar la diferencia entre un modulo y una funcion. Como ya se ha visto en
temas anteriores, los modulos son trozos de diagrama que cumplen tareas concretas al igual
que las funciones, sin embargo las funciones no pueden utilizar ninguna variable que no este
en su diagrama mientras que los modulos no tienen esta restriccion. Se puede decir, utilizando
los conceptos explicados en este tema, que para los modulos todas las variables son globales
mientras que para las funciones no.
Otra diferencia que puede observar es que el diagrama de ujo de una funcion lleva su
148 TEMA 8. FUNCIONES
propia tabla de objetos en la cual se describen las variables y constantes propias de la funcion,
incluyendo argumentos y resultados.
Una vez escrita una funcion (el diagrama de ujo o el codigo de la misma) puede ser utilizada
una y otra vez de forma comoda. Esta es otra diferencia con los modulos. Los modulos 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 devolucion 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 solucion viene dada por el diagrama de la gura 8.4 donde se ha utilizado
una vez mas la funcion VAbs(), a nadiendola a la tabla de objetos como un objeto mas.
Variable real resultado |x|
3
Variable real
variable auxiliar,
valor absoluto de x
Escribir y
Leer x
z VAbs(x)
inicio
y zzz
fin
Devuelve un
valor real
funcin que calcula
el valor absoluto de
x
Variable real dato
y
z
VAbs(x)
x
Figura 8.4: Diagrama de ujo para calcular y escribir y =| x |
3
.
Este ejemplo ilustra la idea de que las funciones pueden re-usarse facilmente. Esto facilita
el trabajo de producir algoritmos para problemas complejos, pues es posible dividir la tarea en
funciones que se utilizan mas de una vez. Incluso se pueden usar funciones realizadas previamente
para otro problema.
8.3 Ejemplos de diagramas de ujo con funciones
A continuacion se presentan algunos problemas que son susceptibles de ser resueltos con la ayuda
de funciones. Observe que la elecci on de las funciones no es casual sino que obedece a criterios
de economa y claridad. Pruebe a resolver algunos de estos problemas sin la ayuda de funciones
y comprobara esta armacion.
1. Evaluacion de un polinomio de grado 9. El problema que se desea resolver es el
siguiente: se ha de leer un n umero real z. El polinomio P(x) = 1 x + 4x
3
+ x
6
x
9
ha
c MRA & JAAR 2010 DISA. ESI. US. 149
Escribir r
Leer z
Inicio
Fin
r 1 - z
r r + 4Pot(z,3)
r r + Pot(z,6)
r r - Pot(z,9)
z
Variable
real
r
Dato
Resultado, valor
del polinomio P(z)
Funcin para
calcular la
potencia n-sima de
x
Variable
real
Pot(x,n)
Devuelve un
valor real
inicio del clculo de p como
Pot(x,n)
Iniciar k a 0 y p a 1
s
no
k k + 1
fin del clculo de p como
Pot(x,n)
p p x
x Variable real
n
Argumento. Base.
Argumento. Potencia.
Resultado calculado
como x elevado a n
Variable
entera
p Variable real
k
Contador. variable
auxiliar
Variable
entera
k n-1 ?
Figura 8.5: Diagrama de ujo para la evaluacion de un polinomio de grado 9 haciendo uso de
la funcion Pot().
de calcularse en el punto x = z y el resultado escribirse. En otras palabras, se ha de
calcular y escribir la cantidad r = P(z).
La gura 8.5 se muestra una posible solucion que hace uso de una funcion para calcular
las potencias necesarias. Como puede verse la funcion es descrita someramente en la tabla
de objetos empleados.
2. Evaluacion de un polinomio de grado n. El problema que se desea resolver es el
siguiente: se ha de leer un n umero real z y un n umero natural n. El polinomio de orden
n dado por Q(x) = x +
x
2
2
+
x
3
3
+
x
4
4
+ +
x
n
n
ha de calcularse en el punto x = z y el
resultado escribirse. En otras palabras, se ha de calcular y escribir la cantidad Q(z).
La solucion presentada en la gura 8.6 hace uso de la funcion Pot() al igual que en el
ejercicio anterior. Notese que el diagrama de ujo correspondiente a la funcion lleva su
tabla de objetos independiente.
Puede llamar la atencion el hecho de que existe una variable de nombre k en cada uno
150 TEMA 8. FUNCIONES
Escribir sumap
Leer z y n
inicio
fin
z Variable real
sumap
Dato (punto)
Suma parcial y
resultado, Q(z)
Funcin que
calcula x
n
Variable real
Pot(x,n)
Devuelve un
valor real
inicio del clculo de p como
Pot(x,n)
k < n ?
Iniciar k a 0 y p a 1
s
no
k k + 1
fin del clculo de p como
Pot(x,n)
p p x
x
Variable
real
n
Argumento. Base.
Argumento.
Exponente.
Resultado
calculado como x
elevado a n
Variable
entera
p
Variable
real
k n ?
k 1, sumap 0
s
no
k k + 1
k Variable entera Contador
Dato (grado) Variable entera n
sumap sumap+Pot(z,k)/k
k
Variable
entera
Contador
Figura 8.6: Diagrama de ujo para la evaluacion de un polinomio de grado n de la forma
Q(x) = x +
x
2
2
+
x
3
3
+
x
4
4
+ +
x
n
n
haciendo uso de la funcion Pot().
de los diagramas. A continuacion se explica que esto no es un error. Se ha indicado en
esta leccion que las funciones operan con argumentos precisamente para poder ser usadas
sin necesidad de conocer el nombre de la variable que contiene los datos. En esto reside
la diferencia con un modulo. Tambien se ha dicho que el argumento es una variable local
y por tanto solo existe dentro de la funcion. La variable k del diagrama de la funcion es
pues completamente independiente de la variable k en otras funciones y por tanto puede
llevar el mismo nombre.
3. Evaluaciones repetidas de un polinomio. Dado un vector v IR
n
(siendo n > 0,
un valor previamente ledo) se desea evaluar el polinomio R(x) = 1 + x +
x
2
2!
+
x
3
3!
+
x
4
4!
en
cada una de las componentes de v, creando de este modo el vector w. Dicho de otro modo
se desea calcular el vector w tal que w
k
= R(v
k
)k = 1, , n.
La solucion se muestra en la gura 8.7. Puede observarse que se usa la funcion Pot() y
la funcion Fact() dentro de la funcion R(). Es importante observar que, gracias al uso de
funciones, cada subdiagrama tiene un tama no aceptablemente peque no. Ademas el analisis
c MRA & JAAR 2010 DISA. ESI. US. 151
que es necesario hacer antes de codicar se ve muy facilitado por este dise no modular.
4. Recta entre dos puntos. Se desea realizar una funcion que permita calcular los parametros
de la recta y = ax +b que pasa por dos puntos del plano. Considere dos puntos genericos
P
0
= (x
0
, y
0
) y P
1
= (x
1
, y
1
) de IR
2
(suponga que x
0
= x
1
). El problema que la funcion
ha de resolver es el de calcular la pendiente a y la ordenada en el origen b de la recta que
pasa por P
0
y P
1
. Recuerde que dicha recta tiene como expresion y = y
0
+
y
1
y
0
x
1
x
0
(x x
0
).
La solucion se muestra en la gura 8.8. Observese que la funcion Recta() toma cuatro
argumentos correspondientes a las abscisas y ordenadas de los dos puntos que denen
la recta. Por otra parte esta funcion devuelve como resultado el vector formado por los
valores a y b.
Este tipo de funciones son an alogas a las funciones vectoriales estudiadas en Matematicas
cuyos valores son vectores y que pueden depender de mas de una variable. La mayora de
los lenguajes de programacion admiten funciones vectoriales aunque con alg un que otro
truco seg un el caso. Los diagramas de ujo que se realicen con funciones vectoriales
seguiran la nomenclatura matematica con independencia del lenguaje de programacion
que se vaya a utilizar para codicar. Afortunadamente el programa MATLAB es bastante
el a esta forma matematica.
5. Vector de pendientes Se dispone de dos vectores vx y vy de IR
n
que contienen respec-
tivamente las componentes x e y de n puntos del plano. Es decir, (vx
1
, vy
1
) es un punto
del plano, (vx
2
, vy
2
) es otro punto, etc. Se desea calcular un nuevo vector va de IR
n1
de tal modo que k = 1, , n 1 sea va
k
igual a la pendiente de la recta que pasa por
(vx
k
, vy
k
) y por (vx
k+1
, vy
k+1
). Se supone que vx, vy y n ya han sido ledos previamente.
Se recomienda usar la funcion Recta() del ejercicio anterior.
La solucion se muestra en la gura 8.9. Puede verse la forma en que se recoge el resultado
de la funcion Recta() mediante un vector res cuya primera componente es la pendiente,
la otra componente no se utiliza.
8.3.1 Ejercicios de Funciones
Realice los diagramas de ujo de las funciones que se indican.
1. Funcion que calcule x
y
, con x IR, y suponiendo que y es un valor entero y > 0.
2. Funcion que calcule x
y
, con x IR, y sabiendo que y es un valor entero que puede ser
positivo, negativo o cero.
3. Funcion 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.
4. Funcion que calcule la suma de las componentes de un vector.
152 TEMA 8. FUNCIONES
inicio clculo de p como Pot(x,n)
k < n ?
Iniciar k a 0 y p a 1
s
no
k k + 1
fin clculo de p como Pot(x,n)
p p x
x
Variable
real
n
Argumento. Base.
Argumento.
Exponente.
Resultado
calculado como x
elevado a n
Variable
entera
p
Variable
real
inicio
fin
i n ?
i 1
s
no
i i + 1
w
i
R(v
i
)
fin clculo de r como R(x)
s
no
r r + Pot(x,m)/Fact(m)
m 4 ?
m 1, r 1
inicio clculo de r como R(x)
Contador k
Variable
entera
inicio clculo de f como Fact(n)
k n ?
Iniciar k a 1 y f a 1
s
no
k k + 1
fin del clculo de f como Fact(n)
f fk
n Argumento.
Resultado
calculado como el
factorial de n
Variable
entera
f
Variable
entera
Contador k
Variable
entera
x Variable real
r
Argumento (punto)
Suma parcial y
resultado, R(x)
Funcin que
calcula x elevado
a m
Variable real
Pot(x,m)
Devuelve un
valor real
m
Variable
entera
contador
Funcin que
calcula el
factorial de m
Fact(m)
Devuelve un
valor entero
v
Vector de
variables
reales
w
Vector dado
Vector resultado
Funcin que
calcula el
polinomio R en x
vector de
variables de
reales
R(x)
Devuelve un
valor real
i
Variable
entera
contador
Dato. Dimensin de
v
Variable
entera
n
m m + 1
Figura 8.7: Diagrama de ujo para calcular un vector (w) a partir de otro dado (v) transformando
sus componentes seg un el polinomio R(x) = 1 + x +
x
2
2!
+
x
3
3!
+
x
4
4!
.
c MRA & JAAR 2010 DISA. ESI. US. 153
inicio del clculo de (a,b)
como Recta(x0,y0,x1,y1)
fin del clculo de (a,b) como
Recta(x0,y0,x1,y1)
dx x1-x0
dy y1-y0
a dy/dx
b y0-ax0
x0
Argumento. Abscisa del
primer punto
Resultado, pendiente de
la recta que pasa por
ambos puntos
Variable real
a Variable real
y0
Argumento. Ordenada del
primer punto
Variable real
x1
Argumento. Abscisa del
segundo punto
Variable real
y1
Argumento. Ordenada del
segundo punto
Variable real
Resultado, ordenada en
el origen de la recta
que pasa por P
0
y P
1
b Variable real
Diferencia de abscisas dx Variable real
Diferencia de ordenadas dy Variable real
Figura 8.8: Diagrama de ujo de una funcion que calcula la pendiente a y la ordenada en el
origen b de la recta que pasa por dos puntos genericos del plano P
0
y P
1
.
5. Funcion para calcular la media aritmetica de las componentes de un vector.
6. Funcion para calcular la suma S =

n
h=1
a
h
h
n
, siendo a un vector dado como argumento,
a IR
n
y siendo n > 0 entero otro argumento.
7. Funcion para calcular el producto escalar de dos vectores v IR
n
y w IR
n
, suponiendo
n > 0 entero.
8. Funcion EvaPol() que eval ue el polinomio A(x) = a
1
x
n
+ +a
n
x
1
+a
n+1
x
0
dado el grado
del polinomio n 0 entero, el vector de coecientes a = (a
1
, , a
n+1
) y el valor x. Puede
hacer uso de las funciones que haya realizado con anterioridad para calcular las potencias.
9. Funcion que calcule el vector de coecientes de un polinomio C suma de otros dos (A y B).
La funcion ha de recibir los grados na, nb y los vectores de coecientes vA = (a
1
, , a
na+1
)
y vB = (b
1
, , b
nb+1
) de cada uno de los dos polinomios sumandos. La funcion devolvera
el grado y el vector de coecientes del polinomio suma C = A + B.
8.3.2 Ejercicios de Programas
Realice los diagramas de ujo 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
la cantidad r =
x
y
+y
x
(x+y)
x+y
.
154 TEMA 8. FUNCIONES
inicio del clculo de (a,b)
como Recta(x0,y0,x1,y1)
fin del clculo de (a,b) como
Recta(x0,y0,x1,y1)
dx x1-x0
dy y1-y0
a dy/dx
b y0-ax0
inicio
fin
vx
Vector de
variables
reales
Dato, vector de n
abscisas
Funcin que calcula
los parmetros de la
recta que pasa por
dos puntos dados
como argumento
Recta(x0,
y0, x1,y1)
Devuelve un
vector con
dos
componentes
reales
k n-1 ?
k 1
s
no
k k + 1
k
Variable
entera
contador
vy
Vector de
variables
reales
Dato, vector de n
ordenadas
n
Variable
entera
Dimensin de vx y vy
res
Vector de
variables
reales
vector auxiliar de 2
componentes que recoge
el resultado de
Recta()
va
k
res
1
res Recta(vx
k
,vy
k
,vx
k+1
,vy
k+1
)
x0
Argumento. Abscisa del
primer punto
Resultado, pendiente de
la recta que pasa por
ambos puntos
Variable real
a Variable real
y0
Argumento. Ordenada del
primer punto
Variable real
x1
Argumento. Abscisa del
segundo punto
Variable real
y1
Argumento. Ordenada del
segundo punto
Variable real
Resultado, ordenada en
el origen de la recta
que pasa por P
0
y P
1
b Variable real
Diferencia de abscisas dx Variable real
Diferencia de ordenadas dy Variable real
Figura 8.9: Calculo de las pendientes de las rectas que pasan por un conjunto de puntos de IR
2
.
c MRA & JAAR 2010 DISA. ESI. US. 155
2. Se ha de realizar un programa que lea dos vectores de IR
3
y calcule y escriba el coseno del
angulo que forman.
3. Se ha de realizar un programa que lea dos vectores de IR
3
. El programa posteriormente
escribira: un cero si los vectores son paralelos, en caso contrario el programa escribira un
vector perpendicular al plano que forman los vectores ledos.
4. Se ha de realizar un programa que lea los coecientes c
k
de un polinomio P de grado 4.
Se supondra que el polinomio es de la forma P(x) = c
1
x
4
+ c
2
x
3
+ c
3
x
2
+ c
4
x
1
+ c
5
x
0
. El
programa posteriormente leer a un valor para la variable independiente x. Finalmente el
programa escribira el valor r = P(x) usando la funcion EvaPol().
156 TEMA 8. FUNCIONES

También podría gustarte