fortran

Lenguaje de programación FORTRAN

El lenguaje FORTRAN incluye números expresados como constantes o variables, ambos son catalogados como: enteros (de punto fijo), reales (punto flotante), complejos y lógicos.

Las constantes y variables enteras se escriben sin punto decimal y por lo tanto sólo pueden ser números enteros. Una constante entera puede ser positiva, negativa o cero.

Las constantes y variables reales son números escritos con punto decimal obligatoriamente, aún cuando sean números enteros o cero, (4.5, 0., -215. y 39.126 son ejemplos de ello). Los números reales se pueden expresar en una constante llamada radio de dos formas distintas, de manera decimal o en forma exponencial. Por ejemplo si el radio es de 125.124 se puede expresar como

radio = 125.124,

radio = 1.25124E+2, o

radio = 125124E-3

Todas estas formas son validas. También se puede expresar como un número de doble precisión, así.

radio = 1.25124D+2, o

radio = 125124D-3

En FORTRAN las variables enteras por convención deben tener siempre un nombre que empiece con I, J, K, L, M, o N. Las variables reales pueden tener un nombre que empiece con cualquier otra letra  del alfabeto. Esta convención se puede modificar al utilizar la proposición IMPLICIT y otras proposiciones que permiten designar el tipo de variable como (REAL, INTEGER, COMPLEX, LOGICAL, DOUBLE, etc.). Los ejemplos 1,2 y 4 muestran claramente éstas declaraciones.

El programa debe contener las órdenes del lenguaje FORTRAN, y debe cumplir con cierta estructura propia de FORTRAN, a la que llamamos sintaxis o lenguaje de programación.

  • El  programa  se  escribe  por  líneas. 
  • La  línea  tiene  una  anchura  de  80  columnas,  como  la  mayoría  de  las pantallas.
  • En la columna 1 se coloca la letra C para indicar que la línea es de comentario.
  • En  las  columnas  1  a  5  pueden  colocarse  un  número  que  identificará  a  esa  línea como una  etiqueta.
  • Si  una  sentencia  es  demasiado larga  para  una  sola  línea,  puede  continuarse  en  la  siguiente  colocando  cualquier   símbolo  distinto  de  un espacio  en  blanco  o  un  cero  en  la  columna  6.  Es  recomendable  emplear  siempre el  mismo  símbolo, yo recomiendo & o # como símbolos de continuidad.  La  longitud  máxima  de  una  sentencia  Fortran  puede especificarse hasta en 20  líneas.
  • Las  sentencias  deben  estar  situadas  entre  las  columnas  7  y  72
  • El  compilador  ignora  las  líneas  en  blanco
  • Las  columnas  73  a  80  reciben  el  nombre  de  campo  de  identificación. El  compilador  ignorará  cualquier  carácter  que  se  coloque  en  esas  columnas,  pero aparecerá  en  los  listados  del  programa  fuente.
  • En  la  columna  1  se  puede  colocar  una  C  o  un  asterisco (*)  para  que el  compilador  ignore  el  contenido  de  la  línea  y  lo  considere  como  un comentario. Para el FORTRAN 90 se debe utilizar en lugar de la C o el asterisco, el símbolo de exclamación ! antes de lo será un comentario.
  • Recuerda que la extensión del nombre del archivo para FORTRAN 77 debe ser la de FOR. Algunos nombres de programas fuente son: gas.for, prog1.for, reactor.for, etc. Para FORTRAN 90 se emplea la extensión F90.

Símbolos de operación en operaciones aritméticas

Los símbolos de operaciones aritméticas son muy similares a los ya conocidos, y estos dan los siguientes resultados.

SímboloOperación efectuadaEjemploREALES A = 3.0, B = 4.0ENTEROS A = 3, B = 4
+AdiciónC = A + BC = 7.0C = 7
SustracciónC = A – BC = -1.0C = -1
*MultiplicaciónC = A*BC = 12.0C = 12
/DivisiónC = A/BC = 0.75C = 0
**ExponenciaciónC = A**BC = 81.0C = 81

Los símbolos de operación no pueden aparecer juntos, es decir,  la expresión 

C = A*-B

es una expresión no válida. Se debe escribir 

C = A*(-B)

