Fortran es el primer lenguaje de alto nivel que salió al mercado. Ya que sigue siendo útil en Física, vamos a estudiarlo. Un poco de historia
Este lenguaje procedural fue el primero de alto nivel (1957)
Desarrollado por IBM para el IBM 704.
Orientado a la eficiencia en la ejecución.
Se creó la definición estándar del lenguaje en el 66.
Otras versiones:
FORTRAN 77
FORTRAN 90
Un sencillo ejemplo Características
Tipos de datos soportados:
Numéricos (enteros, reales, complejos y doble precisión).
Booleanos (logical)
Arreglos
Cadenas de caracteres
Archivos
FORTRAN 90 ya es estructurado, y no requiere sentencias GOTO. Sólo admite dos ámbitos para las variables: local y global. Variables y constantes
FORTRAN no es sensible a mayúsculas y minúsculas. Los nombre de variables tienen de 6 a 31 caracteres máximo y deben comenzar por una letra. Los blancos son significativos.
Declaración explicita de variables.
Enteras (I-N), el resto reales. (se modifica con IMPLICIT).
Punteros: en los primeros FORTRAN no hay punteros y todas las variables se almacenan en memoria estática. En FORTRAN 90 se declaran INTEGER, POINTER::P.
Para memoria dinámica ALLOCATE y DEALLOCATE
Tipos de datos
Arrays, pueden tener hasta 7 dimensiones y se guardan por colummnas.
REAL M(20),N(-5:5)
DIMENSION I(20,20) (tipo por nomenclatura implícita)
Cadenas de caracteres, el primer carácter es el 1, el operador //permite concatenar cadenas.
CHARACTER S*10, T*25
//
Almacenamiento de datos. Se usa COMMON para datos compartidos y EQUIVALENCE cuando almacenamos una variable con dos posibles tipos en la misma posición de memoria (como union en C). Se usa DATA para inicializar datos estáticos.
DATA X/1.0/,Y/3.1416/,K/20/
Tipos definidos por el usuario, con TYPE <nombre>... END TYPE <nombre>
Control de secuencia
EL conjunto de estructuras de control es limitado:
Expresiones, prioridad de operadores
Enunciados
Asignación, cuando se hace entre cadenas hay ajuste de tamaño con blancos o truncamiento.
Condicional. Permite IF ELSE IF... Para selección múltiple SELECT CASE CASE.....CASE DEFAULT.... END SELECT
Iteración. DO....END DO
Nulo, se usa solo para la etiqueta. CONTINUE.
Control de subprogramas. CALL invoca al subprograma y RETURN devuelve un valor al programa llamante.
Construcciones propensas a error: GOTO.
Entrada y salida
Tipos de archivos:
Secuenciales
De acceso directo
Comandos: READ, WRITE, PRINT, OPEN , CLASE, INQUIRE (propiedades o estado del archivo) REWIND y ENDFILE (para ubicar el puntero del fichero).
Para el tratamiento de excepciones en las sentencias READ/WRITE se puede introducir la posición de la rutina de dicho tratamiento (ERR=90).
Subprogramas
Hay tres tipos de subprogramas:
Function, devuelven un solo valor de tipo numérico, lógico o cadena de caracteres.
Subroutine, devuelve valores a través de variables no locales COMMON.
Función de enunciado, permite calcular una sola expresión aritmética o lógica.
FN(X,Y)=SIN(X)2-COS(Y)2
Gestión de almacenamiento.
Las variables son locales o globales (COMMON)
Recursividad: RECURSIVE FUNCTION FACTORIAL(X)
Parámetros de subprograma. Paso por referencia.
Abstracción y encapsulación. Evaluación del lenguaje
La abstracción es posible mediante los subprogramas y el uso de variables COMMON, aunque su uso es propenso a errores.
FORTRAN sigue siendo utilizado en el ámbito científico y es muy eficiente realizando cálculos.
La estructura del programa suele ser dificil de entender.
En FORTRAN 90 se incluye la recursividad y la memoria dinámica.
Las etiquetas de las sentencias ya no son necesarias, ni el GOTO, pues se ha transformado en un lenguaje estructurado.
El aspecto de los programas sigue siendo de procesamiento por lotes
El lenguaje fortran es uno de los lenguajes que forman el grupo de lenguajes de computador orientados a procedimientos, los cuales están fundamentados en la estructura del lenguaje usado originalmente para describir el problema, como también en el procedimiento empleado para resolverlo. Tiene por objeto descargar al programador de la tarea de reducir todos los cálculos y toma de decisiones a las pasos elementales requeridos por el repertorio limitado de operaciones ofrecido a nivel de lenguaje de maquina.
FORTRAN es un acrónimo de FORmula TRANslation (traducción de formulas), diseñado especialmente para la manipulación de formulas científicas y la aplicación de métodos numéricos a la solución de problemas.
JOSE ISACC SIERRA JUAREZ
REFERENCIAS
www.mitecnologico.com.mx FORTRAN El Fortran (previamente FORTRAN)[] (del inglésFormula Translating System) es unlenguaje de programaciónalto nivel de propósito general,[ ]procedurimental[ ]e imperativo, que está especialmente adaptado al cálculo numérico y a la computación científica. Desarrollado originalmente por IBM en 1957 para el equipo IBM 704, y usado para aplicaciones científicas y de ingeniería, el FORTRAN vino a dominar esta área de la programación desde el principio y ha estado en uso continuo por más de medio siglo en áreas de cómputo intensivo tales como la predicción numérica del tiempo, análisis de elementos finitos, dinámica de fluidos computacional (CFD), física computacional, y química computacional. Es una de los lenguajes más populares en el área de la computación de alto rendimiento y es el lenguaje usado para programas que evalúan el desempeño (benchmark) y el ranking de los supercomputadoresmás rápidos del mundo.[]
El FORTRAN (una palabra compuesta, derivada de The IBM Mathematical Formula Translating System) abarca un linaje de versiones, cada una de las cuales evolucionó para añadir extensiones al lenguaje mientras que usualmente retenía compatibilidad con las versiones previas. Versiones sucesivas han añadido soporte para procesamiento de datos basados en caracteres (FORTRAN 77), programación de arreglos, programación modular y programación orientada a objetos (Fortran 90/95), y programación genérica (Fortran 2003). A finales de 1956, John W. Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar el computador centralIBM 704. El histórico equipo FORTRAN de Backus consistió en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.[]
A mediados de 1954 fue terminada una especificación del borrador para The IBM Mathematical Formula Translating System. El primer manual para el FORTRAN apareció en octubre de 1956, porque los clientes eran reacios a usar un lenguaje de programación de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador.
Mientras que la comunidad era escéptica en que este nuevo método pudiera posiblemente superar la codificación a mano, éste redujo por un factor de 20 al número de sentencias de programación necesarias para operar una máquina, y rápidamente ganó aceptación. Durante una entrevista en 1979 con Think, la revista de los empleados de IBM, el creador, John Backus, dijo, "Mucho de mi trabajo ha venido de ser perezoso. No me gustaba escribir programas, y por eso, cuando estaba trabajando en el IBM 701 escribiendo programas para computar trayectorias de misiles, comencé el trabajo sobre un sistema de programación para hacer más fácil escribir programas"[.]
El lenguaje fue ampliamente adoptado por los científicos para escribir programas numéricamente intensivos, que incentivó a los escritores de compiladores a producir compiladores que pudieran generar un código más rápido y más eficiente. La inclusión en el lenguaje de un tipo de datos y de la aritmética de números complejos amplió la gama de aplicaciones para las cuales el lenguaje se adaptaba especialmente e hizo al FORTRAN especialmente adecuado para aplicaciones técnicas tales como la ingeniería eléctrica.
Por 1960, las versiones de FORTRAN estaban disponibles para los computadors IBM 709, 650, 1620, y 7090. Significativamente, la cada vez mayor popularidad del FORTRAN estimuló a fabricantes de computadores de la competencia a proporcionar compiladores FORTRAN para sus máquinas, así que por 1963 existían más de 40 compiladores FORTRAN. Por estas razones, el FORTRAN es considerado ser el primer lenguaje de programación ampliamente usado soportado a través de una variedad de arquitecturas de computador.
El desarrollo del FORTRAN fue paralelo a la temprana evolución de la tecnología del compilador. De hecho, muchos avances en la teoría y el diseño de compiladores fueron motivados específicamente por la necesidad de generar código eficiente para los programas en FORTRAN. Versiones Algunas otras versiones subsiguientes fueron:
FORTRAN IV
FORTRAN 77
FORTRAN 90
FORTRAN 95
FORTRAN 2003
FORTRAN 2008
Principales características El lenguaje fue diseñado teniendo en cuenta que los programas serían escritos en tarjetas perforadas de 80 columnas. Así por ejemplo, las líneas debían ser numeradas y la única alteración posible en el orden de ejecución era producida con la instrucción goto. Estas características han evolucionado de versión en versión. Las actuales contienen subprogramas, recursión y una variada gama deestructuras de control. Ventajas e inconvenientes de su sintaxis Lo que fue la primera tentativa de proyección de un lenguaje de programación de alto nivel, tiene una sintaxis considerada arcaica por muchos programadores que aprenden lenguajes más modernos. Es difícil escribir un bucle "for", y errores en la escritura de sólo un carácter pueden llevar a errores durante el tiempo de ejecución en vez de errores de compilación, en el caso de que no se usen las construcciones más frecuentes. Algunas de las versiones anteriores no poseían facilidades que son consideradas como útiles en las máquinas modernas, como la asignación dinámica de memoria.
Se debe tener en cuenta que la sintaxis de Fortran fue afinada para el uso en trabajos numéricos y científicos. Muchas de sus deficiencias han sido abordadas en revisiones recientes del lenguaje. Por ejemplo, Fortran 95 posee comandos mucho más breves para efectuar operaciones matemáticas con matrices y dispone de tipos. Esto no sólo mejora mucho la lectura del programa sino que además aporta información útil al compilador.
Por estas razones Fortran no es muy usado fuera de los campos de la informática y el análisis numérico, pero permanece como el lenguaje a escoger para desempeñar tareas de computación numérica de alto rendimiento. Especificaciones Existen dos versiones normalizadas del lenguaje.
ANSI X3.198-1992 (R1997). Título: Programming Language "Fortran" Extended. Conocida como Fortran 90. Se trata de un estándar publicado por ANSI.
ISO/IEC 1539-1:1997. Title: Information technology - Programming languages - Fortran - Part 1: Base language. Conocida como Fortran 95. también adoptada por ANSI.
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 90, que reemplazó a la versión 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. Por ello, en este breve curso se pasa revista a los elementos básicos del FORTRAN 77. Se trata de un curso 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'. 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 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 77 las columnas de la 1 a la 5 se reservan para que se puedan incluir etiquetas, en forma de números, que hagan 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. 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. 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 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 (es conveniente de hecho, aunque no obligatorio en FORTRAN 77, definir todas las variables de un programa al comienzo del mismo).
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 (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). Este hecho se indica en la definición de la variable; p. ej., REAL*4 SUMA
REAL*8 RESTO
define SUMA como una variable real de simple precisión, y RESTO como una variable real de doble precisión. Si no se indica la precisión, el compilador entiende que se trata de variables reales en simple precisión, p. ej., REAL SUMA es equivalente a REAL*4 SUMA. Algunos compiladores permiten el uso de variables reales de cuádruple precisión, definidas con REAL*16. En notación exponencial las variables reales de simple, doble y cuádruple precisión 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 precisión, el compilador entiende que la variable entera es de simple precisión. Algunos compiladores permiten definir variables enteras de sólo dos bytes. Recuérdese que n bits permiten representar números 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 números sólo entre -32767 y +32768.
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, seguida de *n, siendo n el número 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 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 DIMENSION A(10)
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 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., 23 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 situarse en las columnas 1-5. 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
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.
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 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 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:
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.
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 .GT. 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 .GT. (del inglés Greater Than). 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: .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 (Greaterto or Equal than)
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 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 .LE. 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
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)
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 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
FUNCTION FACTORIAL (N)
INTEGER I, N
REAL FACTORIAL, PROD
PROD = 1.0
DO I = 2, N
PROD = PROD * I
END DO
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.
Fortran es el primer lenguaje de alto nivel que salió al mercado. Ya que sigue siendo útil en Física, vamos a estudiarlo.
Un poco de historia
- Este lenguaje procedural fue el primero de alto nivel (1957)
- Desarrollado por IBM para el IBM 704.
- Orientado a la eficiencia en la ejecución.
- Se creó la definición estándar del lenguaje en el 66.
- Otras versiones:
- FORTRAN 77
- FORTRAN 90
Un sencillo ejemploCaracterísticas
Tipos de datos soportados:
- Numéricos (enteros, reales, complejos y doble precisión).
- Booleanos (logical)
- Arreglos
- Cadenas de caracteres
- Archivos
FORTRAN 90 ya es estructurado, y no requiere sentencias GOTO. Sólo admite dos ámbitos para las variables: local y global.Variables y constantes
Tipos de datos
- Arrays, pueden tener hasta 7 dimensiones y se guardan por colummnas.
- REAL M(20),N(-5:5)
- DIMENSION I(20,20) (tipo por nomenclatura implícita)
- Cadenas de caracteres, el primer carácter es el 1, el operador //permite concatenar cadenas.
- CHARACTER S*10, T*25
//- Almacenamiento de datos. Se usa COMMON para datos compartidos y EQUIVALENCE cuando almacenamos una variable con dos posibles tipos en la misma posición de memoria (como union en C). Se usa DATA para inicializar datos estáticos.
- DATA X/1.0/,Y/3.1416/,K/20/
- Tipos definidos por el usuario, con TYPE <nombre>... END TYPE <nombre>
Control de secuenciaEL conjunto de estructuras de control es limitado:
- Expresiones, prioridad de operadores
- Enunciados
- Asignación, cuando se hace entre cadenas hay ajuste de tamaño con blancos o truncamiento.
- Condicional. Permite IF ELSE IF... Para selección múltiple SELECT CASE CASE.....CASE DEFAULT.... END SELECT
- Iteración. DO....END DO
- Nulo, se usa solo para la etiqueta. CONTINUE.
- Control de subprogramas. CALL invoca al subprograma y RETURN devuelve un valor al programa llamante.
- Construcciones propensas a error: GOTO.
Entrada y salida- Tipos de archivos:
- Secuenciales
- De acceso directo
- Comandos: READ, WRITE, PRINT, OPEN , CLASE, INQUIRE (propiedades o estado del archivo) REWIND y ENDFILE (para ubicar el puntero del fichero).
- Para el tratamiento de excepciones en las sentencias READ/WRITE se puede introducir la posición de la rutina de dicho tratamiento (ERR=90).
Subprogramas- Hay tres tipos de subprogramas:
- Function, devuelven un solo valor de tipo numérico, lógico o cadena de caracteres.
- Subroutine, devuelve valores a través de variables no locales COMMON.
- Función de enunciado, permite calcular una sola expresión aritmética o lógica.
- FN(X,Y)=SIN(X)2-COS(Y)2
- Gestión de almacenamiento.
- Las variables son locales o globales (COMMON)
- Recursividad: RECURSIVE FUNCTION FACTORIAL(X)
- Parámetros de subprograma. Paso por referencia.
Abstracción y encapsulación. Evaluación del lenguaje- La abstracción es posible mediante los subprogramas y el uso de variables COMMON, aunque su uso es propenso a errores.
- FORTRAN sigue siendo utilizado en el ámbito científico y es muy eficiente realizando cálculos.
- La estructura del programa suele ser dificil de entender.
- En FORTRAN 90 se incluye la recursividad y la memoria dinámica.
- Las etiquetas de las sentencias ya no son necesarias, ni el GOTO, pues se ha transformado en un lenguaje estructurado.
- El aspecto de los programas sigue siendo de procesamiento por lotes
http://www.desarrolloweb.com/articulos/1550.phpORTEGA CASTILLO FERNANDO
FortranFORTRAN[1[[http://es.wikipedia.org/wiki/Fortran#cite_note-0|]]]inglésFormula Translating Systemlenguaje de programaciónalto nivel[2[[http://es.wikipedia.org/wiki/Fortran#cite_note-1|]]]procedurimental[3[[http://es.wikipedia.org/wiki/Fortran#cite_note-2|]]]imperativocálculo numéricocomputación científicaIBM1957IBM 704predicción numérica del tiempoanálisis de elementos finitosdinámica de fluidos computacionalfísica computacionalquímica computacionalcomputación de alto rendimientobenchmarksupercomputadoresmás rápidos del mundo[4[[http://es.wikipedia.org/wiki/Fortran#cite_note-3|]]]
The IBM Mathematical Formula Translating Systemprogramación de arreglosprogramación modularprogramación orientada a objetosprogramación genérica
John W. BackusIBMlenguaje ensambladorcomputador centralIBM 704[5[[http://es.wikipedia.org/wiki/Fortran#cite_note-4|]]]
The IBM Mathematical Formula Translating System1956lenguaje de programaciónalto nivel
[6[[http://es.wikipedia.org/wiki/Fortran#cite_note-5|]]]
tipo de datosnúmeros complejos
70965016207090
FORTRAN
El lenguaje fortran es uno de los lenguajes que forman el grupo de lenguajes de computador orientados a procedimientos, los cuales están fundamentados en la estructura del lenguaje usado originalmente para describir el problema, como también en el procedimiento empleado para resolverlo. Tiene por objeto descargar al programador de la tarea de reducir todos los cálculos y toma de decisiones a las pasos elementales requeridos por el repertorio limitado de operaciones ofrecido a nivel de lenguaje de maquina.
FORTRAN es un acrónimo de FORmula TRANslation (traducción de formulas), diseñado especialmente para la manipulación de formulas científicas y la aplicación de métodos numéricos a la solución de problemas.
JOSE ISACC SIERRA JUAREZ
REFERENCIAS
www.mitecnologico.com.mx
FORTRAN
El Fortran (previamente FORTRAN)[] (del inglés Formula Translating System) es un lenguaje de programación alto nivel de propósito general,[ ]procedurimental[ ]e imperativo, que está especialmente adaptado al cálculo numérico y a la computación científica. Desarrollado originalmente por IBM en 1957 para el equipo IBM 704, y usado para aplicaciones científicas y de ingeniería, el FORTRAN vino a dominar esta área de la programación desde el principio y ha estado en uso continuo por más de medio siglo en áreas de cómputo intensivo tales como la predicción numérica del tiempo, análisis de elementos finitos, dinámica de fluidos computacional (CFD), física computacional, y química computacional. Es una de los lenguajes más populares en el área de la computación de alto rendimiento y es el lenguaje usado para programas que evalúan el desempeño (benchmark) y el ranking de los supercomputadores más rápidos del mundo.[]
El FORTRAN (una palabra compuesta, derivada de The IBM Mathematical Formula Translating System) abarca un linaje de versiones, cada una de las cuales evolucionó para añadir extensiones al lenguaje mientras que usualmente retenía compatibilidad con las versiones previas. Versiones sucesivas han añadido soporte para procesamiento de datos basados en caracteres (FORTRAN 77),
programación de arreglos, programación modular y programación orientada a objetos (Fortran 90/95), y programación genérica (Fortran 2003). A finales de 1956, John W. Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar el computador central IBM 704. El histórico equipo FORTRAN de Backus consistió en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.[]
A mediados de 1954 fue terminada una especificación del borrador para The IBM Mathematical Formula Translating System. El primer manual para el FORTRAN apareció en octubre de
1956, porque los clientes eran reacios a usar un lenguaje de programación de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador.
Mientras que la comunidad era escéptica en que este nuevo método pudiera posiblemente superar la codificación a mano, éste redujo por un factor de 20 al número de sentencias de programación necesarias para operar una máquina, y rápidamente ganó aceptación. Durante una entrevista en 1979 con Think, la revista de los empleados de IBM, el creador, John Backus, dijo, "Mucho de mi trabajo ha venido de ser perezoso. No me gustaba escribir programas, y por eso, cuando estaba trabajando en el IBM 701 escribiendo programas para computar trayectorias de misiles, comencé el trabajo sobre un sistema de programación para hacer más fácil escribir programas"[.]
El lenguaje fue ampliamente adoptado por los científicos para escribir programas numéricamente intensivos, que incentivó a los escritores de compiladores a producir compiladores que pudieran generar un código más rápido y más eficiente. La inclusión en el lenguaje de un tipo de datos y de la aritmética de números complejos amplió la gama de aplicaciones para las cuales el lenguaje se adaptaba especialmente e hizo al FORTRAN especialmente adecuado para aplicaciones técnicas tales como la ingeniería eléctrica.
Por 1960, las versiones de FORTRAN estaban disponibles para los computadors IBM 709, 650, 1620, y 7090. Significativamente, la cada vez mayor popularidad del FORTRAN estimuló a fabricantes de computadores de la competencia a proporcionar compiladores FORTRAN para sus máquinas, así que por 1963 existían más de 40 compiladores FORTRAN. Por estas razones, el FORTRAN es considerado ser el primer lenguaje de programación ampliamente usado soportado a través de una variedad de arquitecturas de computador.
El desarrollo del FORTRAN fue paralelo a la temprana evolución de la tecnología del compilador. De hecho, muchos avances en la teoría y el diseño de compiladores fueron motivados específicamente por la necesidad de generar código eficiente para los programas en FORTRAN. Versiones
Algunas otras versiones subsiguientes fueron:
- FORTRAN IV
- FORTRAN 77
- FORTRAN 90
- FORTRAN 95
- FORTRAN 2003
- FORTRAN 2008
Principales característicasEl lenguaje fue diseñado teniendo en cuenta que los programas serían escritos en tarjetas perforadas de 80 columnas. Así por ejemplo, las líneas debían ser numeradas y la única alteración posible en el orden de ejecución era producida con la instrucción goto. Estas características han evolucionado de versión en versión. Las actuales contienen subprogramas, recursión y una variada gama de estructuras de control. Ventajas e inconvenientes de su sintaxis
Lo que fue la primera tentativa de proyección de un lenguaje de programación de alto nivel, tiene una sintaxis considerada arcaica por muchos programadores que aprenden lenguajes más modernos. Es difícil escribir un bucle "for", y errores en la escritura de sólo un carácter pueden llevar a errores durante el tiempo de ejecución en vez de errores de compilación, en el caso de que no se usen las construcciones más frecuentes. Algunas de las versiones anteriores no poseían facilidades que son consideradas como útiles en las máquinas modernas, como la asignación dinámica de memoria.
Se debe tener en cuenta que la sintaxis de Fortran fue afinada para el uso en trabajos numéricos y científicos. Muchas de sus deficiencias han sido abordadas en revisiones recientes del lenguaje. Por ejemplo, Fortran 95 posee comandos mucho más breves para efectuar operaciones matemáticas con matrices y dispone de tipos. Esto no sólo mejora mucho la lectura del programa sino que además aporta información útil al compilador.
Por estas razones Fortran no es muy usado fuera de los campos de la informática y el análisis numérico, pero permanece como el lenguaje a escoger para desempeñar tareas de computación numérica de alto rendimiento.
Especificaciones
Existen dos versiones normalizadas del lenguaje.
- ANSI X3.198-1992 (R1997). Título: Programming Language "Fortran" Extended. Conocida como Fortran 90. Se trata de un estándar publicado por ANSI.
- ISO/IEC 1539-1:1997. Title: Information technology - Programming languages - Fortran - Part 1: Base language. Conocida como Fortran 95. también adoptada por ANSI.
REFERENCIA:http://es.wikipedia.org/wiki/Fortran
ANTONIO PALOMINO GONZALEZ 7221
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 90, que reemplazó a la versión 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. Por ello, en este breve curso se pasa revista a los elementos básicos del FORTRAN 77. Se trata de un curso 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'. 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 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 77 las columnas de la 1 a la 5 se reservan para que se puedan incluir etiquetas, en forma de números, que hagan 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. 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. 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 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
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 (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). Este hecho se indica en la definición de la variable; p. ej.,**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 (es conveniente de hecho, aunque no obligatorio en FORTRAN 77, definir todas las variables de un programa al comienzo del mismo).
REAL*4 SUMA
- REAL*8 RESTO
define SUMA como una variable real de simple precisión, y RESTO como una variable real de doble precisión. Si no se indica la precisión, el compilador entiende que se trata de variables reales en simple precisión, p. ej., REAL SUMA es equivalente a REAL*4 SUMA. Algunos compiladores permiten el uso de variables reales de cuádruple precisión, definidas con REAL*16. En notación exponencial las variables reales de simple, doble y cuádruple precisión 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, tenemosINTEGER*4 PRIMER
- INTEGER*8 SEGUN
Si no se especifica la precisión, el compilador entiende que la variable entera es de simple precisión. Algunos compiladores permiten definir variables enteras de sólo dos bytes. Recuérdese que n bits permiten representar números 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 números sólo entre -32767 y +32768.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, seguida de *n, siendo n el número 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 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
DIMENSION A(10)
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
READ (unidad, formato) lista de variablesLas 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:
- 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 pantalla, con formato libre. En estos casos se utiliza la sintáxisREAD (*,*) 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
- OPERADORES MATEMÁTICOS Y FUNCIONES INTRÍNSECAS
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.,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., 23 es dos elevado al cubo.
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
A = 2.0Un 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 situarse en las columnas 1-5. 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
- 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.- BUCLES
DO índice = valor inicial, valor final, incrementoEl 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 sintáxis general de la estructura en bucle es
- ...
- 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 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:
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.- || 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.- ESTRUCTURAS CONDICIONALES
AMIN = AUna 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,
- IF (A .GT. 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 .GT. (del inglés Greater Than). 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:
.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 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 formaIF (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 simpleIF (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 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
- SUBRUTINAS Y FUNCIONES EXTRÍNSECAS
SubrutinasMuchas 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.
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)
- 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 extrínsecasLa 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
FUNCTION FACTORIAL (N)- INTEGER I, N
- REAL FACTORIAL, PROD
- PROD = 1.0
- DO I = 2, N
- PROD = PROD * I
- END DO
- 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.Por:Herrera Gutierrez Jessica
Bibliografia:http://www.uam.es/departamentos/ciencias/fisicateoricamateria/especifica/hojas/kike/FORTRAN/FORTRAN.html