Funciones y subrutinas

Anuncio
Algorítmica y Lenguajes de Programación
Funciones y subrutinas
Funciones y subrutinas. Introducción
n
n
n
n
El diseño descendente permite obtener un programa
que resuelva un problema dividiendo este en
subproblemas cada vez más sencillos.
Cada subproblema tiene asociado un pseudocódigo
de alto nivel compuesto por acciones no primitivas.
Cuando una de estas acciones no primitivas se repite
en varios puntos del algoritmo es interesante darle
un nombre y reutilizarla.
Estas acciones con nombre se denominan
subprogramas, pudiendo ser, a su vez, funciones y
subrutinas.
2
1
Funciones y subrutinas. Ventajas
n
Las ventajas de los subprogramas son
múltiples:
n
n
n
n
Facilitan la modularidad y estructuración de los
algoritmos.
Facilitan la lectura e inteligibilidad de los
algoritmos.
Permiten economizar el esfuerzo del programador
al permitir reutilizar el mismo código en varios
puntos del mismo algoritmo.
Facilitan la depuración y mantenimiento de los
programas.
3
Funciones y subrutinas. Funciones (i)
n
n
n
Las funciones son subprogramas con 0 ó más
argumentos que siempre devuelven un valor de
retorno.
Las funciones pertenecen entonces a un tipo
determinado.
La invocación de una función puede formar parte
de:
n
n
n
Una expresión.
La parte derecha de una asignación.
Una invocación de una función no puede formar:
n
n
Una sentencia aislada.
La parte izquierda de una asignación.
4
2
Funciones y subrutinas. Funciones (ii)
n
Funciones intrínsecas:
n
n
n
Las funciones intrínsecas son proporcionadas
directamente por el lenguaje de
programación.
La mayor parte de funciones intrínsecas son
funciones matemáticas como la raíz cuadrada,
los logaritmos o funciones trigonométricas.
Por cada una de las funciones intrínsecas más
habituales en FORTRAN existe una función o
un operador equivalentes en la notación
algorítmica.
5
Funciones y subrutinas. Funciones (iii)
n
Funciones de usuario (i):
n
n
En muchas ocasiones el usuario estará
interesado en definir sus propias funciones.
Las funciones de usuario deben estar
definidas dentro del algoritmo principal:
definiciones de constantes
declaraciones de variables
inicio
sentencia s del algoritmo
DEFINICIONES DE FUNCIONES
fin
program nombre_programa
variables y constantes
sentencia s del programa
contains
DEFINICIONES DE FUNCIONES
end
6
3
Funciones y subrutinas. Funciones (iv)
n
Funciones de usuario (ii):
n
Para definir una función es necesario:
n
n
n
n
El nombre de la función.
El tipo de la función.
Los argumentos de la función y el tipo de los mismos.
Sintaxis de definición de funciones:
tipo funcion nombre (arg1∈
∈ tipo1,..., argN∈
∈ tipoN)
inicio
sentencia1
sentencia2
...
sentenciaN
fin
tipo function nombre (arg1, ..., argN)
declaración arg1
...
declaración argN
sentencia1
sentencia2
...
sentenciaN
end
7
Funciones y subrutinas. Funciones (v)
n
Ejemplos de funciones de usuario:
logico funcion siempreVerdad ()
inicio
siempreVerdad ß
ß verdadero
fin
logical function siempreVerdad ()
siempreVerdad=.true.
end function
entero funcion maximo (a ∈
∈ entero, b ∈
∈ entero)
inicio
si a>b entonces
integer function maximo (a, b)
integer a,b
maximo ß
ß a
si no
maximo ß
ß b
fin si
fin
if (a>b) then
maximo =a
else
maximo =b
end if
end function
8
4
Funciones y subrutinas. Ámbitos (i)
n
Las funciones pueden acceder a una serie de variables:
n
n
n
n
n
n
Argumentos.
Variables definidas dentro de la función.
Estas variables se denominan locales por contraposición a
las variables declaradas dentro del algoritmo principal
denominadas globales.
Las variables locales sólo “existen” mientras la función se
está ejecutando.
Si una variable local se denomina igual que una variable
global la función sólo puede acceder a la primera.
En FORTRAN las subrutinas pueden modificar los valores de
los argumentos recibidos; este fenómeno se denomina
efecto lateral y hay que manejarlo con precaución.
9
Funciones y subrutinas. Ámbitos (ii)
n
Consecuencias de los efectos laterales:
01. program programa
02.
03.
implicit none
04.
05.
integer x,y
06.
07.
x=1;y=1
08.
print *,suma(x,y)
09.
10.
print *,suma(x,y)
11.
12.
contains
integer function suma (a,b)
13.
implicit none
14.
15.
integer a,b
16.
17.
a=a+b
suma=a
18.
end function
19. E nd
Aparentemente las líneas 08 y 09 hacen lo
mismo.
La línea 16 de la función suma hace que el
argumento a cambie de valor, esto afecta a
la variable x que es la que fue pasada a la
función.
Consecuencia: el programa se comporta
de manera inesperada.
Moraleja: una función NUNCA debe
modificar el valor de los argumentos
que recibe.
10
5
Funciones y subrutinas. Subrutinas (i)
n
Subrutinas o procedimientos:
n
n
n
n
Las subrutinas son subprogramas con 0 ó más
argumentos que nunca devuelven un valor de
retorno.
Las subrutinas, por tanto, no tienen tipo.
La invocación de una subrutina sólo puede
aparecer en una sentencia de llamada a
procedimiento (llamar/call).
Una invocación de subrutina no puede formar:
n
n
n
Una expresión.
La parte derecha de una asignación.
La parte izquierda de una asignación.
11
Funciones y subrutinas. Subrutinas (ii)
n
n
Las subrutinas se definen en la misma zona que las
funciones.
La sintaxis de la definición es la siguiente:
accion nombre_subrutina ([ent |sal| ent sal] arg1∈
∈ tipo1, ..., [ ent|sal|ent sal] argN∈
∈ tipoN )
inicio
sentencia1
...
sentenciaN
fin
subroutine nombre_subrutina (arg1, ..., argN )
inicio
declaración arg1
...
declaración argN
sentencia1
...
sentenciaN
fin
12
6
Funciones y subrutinas. Subrutinas (iii)
n
Ejemplos de subrutinas:
accion intercambio (a,b ∈
∈ entero)
inicio
temporal ∈
∈ entero
temporal ß
ß a
a ß
ß b
b ß
ß temporal
fin
accion asteriscos (n ∈
∈ entero)
inicio
i ∈
∈ entero
desde iß
ß 1 hasta n hacer
escribir ‘*’
fin desde
fin
subroutine intercambio (a,b)
implicit none
subroutine asteriscos (n)
implicit none
integer a,b
integer temporal
temporal=a
a=b
b=temporal
end subroutine
integer n
integer i
do i=1, n
print *, ‘*’
end do
end subroutine
13
Funciones y subrutinas. Resumen (i)
Los subprogramas facilitan la utilización de técnicas de diseño
descendente para la construcción de programas.
Los subprogramas:
1.
2.
•
•
•
•
3.
4.
5.
6.
Facilitan la modularidad y estructuración de los algoritmos.
Facilitan la lectura e inteligibilidad de los algoritmos.
Permiten una economización del esfuerzo del programador al poder escribir
código reutilizable en muchas partes de un mismo algoritmo.
Facilitan la depuración y mantenimiento de los programas.
Los subprogramas pueden ser funciones y subrutinas.
Las funciones son subrutinas con 0 ó más argumentos y que devuelven
un único valor de retorno.
Las funciones pueden formar parte de expresiones o aparecer en a
l
parte derecha de una sentencia de asignación pero nunca pueden
constituir una sentencia aislada o aparecer en la parte izquierda de una
asignación.
Las funciones son invocadas mediante su nombre seguido de los
argumentos entre paréntesis.
14
7
Funciones y subrutinas. Resumen (ii)
7.
Existen dos tipos de funciones: intrínsecas y definidas por el usuario.
8.
Las funciones intrínsecas son funciones de uso muy común: raíz
cuadrada, logaritmos, funciones trigonométricas, etc.
9.
Las funciones definidas por el usuario deben describirse dentro del
algoritmo principal.
10.
Los argumentos y variables declaradas dentro del cuerpo de una
función (o subrutina) se denominan variables locales, las variables
declaradas dentro del programa principal son variables globales. Los
subprogramas tienen acceso a las variables globales aunque en el caso
de que una variable local se denomine igual que una variable glo bal
tiene preferencia la primera.
11.
Las subrutinas son subprogramas que no devuelven ningún resultado;
sin embargo, gracias a la utilización de los efectos laterales es posible
su utilización para permitir el “retorno” de varios resultados.
15
8
Descargar