Los paréntesis se utilizan en una expresión FORTRAN  para agrupar en la misma forma que se utilizan en matemáticas. Cuando se requiere más de una par de paréntesis es una expresión FORTRAN, el orden de las operaciones indicadas es de los paréntesis interiores hacia afuera. Como ejemplo, revisemos la fórmula general para una ecuación de segundo grado.

al expresarla en lenguaje FORTRAN quedaría así

X1 = ( – B + (B**2 – 4*A*C)**0.5)/(2*A)

Si no se emplean los paréntesis el resultado no será el esperado. Por ejemplo, para resolver x^2 + x – 6 , las raíces son x1= 2 y x2 = -3.

Un error común que cometen los jóvenes que están aprendiendo a programar es el siguiente, evalúan la formula general así:

X1 = -B + (B**2 – 4*A*C)**0.5/2*A

Sin embargo el resultado que se obtendrá será de X1 = 1.5

Funciones matemáticas

Las funciones matemáticas como la raíz cuadrada, seno, coseno, etc., no se deben programar cada vez que se requieran. Esas funciones están preprogramadas y tiene un nombre específico en FORTRAN. La siguiente tabla muestra el empleo de las funciones matemáticas más comúnmente empleadas.

FunciónNombre en FORTRANEjemplo
Raíz cuadradaSQRTSQRT(B*B-4.*A*C)
ExponencialEXPEXP(X)
Logaritmo naturalLOG  o  ALOGLOG(C*D)
Logaritmo decimalLOG10LOG10(X)
Seno, en radianesSINSIN(TETA)
Coseno, en radianesCOSCOS(TETA)
Tangente, en radianesATANATAN(B/A)
Valor absolutoABSABS(Y-X)

Las funciones que no aparecen se pueden obtener a partir de identidades u otras fórmulas basadas en las funciones mencionadas. Por ejemplo, para obtener el logaritmo base diez, se emplea la identidad

D = LOG(X)/LOG(10.)

donde X es el dato a evaluar y  D es el logaritmo decimal de X.

Proposición de Asignación Aritmética

Tienen la apariencia general de las fórmulas algebraicas ordinarias. Por ejemplo la fórmula

escrita como proposición FORTRAN  queda

D = (B*B – 4.*A*C)**.5

Existe otra variante para esta misma fórmula. Sí

en FORTRAN quedaría

D = SQRT(B*B – 4.*A*C)

Note que el número 4 lleva punto decimal, esto garantiza que el producto de 4*a*c dé como resultado un número real.

Proposición de Control

Controlan el orden en que deben ejecutarse las proposiciones dentro del programa.  Existen proposiciones de transferencia incondicional y condicional.

La proposición de transferencia incondicional, como

GO TO 25

Se utiliza para interrumpir la secuencia de ejecución y transferir la dirección a una etiqueta específica. En el ejemplo anterior, cambia a la etiqueta 25.

La proposición de transferencia calculada, como

GO TO (10,20,30,40,50) J

Es una proposición condicional y transfiere el control a otras etiquetas dependiendo del valor que asuma la variable J. Es decir, transferirá el control a la etiqueta 10 si J es 1, a la etiqueta 20 si J es 2, a la etiqueta 30 si J es 3, y así sucesivamente.

A la variable J no se le puede asignar un valor mayor que el número de opciones que aparecen entre el paréntesis de la proposición GO TO.

La proposición de transferencia aritmética, como

IF (X – X1) 15,20,5

También es una preposición de control condicional pero es aritmética. Es decir, permite la transferencia a tres etiquetas dependiendo del valor de la expresión encerrada entre paréntesis. En el ejemplo,  transfiere el control a la etiqueta 15 si la cantidad (X-X1) es negativa, a la etiqueta 20 si vale cero, y a la etiqueta 5 si es positiva.

Proposición de entrada / salida

Estas proposiciones controlan la transmisión de información entre la computadora y sus dispositivos periféricos (lectoras, impresoras, archivos). Le indican que trasmita de la memoria a un dispositivo de salida, o de un dispositivo de entrada a la memoria. Estas proposiciones incluyen a: READ, WRITE, ACCEPT, ACCEPT TAPE, PRINT, y PUNCH.  En la mayoría de los casos, estas proposiciones están muy ligadas con la proposición FORMAT.

