Fortran

FORTRAN

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: FORTRAN 90 ya es estructurado, y no requiere sentencias GOTO. Sólo admite dos ámbitos para las variables: local y global.
 * Numéricos (enteros, reales, complejos y doble precisión).
 * Booleanos (logical)
 * Arreglos
 * Cadenas de caracteres
 * Archivos
 * 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 ... END TYPE
 * 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

ORTEGA CASTILLO FERNANDO

The IBM Mathematical **For**mula **Tran**slating System//[|programación de arreglos][|programación modular][|programación orientada a objetos][|programación genérica] [|John W. Backus][|IBM][|lenguaje ensamblador][|computador central][|IBM 704] [|[] [|5] [|]] // The IBM Mathematical Formula Translating System//[|1956][|lenguaje de programación][|alto nivel] [|[] [|6] [|]] [|tipo de datos][|números complejos] [|709][|650][|1620][|7090] //
 * Fortran****FORTRAN** [|[] [|1] [|]] [|inglés]**For**mula **Tran**slating System//[|lenguaje de programación][|alto nivel] [|[] [|2] [|]] [|procedurimental] [|[] [|3] [|]] [|imperativo][|cálculo numérico][|computación científica][|IBM][|1957][|IBM 704][|predicción numérica del tiempo][|análisis de elementos finitos][|dinámica de fluidos computacional][|física computacional][|química computacional][|computación de alto rendimiento][|benchmark][|supercomputadores][|más rápidos del mundo] [|[] [|4] [|]] //

**__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] **For**mula **Tran**slating 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 **For**mula **Tran**slating 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: // **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 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.
 * FORTRAN IV
 * FORTRAN 77
 * FORTRAN 90
 * FORTRAN 95
 * FORTRAN 2003
 * FORTRAN 2008
 * 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 **

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 i//nterpretado//, 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  **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** Conceptos básicos del lenguaje  > ** 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. > ** > 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 > > 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). > 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. > 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² + ...
 * 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. **
 * 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: **
 * 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). **
 * ** VARIABLES **
 * ENTRADAS Y SALIDAS
 * OPERADORES MATEMÁTICOS Y FUNCIONES INTRÍNSECAS
 * SALTO INCONDICIONAL
 * BUCLES

> 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. > 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 G//reater// T//han//). 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 (EQ//ual to//) > .LT. : menor que (L//ess// T//han//) > .GT. : mayor que (G//reater// T//han//) > .LE. : menor o igual que (L//ess to or// E//qual than//) > .GE. : mayor o igual que (G//reater// //to or// E//qual 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 > 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.
 * **N** || **SN** ||
 * ESTRUCTURAS CONDICIONALES
 * SUBRUTINAS Y FUNCIONES EXTRÍNSECAS

Por:Herrera Gutierrez Jessica Bibliografia:http://www.uam.es/departamentos/ciencias/fisicateoricamateria/especifica/hojas/kike/FORTRAN/FORTRAN.html