Typeset by GMNI & FoilTEX
EN
PROGRAMACION
LENGUAJE FORTRAN
GMNI GRUPO DE METODOS
NUMERICOS
EN INGENIERIA
Departamento de M
etodos Matem
aticos y de Representaci
on
Escuela T
ecnica Superior de Ingenieros de Caminos, Canales y Puertos
Universidade da Coru
na
GMNI - Grupo de Metodos Numericos en Ingeniera
[Link]
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Indice
I Organizaci
on de un ordenador convencional
I Algoritmos, programas y lenguajes de programaci
on
I Lenguaje Fortran
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Organizaci
on de un ordenador convencional (I)
I Un ordenador es un aparato capaz de almacenar datos y procesarlos de
acuerdo con una secuencia de
ordenes establecidas que se le proporcionan
con la finalidad de obtener una cierta informacion
I La secuencia de instrucciones que se aplica se conoce como programa. A
la elaboraci
on de estos programas dedicaremos gran parte de este tema.
I Aunque existen algunos precedentes los ordenadores como tal surgieron en
los a
nos 40 del siglo XX
I Un ordenador se compone esencialmente de:
Hardware: componentes fsicos de funcionamiento(modulos de memoria, placa base,
procesador,...)
Software: componentes o aplicaciones implementadas sobre el hardware que han
sido elaboradas para realizar una secuencia de
ordenes determinada.
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Organizaci
on de un ordenador convencional (II)
I Hardware:
CPU (Central Processing Unit): es un componente del ordenador que se encarga de
realizar las operaciones que se le indican con el software.
B Unidad logica que realiza las operaciones con los datos.
B Unidad de control que interpreta la secuencia de operaciones y gestiona los dispositivos asociados.
Memoria principal (RAM-Random Access Memory): gestiona los datos y
especificaciones que esta utilizando el procesador en cada momento.
B Es una memoria volatil.
B De acceso mas rapido que la memoria secundaria.
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Organizaci
on de un ordenador convencional (III)
Memoria secundaria (Disco duro, ...): Es una memoria permanente para almacenar
datos, software, ... Por lo tanto, es de acceso mas lento.
Placa base: es la interfaz encargada de conectar todos los elementos de hardware con el
procesador (CPU)
Perifericos: son los dispositivos externos que se acoplan al ordenador a traves de la
placa base
-Teclado, rat
on, monitor,...
-Lectores y grabadores
opticos
-Dispositivos de audio
-...
I Software:
Sistema operativo (Windows, Linux, Unix, MAC OS, MS-DOS, VMS,...)
Editores de texto (Word, OpenOffice, Wordpad, Scite, vi, emacs,...)
Hojas de calculo (Excel, OpenOffice,...)
...
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Organizaci
on de un ordenador convencional (IV)
I Potencia de un ordenador:
Frecuencia de reloj de la CPU (GHz, MHz,...) medidos en la practica en Gigaflops
(operaciones en coma flotante por segundo)
Velocidad del bus de conexion entre el procesador y la memoria RAM (FSB-Front Side
Bus) medido normalmente en MHz.
Memoria RAM: tanto en tama
no (Mb, Gb,...) como en velocidad de acceso (MHz)
I Tratamiento de la informaci
on:
Concepto de bit (BInary digiT): base de numeracion 2
memoria mas peque
na
CPU: procesadores de 8, 16, 32, 64, 128 bits
Unidades de medida:
0
1 . Es la unidad de
B 1 byte=8 bits=1 octeto
B 1 kocteto=103 octetos, 1 Mocteto=106 octetos, 1 Gocteto=109 octetos
B 1 kbyte=210 bytes = 1024 bytes, 1 Mb=220 bytes = (1024)2 bytes, 1 Gb=230 bytes = (1024)3
bytes
Importancia de la base binaria:
B Estructura del ordenador
B Almacenamiento de informaci
on:
1
0
1
1
1
Ej. 23 en Base decimal =
2
1
4
3
1 2 + 0 2 + 1 2 + 1 2 + 1 20
en base binaria
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Algoritmos, programas y lenguajes de programaci
on (I)
I Algoritmo:
Conjunto de instrucciones que describen las distintas etapas de un metodo para
conseguir ciertos resultados. Existen desde mucho antes de la aparici
on de los
ordenadores.
(Mohammed Ibn Musa abu Djafar Al-Khwarizmi, matematico siglo VIII-IX).
Si el algoritmo se hace empleando un lenguaje de ordenador, entonces ese conjunto de
instrucciones recibe el nombre de programa de ordenador
I Tipos de lenguajes de programaci
on:
Lenguaje maquina: combinacion de 0 y 1 que el ordenador es capaz de entender e
interpretar directamente
Lenguaje ensamblador (Assembler): sustituye el lenguaje maquina por codigos
nemonicos y nombres simb
olicos. La aplicaci
on que traduce estos c
odigos en lenguaje
maquina es el ensamblador
Lenguaje de alto nivel: presenta una sintaxis mas sencilla para el usuario. En ocasiones,
existe un lenguaje intermedio de apoyo para realizar la transici
on. Algunos de estos
lenguajes de alto nivel son: Fortran, C, C++, Python, Java, Cobol, Lisp, Basic, Pascal...
Cada nivel de lenguaje de programacion esta soportado por programas desarrollados en
alguno de los niveles inferiores
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Algoritmos, programas y lenguajes de programaci
on (II)
I Traducci
on de c
odigo fuente:
Interpretes: traducen instruccion por instruccion las secuencias de operaciones durante
la ejecucion. Son interactivos y modificables pero son lentos en la ejecuci
on. (Ej. Basic,
Python)
Compiladores: traducen el programa (codigo fuente) en bloque antes de la ejecucion
de las operaciones. No son modificables de modo interactivo pero son muy rapidos en la
ejecucion de las operaciones. (Ej. Fortran)
Por ejemplo, las fases de desarrollo de un programa Fortran son:
PROGRAMA FUENTE FORTRAN (*.for,*.f)
Compilacion
PROGRAMA OBJETO (*.obj)
Linkado
PROGRAMA EJECUTABLE (*.exe)
Ejecucion
RESULTADOS
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (I)
I Introducci
on:
Fortran es el acronimo de FORmula TRANslator y fue creado en 1954 por la compa
na
IBM en contraposici
on a otros lenguajes muy pr
oximos al lenguaje maquina de entonces.
Es un lenguaje estandar, de facil utilizacion, muy extendido, muy bien adaptado a los
problemas de ingeniera y muy perfeccionado a lo largo de sus diferentes versiones: I, II,
III, IV, 66, 77, 90, 95, HPF (High Performance Fortran), 2000.
Se trata de un lenguaje de programacion secuencial cuyas sentencias se incorporan en
un fichero de texto plano con extensi
on (*.f, *.for).
El uso de may
usculas y min
usculas en el fichero de texto es indiferente.
Los caracteres e instrucciones de cada lnea del programa deben ajustarse al formato:
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (II)
I Elementos de un programa Fortran
(
No ejecutables
Sentencias:
Ejecutables
-tipo
-caractersticas
describen
de los datos
-valor
describen una acci
on a realizar
Comentarios: No afectan al procesamiento del programa (codigo fuente), pero favorecen
la comprensi
on del mismo por parte del programador.
I Organizaci
on de un programa Fortran
Common
-Declaraci
on de variables Dimension, implicit
Data, parameter
.
.
.
-Sentencias ejecutables
.
.
.
-END
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (III)
Sentencias Fortran
I Datos:
Constantes:
B Enteras: 12, -37, ...
B Reales
Coma fija: 6.5, -7.3, -0.12, 12.5 ...
Coma flotante: 0.12E+04, 0.13E-01, ...
B Complejas: (-3.7,5.4),(7E-3,5.1), ...
B L
ogicas:
.TRUE.
.FALSE.
B Alfanum
ericas (character): Diego,problema1, ...
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (IV)
Variables: Son nombres simbolicos que corresponden a una determinada posicion de
memoria en la que se almacena un valor (numerico, l
ogico, alfanumerico, ...). El primer
caracter que define el nombre debe ser una letra, pero los restantes pueden ser otros
smbolos. Pueden declararse de forma explcita (una a una) o de forma implcita
(mediante un criterio general aplicable a todas ellas)
B Enteras: Almacenan n
umeros enteros.
Por defecto, su nombre empieza por I, J, K, L, M, N (I-N). Pero la configuraci
on
por defecto puede cambiarse facilmente.
Pueden ocupar 2 bytes (simple precisi
on) INTEGER*2
Rango = (-32768, 32767)
Pueden ocupar 4 bytes (doble precisi
on) INTEGER*4
Rango = (-2147483648, 2147483647)
Atencion:
Se recomienda dejar como enteras I-N.
Utilizarlas s
olo como contadores enteros.
No se puede operar directamente con n
umeros reales. Hay que transformarlas
previamente
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (V)
B Reales:
Se almacenan en coma flotante. Por defecto, su nombre empieza por (A-H,O-Z)
Pueden almacenarse en 4 bytes (simple precisi
on) REAL*4
Rango (-1.7E38,-2.9E-39), (2.9E-39,1.7E38)
|{z}
SIGNO
(1 bit)
0.1234567
| {z }
MANTISA
(24 bits)
123456
| {z }
EXPONENTE
(7 bits)
Pueden almacenarse en 8 bytes (doble precisi
on) REAL*8
Rango (-1.0E+307,-1.E-309), (1.E-309,1.0E+307)
Si se han de hacer operaciones entre variables de distinto tipo es necesario
transformar uno de ellos para que sean del mismo tipo.
B Complejas:
No existe declaraci
on por defecto.
Declaraci
on explcita: COMPLEX*8 A1,A2
o COMPLEX*16 A3
Declaraci
on implcita: IMPLICIT COMPLEX*8 (H-K)
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (VI)
n
.true.
B L
ogicas: .false.
No existe declaraci
on por defecto
Declaraci
on explcita: LOGICAL VAR1, VAR2
Declaraci
on implcita: IMPLICIT LOGICAL (A-C)
Operaciones: .NOT., .AND., .OR.
Relaciones l
ogicas (asignan valores l
ogicos a variables numericas)
.LT. <
(o bien <)
.LE.
(o bien <=)
.EQ. =
(o bien ==)
.NE. 6=
(o bien /=)
.GE.
(o bien >=)
.GT. >
(o bien >)
B Alfanum
ericas: cualquier conjunto de caracteres comprendidos entre
Declaraci
on explcita: CHARACTER NOMBRE*20, APELLIDO*30
Declaraci
on implcita: IMPLICIT CHARACTER*20 (H-M)
Operador concatenaci
on:
A=PEDRO
B=GONZALEZ
C=A//BC=PEDRO GONZALEZ
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (VII)
B Matrices: Las matrices se almacenan por columnas en un vector
a11
a21
a31
a12
a22
a32
a13
a23
a33
!
(a11, a21, a31, a12, a22, a3,2, a13, a23, a33)
INTEGER I, J, K
REAL A, B, C
DIMENSION I(10),A(3,4), B(10,10,10)
B Data: Asigna valores iniciales a variables antes de ejecutarse el programa
DIMENSION A(3)
DATA A /1.0, 2.0, 3.0/
B Parameter: Asigna un nombre simb
olico a una constante.
PARAMETER (identificador1=cte1, identificador2=cte2)
PARAMETER (PI=3.14159265, ALFA=2.7)
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (VIII)
I Operaciones basicas:
Las operaciones elementales se interpretan de derecha a izquierda. Se
realizan las operaciones indicadas en las sentencias a la derecha del smbolo
= y se almacenan sobre la variable indicada en la parte izquierda.
factor=x*y
Suma: x=a+b
a, b y c deben ser del mismo tipo
Resta: x=a-b
a, b y c deben ser del mismo tipo
Producto: x=a*b
a, b y c deben ser del mismo tipo
a, b y c deben ser del mismo tipo
Cociente: x=a/b
Precaucion al dividir entre 0.d+00. Se producen errores de overflow y dan lugar a
salidas tipo (NaN)
Potencia: x=a**b
Si es posible el exponente b debe ser una variable entera. La base sera normalmente una
variable real.
Si se necesita calcular potencias de exponente real, el calculo sera mas lento e impreciso.
Prioridad de operaciones (de menos a mas):
Y en caso de conflicto de izquierda a derecha.
, / , ()
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (IX)
I Funciones
Externas: funciones aritmeticas incorporadas en libreras del sistema
sin(x)
cos(x)
asin(x)
acos(x)
log(x)
exp(x)
tan(x)
atan(x)
sqrt(x)
abs(x)
aint(x) E(x)
cosh(x)
senh(x)
tanh(x)
Intrnsecas del compilador: funciones de conversion
B
B
B
B
B
B
B
nint(x) (Nearest INTeger): (real*4 o real*8) Z (Por aproximacion)
int(x) (parte entera): (real*4) Z (Por truncamiento)
dint(x) (parte entera): (real*8) Z (Por truncamiento)
ifix(x) (parte entera): (real*4) Z (Por truncamiento)
float(x) (coma flotante): (integer*2) IR
dfloat(x) (coma flotante): (integer*4) IR
dble(x) real*4 real*8
Aritmeticas: definidas por el usuario
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (X)
I Instrucciones de control:
GOTO
GOTO INCONDICIONAL:
GOTO ET1
Transfiere el curso del programa a la lnea de c
odigo que tiene como etiqueta (label)
el n
umero ET1
Es recomendable que la lnea con etiqueta ET1 tenga la instrucci
on CONTINUE
porque algunos compiladores lo exigen
47
goto 47
Sentencias no incluidas
continue
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XI)
IF
IF LOGICO:
IF (ILOGIC) EXPRESION
ILOGIC= Expresi
on o variable l
ogica
EXPRESION= Expresi
on de cualquier tipo o instrucci
on
Ejemplos:
if ([Link].b)e=a+c
if (([Link].b).and.([Link].d))goto 10
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XII)
BLOQUES IF:
if (ilogic) then
Sentencias a ejecutar si se cumple ilogic
endif
if (ilogic) then
Sentencias a ejecutar si se cumple ilogic
else
Sentencias a ejecutar si no se cumple ilogic
endif
if (ilogic1) then
Sentencias a ejecutar si se cumple ilogic1
elseif (ilogic2) then
Sentencias a ejecutar si se cumple ilogic2 y no se cumple ilogic1
else
Sentencias a ejecutar si no se cumple ni ilogic1 ni ilogic2
endif
if ([Link].1) then
a=x*y
elseif ([Link].0) then
a=x+y
else
a=x-y
endif
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XIII)
BLOQUES IF (Bucles anidados):
if (cond1) then
if (cond2) then
... sentencias a ejecutar
else
... sentencias a ejecutar
endif
else
if (cond3) then
... sentencias a ejecutar
else
... sentencias a ejecutar
endif
endif
si se cumplen cond1 y cond2
si se cumple cond1 y no se cumple cond2
si no se cumple cond1 y se cumple cond3
si no se cumple cond1 y no se cumple cond3
if ([Link].1) then
if ([Link].2) then
x=a+b
else
x=a-b
endif
else
if ([Link].1) then
x=a*b
endif
endif
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XIV)
Programa de ejemplo: Calculo del factorial de 10
program factorial
integer*4 i,fact
10
fact=1
i=0
continue
i=i+1
fact=fact*i
if([Link].10)goto 10
end
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XV)
DO
Permite repetir una secuencia de operaciones un n
umero determinado de veces:
do icontador=imin,imax,is
Secuencia a repetir desde "imin"hasta "imax" de "is" en "is"
enddo
imin
imax
is
valor mnimo de comienzo del contador
valor maximo que podra alcanzar el contador
intervalo de salto entre cada valor del contador
(opcional, si no se indica is=1)
program factorial
integer*4 i,fact
fact=1
do i=1,10
fact=fact*i
enddo
end
do i=n,1,-1
do j=1,m
Secuencia a repetir
enddo
enddo
DO WHILE: Repite la secuencia mientras se cumpla la condicion establecida
do while(condicion_logica)
Secuencia a repetir
enddo
STOP: Detiene la ejecucion del programa
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XVI)
I INSTRUCCIONES DE LECTURA Y ESCRITURA DE DATOS. FORMATOS
READ: Instruccion de lectura de datos
READ(NL,NF) Variables
n
NL = n
umero de unidad l
ogica de lectura (teclado=5)
donde: NF = n
umero de etiqueta de lnea donde se especifica el formato de lectura
100
read(5,100)a,b,c
format(3d15.6) El formato se explica en el siguiente apartado
read(5,*)a,b,c Lectura con formato libre
WRITE: Instruccion de escritura de datos (por defecto, salta de lnea al final)
WRITE(NL,NF) Variables
n
NL = n
umero de unidad l
ogica de escritura (pantalla=6)
donde: NF = n
umero de etiqueta de lnea donde se especifica el formato de escritura
100
write(6,100)a,b,c
format(3d15.6)
El formato se explica en el siguiente apartado
write(6,*)a,b,c Escritura con formato libre
B Los formatos se pueden escribir en cualquier punto del programa, pero es aconsejable escribirlos a
continuacion de la instruccion READ o WRITE
B Nunca deben introducirse dentro de instrucciones de control (goto, if, ...) porque pueden no ser
accesibles desde otros puntos del programa
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XVII)
FORMAT: Establece el formato con que se leen y se escriben los datos (cifras,
decimales, tipo, ...)
Especificaciones: $
No salto de lneal al final de la instruccion
/ Salto de lnea adicional
,
Separacion de especificaciones
n
n = n
umero de variables con esa especificaci
on (opcional)
Var. enteras: nIm siendo
m = dgitos totales del n
umero entero (signo incluido)
15i5 15 n
umeros enteros con 5 dgitos ( -210, -1234)
umero de variables reales (opcional)
n = n
m = total de cifras del n
umero real
nFm.d
Var. reales:
(incluido signo, coma y 0.)
d = n
umero de cifras decimales
nEm.d
nDm.d
n = n
umero de reales (opcional)
m = total de cifras del n
umero real
(incluido signo, coma y 0, de la mantisa,
letra E, signo y cifras del exponente)
d = cifras decimales de la mantisa
Igual que el anterior pero para real*8
17f5.1 17 n
umeros reales de 5 cifras con 1 decimal ( 12.1, -12.1)
3e12.5 3 reales de 12 caracteres y 5 decimales ( 0.12345E+05, -0.12345E-05)
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XVIII)
Variables alfanum
ericas: nam
n = no de variables (opcional)
m = no de caracteres de cada una (opcional)
15a5 15 variables de 5 caracteres (Diego, serie, ...)
Espacios: nx donde n es el n
umero de espacios
Normas generales sobre formatos:
Dar un formato adecuado a cada variable
Si el formato se agota antes que las variables se repite de nuevo
Si la lista de variables se agota antes que el formato se obvian el resto de especificaciones
Cuidado con la capacidad de los formatos (el n
umero 1000 no cabe en un formato i3), aparecen ()
Definicion alternativa de formatos:
Se puede especificar directamente un formato propio para cada sentencia READ/WRITE
WRITE(6,(FORMATO))
write(6,(i5,5e15.6))
Ejemplos
-1234.123
read(5,10)a
10 format(f9.3)
Serie 123 read(5,(a5,x,i3))a,i
write(6,11)3.1416d+00
11 format(d10.3)
0.314E+01
write(6,*) Serie Serie
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XIX)
FICHEROS DE ENTRADA/SALIDA DE DATOS
[Link]
old
n o
[Link]
new
OPEN(UNIT= no ,FILE=
, STATUS=
)
...
unknown
n o
Normalmente, el n
umero de unidad l
ogica no [10, 99]
n o
Cuando finaliza la lectura o escritura se deben cerrar con CLOSE( no )
Ejemplos:
open(unit=11,file=[Link],status=old)
do i=1,100
read(11,(i5,3e15.6))ipunto,xpunto,ypunto,zpunto
enddo
close(11)
10
open(unit=12,file=[Link],status=unknown)
write(12,10)i,j,x,y,z
format(3x,2(i5,2x),/,3(3x,f8.4))
close(12)
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XX)
I VECTORES Y MATRICES
Declaracion Igual que para el resto de variables (integer*4, real*8,...)
Se indica el tipo de informaci
on que se almacena.
Dimensionamiento estatico
DIMENSION NOMBRE 1(k1,k2,...,km)
m indica en este caso el n
umero de dimensiones de la matriz (array)
m = 1 la informaci
on se almacena con estructura de vector
m = 2 la informaci
on se almacena como en una matriz en dos dimensiones
m > 2 la informaci
on se almacena como en una hipermatriz en m dimensiones
ki (i = 1, ..., m) es el n
umero de componentes que contiene el array en
cada dimensi
on. Con esta informaci
on se reserva la memoria necesaria.
La informaci
on se almacena internamente por columnas:
a11 a12
a21 a22
se almacena internamente como
[a11, a21, a12, a22]
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXI)
Vectores (n)
Lectura/Esc. por fila
Lectura/Esc. por columna
dimension a(100)
dimension a(10)
do i=1,10
read(5,*)a(i)
enddo
read(5,*)(a(i),i=1,10)
Matrices (nm)
Lectura/Esc. en 1 fila
dimension b(10,20)
write(6,*)((b(i,j),j=1,20),i=1,10)
Lectura/Esc./modificaci
on por filas
dimension b(10,20)
do i=1,10
do j=1,20
read(5,*)b(i,j)
enddo
enddo
Lectura/Esc. en filas y columnas
dimension b(10,20)
do i=1,100
write(6,*)(b(i,j),j=1,20)
enddo
Lectura/Esc./modificaci
on por columnas
dimension b(10,20)
do j=1,20
do i=1,10
write(6,*)b(i,j)
enddo
enddo
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXII)
Consideraciones importantes:
El almacenamiento de grandes matrices es muy costoso porque requiere mucha
capacidad de almacenamiento en memoria
implicit real*8(a-h,o-z)
dimension a(10000,10000)
10000100008 bytes 763Mb
Es necesario ser muy cuidadoso con el dimensionamiento de las matrices:
B Si nos pasamos dimensionando podemos exceder los lmites de memoria del
ordenador
B Si nos quedamos demasiado cortos podemos sobreescribir otras variables
(OJO: Fortran no avisa de este problema)
SOLUCION:
DIMENSIONAMIENTO DINAMICO.
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXIII)
Dimensionamiento dinamico:
I Se realiza en dos pasos:
1. En la declaraci
on de variables se indica que una variable sera un array:
implicit integer*4(i-n), real*8(a-h,o-z)
allocatable nombre1(:,:,...), nombre2(:,:,...)
...
El n
umero de dimensiones del array se establece con el n
umero de : que se indican
2. En las sentencias del programa se indicara el tama
no de ese array:
...
allocate nombre1(k1, k2, ...), nombre2(m1, m2, ...)
...
siendo k1, k2, m1, m2... el n
umero de componentes en cada dimensi
on.
I El tipo de datos (INTEGER, REAL, ...) que contiene el array se indica de la misma forma
que para las restantes variables: de forma explcita
o implcita.
I NOTA: Esta forma de dimensionamiento dinamico solo se debe aplicar en el
programa principal.
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXIV)
I SUBPROGRAMAS:
La utilizacion de subprogramas permite disponer de modulos de calculo separados del
programa principal a los que se puede acceder desde cualquier parte del mismo.
Una vez realizadas sus operaciones devuelven el control al programa principal
Los distintos modulos pueden, a su vez, llamarse entre s unos a otros
Permiten realizar una programacion modular y estructurada en la que es posible que en
el programa principal s
olo figuren las llamadas a subprogramas que realicen las
operaciones correspondientes programas mucho mas sencillos
Cada modulo se puede compilar por separado (cada uno contiene un END) que se
conecta al programa principal durante el linkado
La transferencia de informacion entre el subprograma y el programa principal es
fundamental. (OJO: las variables en FORTRAN indican la posici
on en memoria donde
se almacenan)
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXV)
I Esquema basico de programa.
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXVI)
FUNCIONES:
Son subprogramas elementales que prepara el usuario para evaluar funciones
Tipo FUNCTION nombre funcion (lista de argumentos)
Lista de DIMENSION
...Instrucciones
RETURN
END
Definici
on
-Tipo = INTEGER, REAL, ... Si no se especifica depende de la 1a letra del nombre
on
-nombre funcion = nombre de la funci
-Lista de argumentos = (opcional) nombre de las variables transferidas mediante
argumentos separados por comas
-Instrucciones = Instrucciones que realiza la funci
on. Debe aparecer al menos 1 vez
el nombre de la funci
on como variable
-RETURN = devuelve el control a la instrucci
on de llamada.
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXVII)
FUNCIONES:
Llamada desde el programa principal
Es una asignaci
on directa del tipo:
variable = nombre funcion (lista de argumentos)
donde:
-variable = almacena el valor que devuelve la funci
on
-Lista de argumentos: lista de variables separadas por comas que se envan a la
funcion. Deben coincidir en n
umero, tipo y orden de aparici
on. El nombre puede ser
distinto
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXVIII)
B Ej. Funcion que calcula el modulo de un vector de m componentes (m 10)
implicit real*8(a-h,o-z)
implicit integer*4(i-n)
dimension v(10)
n=10
do i=1,n
Programa ppal.
v(i)=1.d+00
enddo
vmod=vecmod(v,n)
end
function vecmod(w,m)
implicit real*8(a-h,o-z)
implicit integer*4(i-n)
dimension w(m)
vecmod=0.d+00
do i=1,m
Funci
on
vecmod=vecmod+w(i)*w(i)
enddo
vecmod=sqrt(vecmod)
return
end
Las variables de la lista de argumentos ocupan la misma posicion de memoria que en el programa principal.
Por lo tanto, si se modifican dentro de la funcion se modifican para los restantes modulos y operaciones.
Si no se indican en la lista de argumentos, las variables son locales para la funcion y aunque tengan el
mismo nombre corresponden a posiciones de memoria distintas.
Al finalizar la ejecucion de la funcion, las variables locales de la funcion desaparecen.
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXIX)
SUBRUTINAS:
Subprogramas que permiten devolver al programa principal no s
olo el valor de una
funcion sino varios conjuntos de resultados
SUBROUTINE nombre(lista de argumentos separados por comas)
Declaraci
on de variables
... Instrucciones
RETURN
END
Las variables de la lista de argumentos ocupan la misma posici
on de memoria que en el
programa principal y son globales para todo el programa.
Las variables definidas dentro de la subrutina no transmitidas como argumento son
locales y se eliminan al salir de la misma
OJO: El nombre de la subrutina no puede aparecer como variable
Llamada desde el programa principal:
CALL nombre (lista de argumentos)
(argumentos de entrada y de salida)
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXX)
I Ejemplo de programa con subrutina y dimensionamiento estatico:
Programa ppal.
Subrutina
implicit real*8(a-h,o-z)
implicit integer*4(i-n)
dimension v(100)
! Siempre reserva 100 componentes
n=10
! S
olo se utilizan las 10 primeras
do i=1,n
v(i)=1.d+00
enddo
call vmod(v,n,vmodulo)
end
subroutine vmod(w,m,wmod)
implicit real*8(a-h,o-z)
implicit integer*4(i-n)
dimension w(m)
wmod=0.d+00
do i=1,m
wmod=wmod+w(i)*w(i)
enddo
wmod=sqrt(wmod)
if ([Link].(0.d+00))stop
do i=1,m
w(i)=w(i)/wmod
enddo
return
end
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXXI)
I Ejemplo de programa con subrutina y dimensionamiento dinamico:
Programa ppal.
Subrutina
implicit real*8(a-h,o-z), integer*4(i-n)
allocatable v(:)
n=10
allocate(v(n))
! Se reservan s
olo n componentes
do i=1,n
v(i)=1.d+00
enddo
call vmod(v,n,vmodulo)
end
subroutine vmod(w,m,wmod)
implicit real*8(a-h,o-z)
implicit integer*4(i-n)
dimension w(m)
wmod=0.d+00
do i=1,m
wmod=wmod+w(i)*w(i)
enddo
wmod=sqrt(wmod)
if ([Link].(0.d+00))stop
do i=1,m
w(i)=w(i)/wmod
enddo
return
end
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun
Lenguaje Fortran (XXXII)
I Bibliografa:
Fortran 77 for engineers and scientists with an introduction to Fortran 90, Larry
Nyhoff y Sandford Leestma, Prentice Hall, Upper Saddle River, NJ, USA, 1996
Aprenda Fortran 8.0 como si estuviera en primero, Javier Garca de Jalon, Franciso de
Ass de Ribera, E.T.S. Ingenieros Industriales, Universidad Politecnica de Madrid, 2005
a
E.T.S.I. Caminos, Canales y PuertosUniversidade da Corun