You are on page 1of 10

Un breve curso de FORTRAN

Introducción
Escritura del programa
Conceptos básicos del lenguaje

Variables
Entradas y salidas
Operadores matemáticos y funciones intrínsecas
Salto incondicional
Bucles
Estructuras condicionales
Subrutinas y funciones extrínsecas

Introducción
El FORTRAN (FORmula TRANslator) es un lenguaje de programación muy potente. Es el primer lenguaje científico, siendo desarrollado a
últimos de la década de los 50, pero es aún ampliamente utilizado en aplicaciones científicas y de ingeniería. La última versión de
FORTRAN actualmente es la version FORTRAN 95, que reemplazó a la versión FORTRAN 90, que a su vez reemplazó al FORTRAN 77 a
comienzos de la década de los 90. El FORTRAN 90 incorporá nuevas estructuras y características en su sintáxis, si bien aún es
compatible con la anterior versión. Este curso es muy introductorio; para una exposición más detallada habrá que consultar algún
manual de FORTRAN.

En los primeros tiempos de la informática cualquier cálculo que implicara la evaluación de fórmulas matemáticas había de hacerse
mediante complicados programas, que traducían esas fórmulas 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 idéntica a como se escriben las
fórmulas en un papel.

En FORTRAN las instrucciones que el usuario transmite al ordenador se encuentran en un fichero de texto (en código 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 extensión '.FOR', por ejemplo, 'CALCULO.FOR'; en Unix es tradicional que la
extensión sea '.f', por ejemplo, 'calculo.f'. Si la versión de FORTRAN es la 90, es conveniente utilizar la extension '.f90'. 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).

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
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 máquina, o sea, el lenguaje que entiende el procesador del ordenador,
mediante un proceso llamado compilación; por contra, en un lenguaje interpretado las líneas de programa se van traduciendo según el
flujo va pasando por ellas, con lo que el proceso de ejecución se enlentece.

Escritura del programa


Las instrucciones del programa se escriben en el fichero dispuestas en líneas. En FORTRAN 90 el texto ha de tener como
mucho 132 caractéres en cada línea y, al contrario que en FORTRAN 77, donde las columnas de la 1 a la 5 se reservan para que se
puedan incluir etiquetas de señalización (con vistas a la posibilidad de que el flujo del programa vuelva a esa línea desde otra parte del
programa) y la columna 6 se reserva para incluir un símbolo que le indique al compilador que esa línea es la continuación de la línea
anterior, en FORTRAN 90 se pueden utilizar las columnas libremente. Una línea que continúa en la siguiente se indica mediante el
símbolo &. 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 continuación se define la variable B como
A más 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 instrucción END. Por contra, la instrucción que
indica el comienzo del programa, PROGRAM, no es imprescindible, aunque su presencia es recomendable para hacer más clara la
estructura en caso de que existan subrutinas y funciones definidas en el programa (ver más abajo).

Conceptos básicos 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 número, o bien una secuencia o cadena de caracteres. Las variables en las
que se pueden almacenar números se llaman numéricas, y pueden tener como nombres una combinación de caracteres, si bien el
primero no puede ser un número; el número de caracteres varía según 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.

Las variables numéricas pueden ser enteras, reales o complejas. Nos referiremos aquí a las enteras y a las reales. Las variables
enteras contienen números enteros (es decir, sin parte fraccionaria), p. ej., -5, y se definen al comienzo del programa mediante la
instrucción INTEGER. Las variables reales contienen números reales, ya sea con notación decimal (p.ej. 3.14159) o exponencial

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
(p.ej.1.457E5, que quiere decir 1,457.10^5), y se definen al comienzo del programa mediante la instrucción REAL. Dependiendo de
la precisión con la que queramos representar los números que va a contener la variable, las variables enteras y reales pueden ser
de simple precisión (cuatro bytes) o de doble precisión (ocho bytes), aunque la precisión depende del compilador. Este hecho se
indica en la definición de la variable; p. ej.,

REAL :: SUMA
DOUBLE PRECISION :: RESTO

define SUMA como una variable real de simple precisión, y RESTO como una variable real de doble precisión.

Las variables en las que se pueden almacenar caracteres se llaman alfanuméricas; su nombre sigue las mismas convenciones que
el de las variables numéricas, pero se definen mediante la instrucción CHARACTER, especificandose la longitud de la variable
mediante el descriptor (LEN=n), siendo n el número de caracteres que puede almacenar la variable. Así, p. ej.,

CHARACTER (LEN=10) :: NOMBRE