La proposición FORMAT asociada con una instrucción de entrada de datos le informa al compilador acerca del número de espacios o columnas utilizadas para cada valor, la forma de cada número real, el modo de cada valor, y la colocación del punto decimal.

Una proposición FORMAT asociada con una proposición de salida informa al compilador del número de espacios o columnas que se deben asignar a cada unidad de salida, el modo de la cantidad, la forma de salida de cada valor real, y el número de dígitos que deben aparecer después del punto decimal. Por la importancia de esta instrucción, la explicaremos abundantemente.

Proposición de entrada

Se emplea para aceptar valores del usuario a través del teclado. Ilustremos a través de ejemplos cada una de las proposiciones de entrada típicas. Primero veamos la instrucción READ sin formato explícito.

READ 5,X,Y,Z

Aquí, el número 5 indica el dispositivo de entrada, como una lectora de tarjetas o desde el teclado, las variables X, Y y Z definen por su código del alfabeto el formato de entrada, es decir, los considera como datos  reales.

La ejecución de la instrucción

READ (5,8) A,B,I

Hace que se lean tres valores de datos de la unidad de entrada o dispositivo asociado con el número 5. El número 8 está asociado con la instrucción FORMAT y con  la respectiva proposición READ. Es decir, se requieren de dos líneas de programa, una para la instrucción READ y otra para el FORMAT. Así,

READ (5,8) A,B,I

    8   FORMAT F6.3,F6.2,I3

Los formatos F6.3, F6.2 e I3  se explican más adelante en proposiciones de formato.

Proposición de salida

Las proposiciones de salida suministran un medio para transmitir los resultados del programa a una forma de salida impresa, perforada, o de otro tipo. Generalmente, se utiliza para enviar a la pantalla de la computadora los valores almacenados en las variables. Las proposiciones de salida tienen las siguientes formas generales.

PUNCH n, lista
PRINT  n, A,B,C,D
WRITE (i, n) lista

En estas preposiciones la i especifica el dispositivo de salida, y la n indica el formato de salida. La lista  denota los nombres de las variables, separadas por comas, cuyos valores deben aparecer como salida. La orden PRINT muestra como se expresa la lista de variables.

La proposición PUNCH se emplea para obtener datos de salida perforados en tarjetas, ya no se utiliza debido a que ahora la información se almacena digitalmente. La proposición PRINT es mas utilizada en los inicios de la elaboración del programa, es informal y puede dar una aproximación a los resultados esperados. Finalmente, la proposición WRITE permite especificar todos los dispositivos de salida y todos los formatos. En pruebas de programas o en los inicios de la elaboración del programa se emplea como WRITE (*,*) que indica la salida se envía a cualquier dispositivo de salida y en cualquier formato.

Proposiciones de formato

Como se menciono previamente la instrucción FORMAT está asociada con proposiciones de entrada y salida. Con esta instrucción el compilador sabe como se van ha alimentar los datos de entrada y la forma como deben suministrarse a la salida. En las siguientes dos líneas

Print 6, A,B,C,D
6        FORMAT (4F8.2)

El formato de salida es el especificado en la etiqueta número 6, y enseguida se imprimen los valores de A, B, C y D respectivamente, utilizando máximo 8 espacios. De estos 8 espacios, 2 lo ocupan los decimales, 1 espacio el punto decimal y  los restantes 5 para la parte entera. El número 4 antes de la F indica que el formato se repite cuatro veces, una por cada variable. El siguiente programa en FORTRAN 90 muestra claramente el uso de la instrucción FORMAT

a = 1125.256
b = 12345.6789
c = 1.2564
d = 0.253644
print 10, a, b, c, d
10      format (4f8.2)
end

El resultado del programa es

 1125.2612345.68    1.26    0.25

Para mejorar la presentación de la salida hay que cambiar el formato a f10.2, y así el resultado ahora será.

   1125.26  12345.68      1.26      0.25

Si se desea mostrar más decimales y más enteros, se puede emplear f12.4, y la impresión ahora será

   1125.2560  12345.6787      1.2564      0.2536

El programador debe recordar que FORTRAN siempre consume una columna al imprimir, esto se debe a que es utilizado para ajustar el retorno de carro de la impresora.

