You are on page 1of 10

Un breve curso de FORTRAN (por E.

Velasco)
Introduccin
Escritura del programa
Conceptos bsicos del lenguaje

Variables

Entradas y salidas

Operadores matemticos y funciones intrnsecas

Salto incondicional

Bucles

Estructuras condicionales

Subrutinas y funciones extrnsecas

Ejercicios y problemas

Introduccin
El FORTRAN (FORmula TRANslator) es un lenguaje de programacin muy
potente. Es el primer lenguaje cientfico, siendo desarrollado a ltimos de
la dcada de los 50, pero es an ampliamente utilizado en aplicaciones
cientficas y de ingeniera. La ltima versin de FORTRAN actualmente es
la version FORTRAN 90, que reemplaz a la versin FORTRAN 77 a
comienzos de la dcada de los 90. El FORTRAN 90 incorpor nuevas
estructuras y caractersticas en su sintxis, si bien an es compatible con
la anterior versin. Por ello, en este breve curso se pasa revista a los
elementos bsicos del FORTRAN 77. Se trata de un curso muy
introductorio; para una exposicin ms detallada habr que consultar
algn manual de FORTRAN.
En los primeros tiempos de la informtica cualquier clculo que implicara
la evaluacin de frmulas matemticas haba de hacerse mediante
complicados programas, que traducan esas frmulas al lenguaje del
ordenador, muy primitivo. EL FORTRAN es un lenguaje de alto nivel,
orientado a facilitar las cosas al usuario, y que permite escribir el
programa de manera casi idntica a como se escriben las frmulas en un
papel.
En FORTRAN las instrucciones que el usuario transmite al ordenador se
encuentran en un fichero de texto (en cdigo ASCII), que es necesario
escribir (utilizando un editor de textos cualquiera). El nombre del fichero
sigue las convenciones del sistema operativo del ordenador. En DOS un
programa FORTRAN suele tener la extensin '.FOR', por ejemplo,
'CALCULO.FOR'; en Unix es tradicional que la extensin sea '.f', por

ejemplo, 'calculo.f'. Los nombres de los programas son libres (salvo ciertas
limitaciones de longitud y tipos especiales de caracteres que no pueden
aparecer en el nombre del fichero).
Al contrario que el BASIC, que es un lenguaje interpretado, el FORTRAN es
un lenguaje compilado. sto significa que, una vez escrito el programa,
ste ha de ser traducido en bloque al lenguaje mquina, o sea, el lenguaje
que entiende el procesador del ordenador, mediante un proceso llamado
compilacin; por contra, en un lenguaje interpretado las lneas de
programa se van traduciendo segn el flujo va pasando por ellas, con lo
que el proceso de ejecucin se enlentece.

Escritura del programa


Las instrucciones del programa se escriben en el fichero dispuestas en
lneas. En FORTRAN 77 las columnas de la 1 a la 5 se reservan para que se
puedan incluir etiquetas, en forma de nmeros, que hagan de sealizacin
con vistas a la posibilidad de que el flujo del programa vuelva a esa lnea
desde otra parte del programa. La columna 6 se reserva para incluir un
smbolo que le indique al compilador que esa lnea es la continuacin de la
lnea anterior. Por tanto, las instrucciones del programa en s comienzan a
partir de la columna 6 (es decir, de la 7 a la 80). Un ejemplo de programa
sencillo es:
PROGRAM EJEMPLO
REAL A, B, C
A=1
B=A+1
PRINT *, A,B
C=A+B+1
PRINT *,'C es igual a=',C
END
En este programa se introduce un 1 en la variable A (ahora veremos qu
son las variables); a continuacin se define la variable B como A ms 1, y
se escriben las dos variables en la pantalla. Luego se define la variable C
como la suma de A, B y 1 y, finalmente, se escribe un letrero y el valor de C
en la pantalla. Es imprescindible acabar los programas con la instruccin
END. Por contra, la instruccin que indica el comienzo del programa,
PROGRAM, no es imprescindible, aunque su presencia es recomendable
para hacer ms clara la estructura en caso de que existan subrutinas y
funciones definidas en el programa (ver ms abajo).