define una variable llamada NOMBRE que puede contener hasta diez caracteres. Los caracteres almacenados en las variables
alfanuméricas 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 número entero y es un índice. También
podemos tener matrices, p. ej., B(I,J), con dos índices, I y J. Las variables vectores y matrices también han de declararse al
principio del programa, con la instrucción DIMENSION; Así, podemos escribir

REAL, DIMENSION (10) :: A

lo que indica que el vector A tiene diez componentes, A(1), A(2), ..., A(10).

Para una más extensa exposición del tema de variables en FORTRAN, consúltese 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 también se utiliza la instrucción PRINT. La sintáxis de las instrucciones READ y WRITE
es:

READ (unidad, formato) lista de variables


WRITE (unidad, formato) lista de variables

Para una explicación de las unidades de lectura y escritura y los formatos es FORTRAN se recomienda acudir a un manual de
FORTRAN. La situación más sencilla es aquélla en la que los datos se introducen mediante el teclado, y los datos salen en la

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
pantalla, con formato libre. En estos casos se utiliza la sintáxis

READ (*,*) lista de variables


WRITE (*,*) lista de variables

Para la escritura en la pantalla con formato libre existe también la instrucción PRINT *,(la coma es parte de la instrucción).

Por ejemplo, el siguiente programa lee desde el teclado dos variables, A y B, las suma y envía el resultado a la pantalla:

PROGRAM SUMA
REAL :: A, B, C
READ (*,*) A, B
C=A+B
WRITE (*,*) 'La suma es: ', C
END

OPERADORES MATEMÁTICOS Y FUNCIONES INTRÍNSECAS

Los números y variables numéricas se pueden combinar utilizando operadores matemáticos, como + (suma), - (resta), *
(multiplicación) y / (división; en el caso de división entre enteros la división es la división entera, p. ej., 3/2 = 1). Otra operación
matemática de interés es la exponenciación, que se representa mediante ** ; p. ej., 2**3 es dos elevado al cubo.

Algunas funciones están incluidas en el FORTRAN. Son las funciones intrínsecas, cuyo argumentos (o argumentos) se incluyen
entre paréntesis. Funciones intrínsecas son la raiz cuadrada, SQRT, la funciones trigonométricas seno, SIN, coseno, COS, tangente,
TAN, arcoseno, ASIN, arcocoseno ACOS, arcotangente, ATAN, la función exponencial, EXP y algunas otras. La sintáxis de estas
funciones es, p. ej.,

SQRT(3.0), SIN(2.3), EXP(-1.0).

Obsérvese que los argumentos de estas funciones son números reales en simple precisión. Si los argumentos son en doble
precisión hay que colocar la letra D delante del nombre de la función. Así, p. ej., tendríamos

DSQRT(3.0D0), DSIN(2.3D0), DEXP(-1D0).

SALTO INCONDICIONAL

Un salto incondicional es un cambio del flujo de un programa a otra línea de éste. Esta línea de destino ha de estar identificada con
un número de línea, que debe situarseal principio de la línea, en cualquier posición. El salto se produce cuando el control del flujo
encuentra la instrucción GO TO, seguida del número de la línea de destino. Un ejemplo de programa con salto incondicional sería

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
A = 2.0
B = SQRT(A)
...
GO TO 1
...
1 C = B**2
...

donde ... indica un número indeterminado de líneas de programa. Obsérvese cómo el flujo del programa cambiaría a la línea
identificada con el número 1 cuando el flujo pase por la instrucción GO TO 1 y que, por tanto, las líneas de programa desde esa
instrucción hasta la línea 1 no se ejecutarían. Al identificar las líneas de programa mediante números, téngase en cuenta que los
números son simples etiquetas, y que no tiene por qué mantenerse una numeración creciente. La instrucción GOTO está declarada
como obsoleta en FORTRAN 90, siendo sustituida por otro tipo de estructuras condicionales.

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 entera, que hace de índice. La sintáxis general de la
estructura en bucle es

DO índice = valor inicial, valor final, incremento


...
END DO

En cada iteración 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 implícitamente que su valor es la unidad. El siguiente
ejemplo resuelve la ecuación implícita x=cos x mediante el método 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 instrucción READ lee un valor inicial aproximado, X, para la solución de la ecuación (que es 0.739085), y el número 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 iteración la variable de control, en este caso I, asume el valor

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
inicial, 1. Se ejecuta la instrucción del bucle, y cuando el control llega a la instrucción 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 efectúa la
iteración por última vez y el flujo continúa con las instrucciones que vienen después 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 número de
iteraciones N variable entre 10 y 40.

Una aplicación interesante de la estructura DO-END DO es la suma de series infinitas de números. 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:

REAL :: SUM
INTEGER :: I, N
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 términos, 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 SN
10 1.54976773
100 1.63498390
1000 1.64393457
10000 1.64483407
20000 1.64488407
30000 1.64490073
40000 1.64490907

Cambiando la línea interior del bucle, obviamente, se pueden sumar otras series.

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
ESTRUCTURAS CONDICIONALES

Una condición es una situación en la que dos variables se comparan y, dependiendo del resultado de esa comparación, se ejecuta
una instrucción o conjunto de instrucciones. El tipo más sencillo de estructura que involucra una condición es, por ejemplo,

AMIN = A
IF (A > B) AMIN = B
...

Esta estructura determina el mínimo de los valores de dos variables, A y B, y lo almacena en la variable AMIN. La instrucción IF
efectúa la comparación entre A y B, utilizando el operador > . Si A>B, se ejecuta la instrucción AMIN = B. Si no se cumpliese esa
condición, el control pasaría directamente a las líneas que siguen a la línea, representadas por ..., sin que la instrucción AMIN = B
se ejecutara.

Los operadores matemáticos condicionales son:

== : igual a
/= : no igual a
< : menor que
> : mayor que
<= : menor o igual que
>= : mayor o igual que )

Una estructura condicional más sofisticada es la estructura IF-THEN-ELSE-END IF. Esta estructura permite ejecutar un bloque de
instrucciones u otro dependiendo del resultado de la condición. La estructura se utiliza de la forma

IF (condición) THEN
...
ELSE
...
END IF

Si el resultado de la condición es verdadero, se ejecutaría el primer bloque de instrucciones (antes del ELSE), mientras que si es
falso, se ejecutaría el segundo bloque de instrucciones (después del ELSE). La segunda parte se puede también eliminar, quedando
la estructura más simple

IF (condición) THEN
...
END IF

Sólo en el caso en que la condición sea verdadera se ejecutaría el bloque de instrucciones ... Si la condición resultara falsa, se
continuaría con las instrucciones situadas a continuación del END IF sin que se ejecuten las instrucciones situadas dentro de la

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
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 línea de éste, pero siempre que se cumpla una determinada condición. Al igual que en los saltos incondicionales, la línea de
destino ha de estar identificada con un número de línea, que debe situarse en las columnas 1-5. El salto se puede producir cuando
el control del flujo encuentra una instrucción IF:

IF (condición) GO TO número de línea

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 término 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 términos 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 <= M) THEN
SUM = SUM + 1/N**2
GO TO 1
END IF
PRINT *, SUM
END

SUBRUTINAS Y FUNCIONES EXTRÍNSECAS

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 código varias veces. Además, ayudan a hacer el programa más ordenado e
inteligible. Las subrutinas y funciones extrínsecas 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

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Se definen mediante la instrucción SUBROUTINE. La subrutina ha de acabar con un END. La sintáxis completa es

SUBROUTINE nombre (lista de argumentos)


...
END

La subrutina se invoca con la instrucción CALL. Un ejemplo de utilización de subrutinas es la transformación entre coordenadas
polares y cartesianas:

PROGRAM POLAR_CARTES
REAL :: X, Y, RHO, THETA
READ (*,*) RHO, THETA
CALL POLARES (X, Y, RHO, THETA)
END

SUBROUTINE POLARES (X, Y, RHO, THETA)


REAL :: X, Y, RHO, THETA
X = RHO * COS (THETA)
Y = RHO * SIN (THETA)
END

Funciones extrínsecas

La sintáxis es muy parecida a la de las subrutinas pero, al contrario que en éstas, en las que puede haber cualquier número de
argumentos de entrada y salida, en las funciones sólo hay una variable de salida, que es el propio nombre de la función. Se definen
mediante la instrucción FUNCTION, y acaba también con END. La estructura general es

FUNCTION nombre (lista de argumentos)


...
END

Un ejemplo es el cálculo de la función factorial:

PROGRAM CALCULO_FACT
INTEGER :: N
REAL :: FACT, FACTORIAL
READ (*,*) N
FACT = FACTORIAL (N)
PRINT *, FACT
END

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
REAL FUNCTION FACTORIAL (N)
INTEGER :: I, N
REAL :: PROD
PROD = 1.0
DO I = 2, N
PROD = PROD * I
END DO
FACTORIAL=PROD
END

Obsérvese que el nombre de la función ha de ser declarado como si fuera una variable más, tanto en el programa principal de
llamada como en la propia función (en este caso en la línea de definición de la función).

Actualizado el 7 de noviembre de 2005 por E. Velasco

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD

You might also like