Proposición de especificación

Son necesarias para que el compilador de FORTRAN administre la memoria necesaria para ejecutar el programa. La proposición DIMENSION es una de las especificaciones típicas para definir arreglos dimensionales.

DIMENSION A(5), B(10,10)

Con esta instrucción, FORTRAN reserva 6 celdas para la variable A y 121 celdas para la variable B.

A(5)  = 

B(10,10) =

Proposiciones de repetición

         DO n  I = n1, n2, n3

Líneas que se repetirán

n       CONTINUE

La proposición DO hace que el programa repita una secuencia específica de instrucciones contenida entre el DO y CONTINUE.  Esta proposición se conoce como ciclo o Loop, y se emplea generalmente cuando se especifica un número máximo de repeticiones. La etiqueta n especifica el límite hasta donde se repetirán las líneas. La variable I , representa una variable entera que opera como contador o índice del ciclo. Los números n1,n2 y n3 representan constantes enteras que operan como valor inicial, valor final e incremento, respectivamente.

El siguiente programa en FORTRAN 90 ejemplifica y aclara lo mencionado.

! suma de los primeros 10 números

suma = 0.

A =1

B =10

C =1

do 5 I = A, B, C

         suma = suma +I

5 continue

print *, suma

end

Si se omite el incremento n3, (junto con la coma que le precede) en la proposición DO, el índice se incrementará por defecto de uno en uno. También puede asumir valor negativo como –1 u otro múltiplo, pero no puede asignársele valor decimal.

En algunas versiones recientes de FORTRAN, como en FORTRAN 90, ya no es necesario usar la instrucción CONTINUE.  En algunas ocasiones también se emplea la instrucción END DO.

Ciclos DO anidados

DO 9 I=2,M

DO 9 J=2,N

L = J – 1

SUM = 0.

DO 8K = 1,L

  • SUM = SUM + B(I,K)*T(K,J)
  • B(I,J) = A(I,J) – SUM

·

Cuando se colocan una o más proposiciones DO dentro de otra proposición DO, el conjunto de ciclos DO se denomina ciclos DO anidados. El primer ciclo se considera exterior y el segundo ciclo interior. En la mayoría de los casos se puede transferir el control de un ciclo interior al exterior, pero nunca del exterior al interior.

El uso de los ciclos DO anidados es una herramienta muy poderosa. Son especialmente convenientes para la programación que encierra arreglos bi-o-tridimensionales, ya que los índices de los ciclos DO corresponden directamente a los subíndices de los elementos del arreglo dimensional.

Proposiciones de interrupción

PAUSE

STOP

END

Estas instrucciones ejecutan las funciones que indican sus nombres. La proposición PAUSE hace que el programa  detenga temporalmente la secuencia de ejecución y solicitará para continuar que se presione la tecla Intro (o Enter).

La proposición STOP hace que la computadora detenga totalmente la ejecución del programa.

La proposición END es la última proposición de todos los programas y subprogramas FORTRAN, su propósito es notificar al compilador que ha llegado al final del programa fuente.

Operadores relacionales

En FORTRAN se emplean en lugar de los símbolos matemáticos de relación (>, <, =, etc.), una combinación de dos letras  entre dos puntos que indican la relación matemática que existe entre ellos.  Los operadores relacionales aritméticos son:

OperadorDescripciónSignificado en inglés
.LT.Menor queLower That
.LE.Menor o igual aLower or Equal
.EQ.Igual aEqual
.GE.Mayor o igual aGrater or Equal
.GT.Mayor queGrater That
.NE.No igual aNot Equal

Los operadores lógicos son:

OperadorDescripción
.OR.Disyunción  (ó)
.AND.Conjunción (y)
.NOT.Negación (no)

Ambos operadores están muy relacionados con la proposición  IF.

Ejemplos

IF (I.EQ.J) GO TO 5
IF (ABS(XSTAR – XI)) .LE. EPS) GO TO 7
IF (EOS.EQ.1) THEN
U = 1
V = 0
C = 12.25
ELSE
U = 2
V = 1
C = 10.50
END IF

En la versión de FORTRAN 90 ya se pueden utilizar los símbolos matemáticos directamente del teclado, en las versiones anteriores hay que seguir utilizando las literales.