Conceptos bsicos del lenguaje

VARIABLES
El primer concepto importante es el de variable. Una variable es una
zona reservada en la memoria del ordenador, a la que se asigna un
nombre. En esta zona podemos guardar un nmero, o bien una
secuencia o cadena de caracteres. Las variables en las que se
pueden almacenar nmeros se llaman numricas, y pueden tener
como nombres una combinacin de caracteres, si bien el primero no
puede ser un nmero; el nmero de caracteres vara segn el
compilador. En el programa-ejemplo anterior, A, B y C son variables.
Otros ejemplos pueden ser SUMA,RESTO, RESUL1, etc. Las variables
se definen al comienzo del programa (es conveniente de hecho,

aunque no obligatorio en FORTRAN 77, definir todas las variables de


un programa al comienzo del mismo).
Las variables numricas pueden ser enteras, reales o complejas. Nos
referiremos aqu a las enteras y a las reales. Las variables enteras
contienen nmeros enteros (es decir, sin parte fraccionaria), p. ej.,
-5, y se definen al comienzo del programa mediante la instruccin
INTEGER. Las variables reales contienen nmeros reales, ya sea con
notacin decimal (p.ej. 3.14159) o exponencial (p.ej.1.457E5, que
quiere decir 1,457.10^5), y se definen al comienzo del programa
mediante la instruccin REAL. Dependiendo de la precisin con la
que queramos representar los nmeros que va a contener la
variable, las variables enteras y reales pueden ser de simple
precisin (cuatro bytes) o de doble precisin (ocho bytes). Este
hecho se indica en la definicin de la variable; p. ej.,
REAL*4 SUMA
REAL*8 RESTO
define SUMA como una variable real de simple precisin, y RESTO
como una variable real de doble precisin. Si no se indica la
precisin, el compilador entiende que se trata de variables reales en
simple precisin, p. ej., REAL SUMA es equivalente a REAL*4 SUMA.
Algunos compiladores permiten el uso de variables reales de
cudruple precisin, definidas con REAL*16. En notacin
exponencial las variables reales de simple, doble y cudruple
precisin se definen con la letra E, D y Q, para el exponente; p. ej.,
-3.14159E0, 5.67899876478E4, -1.276238978673524678Q-3. Para
las variables enteras, tenemos
INTEGER*4 PRIMER
INTEGER*8 SEGUN
Si no se especifica la precisin, el compilador entiende que la
variable entera es de simple precisin. Algunos compiladores
permiten definir variables enteras de slo dos bytes. Recurdese
que n bits permiten representar nmeros enteros (negativos y
positivos, incluyendo el cero) entre -2n-1+1 y 2n-1. As, dos bytes (es
decir, 2.8=16 bits) permiten representar nmeros slo entre -32767
y +32768.
Las variables en las que se pueden almacenar caracteres se llaman
alfanumricas; su nombre sigue las mismas convenciones que el de
las variables numricas, pero se definen mediante la instruccin
CHARACTER, seguida de *n, siendo n el nmero de caracteres que
puede almacenar la variable. As, p. ej.,
CHARACTER*10 NOMBRE
define una variable llamada NOMBRE que puede contener hasta diez
caracteres. Los caracteres almacenados en las variables
alfanumricas pueden ser cualesquiera y han de estar incluidos
entre comillas simples, p. ej., '1', 'El resultado es:', etc.
Se pueden definir conjuntos de variables, a modo de componentes
de un vector o matriz. Estas variables tienen un nombre y un ndice.
Por ejemplo, A(I) es una componente del vector A; la variable I
contiene un nmero entero y es un ndice. Tambin podemos tener

matrices, p. ej., B(I,J), con dos ndices, I y J. Las variables vectores


y matrices tambin han de declararse al principio del programa, con
la instruccin DIMENSION; As, podemos escribir
DIMENSION A(10)
lo que indica que el vector A tiene diez componentes, A(1), A(2), ...,
A(10).
Para una ms extensa exposicin del tema de variables en
FORTRAN, consltese un manual.