Bibliografía

  1. James, M. L., Smith, G.M., Wolford, J.C. Métodos numéricos aplicados a la computación digital con FORTRAN. Representaciones y servicios de ingeniería, S.A. México, 1973.
  2. Nyhoff, L. R. and Leestma, S. C.. Introduction to Fortran 90 for Engineers and Scientists. Prentice Hall.
  3. Leestma, S. y Nyhoff, L. “FORTRAN  77 and Numerical Methods for Engineers and Scientists”. Prentice Hall.
  4. Hammontd,  R. H. / Rogers, W. B. / Crittenden, J. B. Introducción al FORTRAN 77 y la PC Mc Graw Hill. México, 1988.
  5. Ellis , T.M.R. FORTRAN 77 Programming. Addison Wesleey, 1990.
  6. McCracken, D. D. and Salmon, W. I. Computing for Engineers and Scientists with FORTRAN 77. Second Edition John Wiley and Sons
  7. Zirkel, G. and E. Berlinger. Understanding FORTRAN 77 & 90. International Thompson Publishing Company

Técnica para elaborar un programa en FORTRAN

Para la elaboración de un programa en Fortran se deben seguir las siguientes etapas:

  1. Iniciar el programa  o compilador Fortran
  2. Al iniciar el programa muestra el editor
  • Aquí el editor espera que le demos el nombre del archivo fuente que se va a iniciar.

Una vez dado el nombre se inicia una pantalla en la cual podemos escribir el programa fuente, respetando los espacios y símbolos dados en el ejemplo. Por regla de FORTRAN el texto o instrucciones se deben inscribir desde la columna 7. En la parte inferior del editor se muestra la línea y la columna en que se sitúa el cursor.

  • Para guardar la información del archivo en el editor, se elige RUN.
  • En el proceso de compilación, en  el  caso  de  compilar  con  Fortran  77 Lahey, presiona las teclas Alt y F3. En el editor de Lahey, aparecerá la petición Dos Command:

Es recomendable que practiques para que adquieras la habilidad del programador en el proceso de compilación.

Ejemplos de programas en FORTRAN para ejercitar

Los siguientes programas te permitirán ir adquiriendo práctica en el proceso de compilación y en la mecanización para generar cualquier programa. Escríbelos tal cual están escritos, sólo omite la línea que indica el  EJEMPLO, ya que de no hacerlo provocaras un error al intentar compilarlo.  Por el momento no te preocupes si no entiendes algunas instrucciones, después al revisar el tema lenguaje de programación FORTRAN, tú mismo te contestaras tus dudas. En dado caso de que presentaras alguna duda con el manejo de los programas, acude con el profesor, él te ayudará.

EJEMPLO1.FOR 
   IMPLICIT REAL (A – Z)
   PI = 3.1416
  READ *, RADIO
C   CALCULA CIRCUNFERENCIA Y AREA
    PRINT , RADIO, 2*PI*RADIO, PI*RADIO**2
   END

      

EJEMPLO2.FOR


C       OTRA MANERA DE PROGRAMAR
            IMPLICIT REAL (A – Z) 
            PI = 3.1416
            READ (5, 501)  RADIO
FORMAT (F10.0)
CIRCUM =2*PI*RADIO
AREA = PI*RADIO**2
WRITE (6, 502) RADIO, CIRCUM, AREA
            502       FORMAT (3F5.4)
            STOP
            END

EJEMPLO3. FOR


*           *************************************************************
*           *  PROGRAMA EJEMPLO DE COMENTARIOS         *
*           *                                                                      *
*           *************************************************************
C          ASIGNACION DE VALORES A VARIABLES
            A = 20.
            B = 110
C          EJECUTA LOS CALCULOS E IMPRIME
C            C = A + B
WRITE (6, *)  C        ! IMPRIME Y SIN FORMATO
            END

EJEMPLO4. FOR

            REAL TABLE (100) 
           INTEGER DIMENS /5/
            CALL SBRT(TABLE,DIMENS)    
END

SUBROUTINE SBRT(TABLE,DIMENS)
INTEGER DIMENS
DO 250 K=1, DIMENS
TABLE (K) = K
            250       CONTINUE
PRINT *, TABLE
            END