ENTRADAS Y SALIDAS
Las entradas de datos a un programa y las salidas de datos
producidos por ste se realizan en FORTRAN por medio de las
instrucciones READ y WRITE. Para escribir tambin se utiliza la
instruccin PRINT. La sintxis de las instrucciones READ y WRITE
es:
READ (unidad, formato) lista de variables
WRITE (unidad, formato) lista de variables
Para una explicacin de las unidades de lectura y escritura y los
formatos es FORTRAN se recomienda acudir a un manual de
FORTRAN. La situacin ms sencilla es aqulla en la que los datos se
introducen mediante el teclado, y los datos salen en la pantalla, con
formato libre. En estos casos se utiliza la sintxis
READ (*,*) lista de variables
WRITE (*,*) lista de variables
Para la escritura en la pantalla con formato libre existe tambin la
instruccin PRINT *,(la coma es parte de la instruccin).
Por ejemplo, el siguiente programa lee desde el teclado dos
variables, A y B, las suma y enva el resultado a la pantalla:
PROGRAM SUMA
REAL A, B, C
READ (*,*) A, B
C=A+B
WRITE (*,*) 'La suma es: ', C
END

OPERADORES MATEMTICOS Y FUNCIONES INTRNSECAS


Los nmeros y variables numricas se pueden combinar utilizando
operadores matemticos, como + (suma), - (resta), *
(multiplicacin) y / (divisin; en el caso de divisin entre enteros la
divisin es la divisin entera, p. ej., 3/2 = 1). Otra operacin
matemtica de inters es la exponenciacin, que se representa
mediante ** ; p. ej., 2**3 es dos elevado al cubo.
Algunas funciones estn incluidas en el FORTRAN. Son las funciones
intrnsecas, cuyo argumentos (o argumentos) se incluyen entre
parntesis. Funciones intrnsecas son la raiz cuadrada, SQRT, la
funciones trigonomtricas seno, SIN, coseno, COS, tangente, TAN,

arcoseno, ASIN, arcocoseno ACOS, arcotangente, ATAN, la funcin


exponencial, EXP y algunas otras. La sintxis de estas funciones es,
p. ej.,
SQRT(3.0), SIN(2.3), EXP(-1.0).
Obsrvese que los argumentos de estas funciones son nmeros
reales en simple precisin. Si los argumentos son en doble precisin
hay que colocar la letra D delante del nombre de la funcin. As, p.
ej., tendramos
DSQRT(3.0D0), DSIN(2.3D0), DEXP(-1D0).

SALTO INCONDICIONAL
Un salto incondicional es un cambio del flujo de un programa a otra
lnea de ste. Esta lnea de destino ha de estar identificada con un
nmero de lnea, que debe situarse en las columnas 1-5. El salto se
produce cuando el control del flujo encuentra la instruccin GO TO,
seguida del nmero de la lnea de destino. Un ejemplo de programa
con salto incondicional sera

A = 2.0
B = SQRT(A)
...
GO TO 1
...
C = B**2
...

donde ... indica un nmero indeterminado de lneas de programa.


Obsrvese cmo el flujo del programa cambiara a la lnea
identificada con el nmero 1 cuando el flujo pase por la instruccin
GO TO 1 y que, por tanto, las lneas de programa desde esa
instruccin hasta la lnea 1 no se ejecutaran. Al identificar las lneas
de programa mediante nmeros, tngase en cuenta que los
nmeros son simples etiquetas, y que no tiene por qu mantenerse
una numeracin creciente.

BUCLES
El bucle es una estructura que permite efectuar repeticiones de un
conjunto de instrucciones. Las instrucciones de control de un bucle
son DO-END DO. Asociada al bucle existe una variable de control,
normalmente entera, que hace de ndice. La sintxis general de la
estructura en bucle es
DO ndice = valor inicial, valor final, incremento
...
END DO
En cada iteracin la variable ndice va cambiando, desde valor inicial
hasta su valor final, aumentando cada vez su valor en incremento.
ste ltimo puede no aparecer, en cuyo caso se considera
implcitamente que su valor es la unidad. El siguiente ejemplo
resuelve la ecuacin implcita x=cos x mediante el mtodo de las
iteraciones:

PROGRAM TRASCEND
REAL X
INTEGER N
READ (*,*) X, N
DO I = 1, N
X = COS(X)
END DO
WRITE(*,*) X
END
La instruccin READ lee un valor inicial aproximado, X, para la
solucin de la ecuacin (que es 0,739085), y el nmero de
iteraciones que se desea, N. Una vez efectuadas las N iteraciones, el
bucle acaba y se escribe el resultado con WRITE. El modo en que la
estructura DO-END DO funciona es el siguiente. En la primera
iteracin la variable de control, en este caso I, asume el valor inicial,
1. Se ejecuta la instruccin del bucle, y cuando el control llega a la
instruccin END DO se vuelve a transferir el flujo al comienzo del
bucle. El ndice I toma ahora el valor 2, y as se repite el bucle hasta
que el valor de I es N, en cuyo caso se efecta la iteracin por ltima
vez y el flujo contina con las instrucciones que vienen despus del
END DO. En el ejemplo, el total de iteraciones realizadas es N. Como
prueba de este programa, se pueden ensayar valores iniciales para X
de 1, y un nmero de iteraciones N variable entre 10 y 40.
Una aplicacin interesante de la estructura DO-END DO es la suma
de series infinitas de nmeros. Consideremos la serie
1/1 + 1/2 + 1/3 + 1/4 + ...
cuya suma es pi/6. Un simple programa permite calcular las sumas
parciales de esta serie:
SUM = 0.0
READ (*,*) N
DO I = 1, N
SUM = SUM + 1.0/I**2
END DO
PRINT *, SUM
END
Este programa calcula la suma parcial con N trminos, SN.
Aumentando el valor N se puede valorar si la serie converge o no, y
en su caso la cantidad a la que converge. La siguiente tabla ha sido
producida con el programa anterior.

N
10
100
1000
1000

SN
1.5497677
3
1.6349839
0
1.6439345
7
1.6448340

0
7
2000 1.6448840
0
7
3000 1.6449007
0
3
4000 1.6449090
0
7
Cambiando la lnea interior del bucle, obviamente, se pueden sumar
otras series.

ESTRUCTURAS CONDICIONALES
Una condicin es una situacin en la que dos variables se comparan
y, dependiendo del resultado de esa comparacin, se ejecuta una
instruccin o conjunto de instrucciones. El tipo ms sencillo de
estructura que involucra una condicin es, por ejemplo,
AMIN = A
IF (A .GT. B) AMIN = B
...
Esta estructura determina el mnimo de los valores de dos variables,
A y B, y lo almacena en la variable AMIN. La instruccin IF efecta la
comparacin entre A y B, utilizando el operador .GT. (del ingls
Greater Than). Si A>B, se ejecuta la instruccin AMIN = B. Si no se
cumpliese esa condicin, el control pasara directamente a las lneas
que siguen a la lnea, representadas por ..., sin que la instruccin
AMIN = B se ejecutara.
Los operadores matemticos condicionales son:
.EQ. : igual a (EQual to)
.LT. : menor que (Less Than)
.GT. : mayor que (Greater Than)
.LE. : menor o igual que (Less to or Equal than)
.GE. : mayor o igual que (Greater to or Equal than)
Una estructura condicional ms sofisticada es la estructura IF-THENELSE-END IF. Esta estructura permite ejecutar un bloque de
instrucciones u otro dependiendo del resultado de la condicin. La
estructura se utiliza de la forma
IF (condicin) THEN
...
ELSE
...
END IF
Si el resultado de la condicin es verdadero, se ejecutara el primer
bloque de instrucciones (antes del ELSE), mientras que si es falso,
se ejecutara el segundo bloque de instrucciones (despus del
ELSE). La segunda parte se puede tambin eliminar, quedando la
estructura ms simple
IF (condicin) THEN
...

END IF
Slo en el caso en que la condicin sea verdadera se ejecutara el
bloque de instrucciones ... Si la condicin resultara falsa, se
continuara con las instrucciones situadas a continuacin del END IF
sin que se ejecuten las instrucciones situadas dentro de la
estructura IF-THEN-END IF.
La ltima estructura condicional interesante es el salto condicional.
Un salto condicional es un cambio del flujo de un programa a otra
lnea de ste, pero siempre que se cumpla una determinada
condicin. Al igual que en los saltos incondicionales, la lnea de
destino ha de estar identificada con un nmero de lnea, que debe
situarse en las columnas 1-5. El salto se puede producir cuando el
control del flujo encuentra una instruccin IF:
IF (condicin) GO TO nmero de lnea
Como ejemplo de las estructuras condicionales, vamos a efectuar la
suma de la serie
1/1+1/2+1/3+1/4+1/5+...
cuyo trmino general es 1/n. El programa, obviamente, no puede
calcular la suma infinita, pero s sumas parciales de la serie.
Supongamos que queremos sumar los M primeros trminos de la
serie, es decir, calcular la suma parcial SM). El siguiente programa
resuelve este problema con ayuda de un salto condicional:
PROGRAM SERIE
REAL SUM
INTEGER M, N
M = 10
SUM = 0.0
N=0
N=N+1
IF (N .LE. M) THEN
SUM = SUM + 1/N**2
GO TO 1
END IF
PRINT *, SUM
END

SUBRUTINAS Y FUNCIONES EXTRNSECAS


Muchas veces es necesario en un programa efectuar un conjunto de
instrucciones de una manera reiterativa. Las subrutinas y funciones
evitan tener que escribir el mismo trozo de cdigo varias veces.
Adems, ayudan a hacer el programa ms ordenado e inteligible. Las
subrutinas y funciones extrnsecas son trozos de programa que se
definen separadamente del programa principal, y sus variables
necesitan ser definidas en la subrutina ya que son variables locales,
no compartidas con el programa principal o con las de otras
subrutinas.
Subrutinas
Se definen mediante la instruccin SUBROUTINE. La subrutina ha de

acabar con un END. La sintxis completa es


SUBROUTINE nombre (lista de argumentos)
...
END
La subrutina se invoca con la instruccin CALL. Un ejemplo de
utilizacin de subrutinas es la transformacin entre coordenadas
polares y cartesianas:
PROGRAM POLAR_CARTES
REAL X, Y, RHO, THETA
READ (*,*) RHO, THETA
CALL POLARES (X, Y, RHO, THETA)
PRINT *, X, Y
END
SUBROUTINE POLARES (X, Y, RHO, THETA)
REAL X, Y, RHO, THETA
X = RHO * COS (THETA)
Y = RHO * SIN (THETA)
END
Funciones extrnsecas
La sintxis es muy parecida a la de las subrutinas pero, al contrario
que en stas, en las que puede haber cualquier nmero de
argumentos de entrada y salida, en las funciones slo hay una
variable de salida, que es el propio nombre de la funcin. Se definen
mediante la instruccin FUNCTION, y acaba tambin con END. La
estructura general es
FUNCTION nombre (lista de argumentos)
...
END
Un ejemplo es el clculo de la funcin factorial:
PROGRAM CALCULO_FACT
INTEGER N
REAL FACT, FACTORIAL
READ (*,*) N
FACT = FACTORIAL (N)
PRINT *, FACT
END
FUNCTION FACTORIAL (N)
INTEGER I, N
REAL FACTORIAL, PROD
PROD = 1.0
DO I = 2, N
PROD = PROD * I
END DO
END
Obsrvese que el nombre de la funcin ha de ser declarado como si
fuera una variable ms, tanto en el programa principal de llamada
como en la propia funcin.

Ejercicios y problemas

Rutina para sumar una serie

Multiplicacin de matrices

Interpolacin de Lagrange

Actualizado el 7 de febrero de 2001 por E. Velasco

You might also like