Fortran Tutorial

Download Fortran Tutorial

Post on 01-Jan-2016

20 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

<ul><li><p>Tutorial Rpido de Fortran (Incluye versiones Fortran 77 y 90) </p><p>Julio R. Baeza Pereyra, Dr. </p></li><li><p> 1. Prefacio La meta de este documento acerca de Fortran es dar una rpida introduccin a las caractersticas ms comunes del lenguaje de programacin F77/90/95. No se pretende que sea una referencia completa, muchos detalles han sido omitidos, la presentacin del material se enfoca al cmputo cientfico, principalmente lgebra lineal. 2. Qu es Fortran? Fortran es lenguaje de propsito general, principalmente orientado a la computacin matemtica, por ejemplo en ingeniera. Fortran es un acrnimo de FORmula TRANslator, y originalmente fue escrito con maysculas como FORTRAN. Sin embargo la tendencia es poner slo la primera letra con mayscula, por lo que se escribe actualmente como Fortran. Fortran fue el primer lenguaje de programacin de alto nivel. El desarrollo de Fortran inicio en la dcada de 1950 en IBM y han habido muchas versiones desde entonces. Por convencin, una versin de Fortran es acompaada con los ltimos dos dgitos del ao en que se propuso la estandarizacin. Por lo que se tiene: </p><p> Fortran 66 Fortran 77 Fortran 90 (95) Fortran 2000 </p><p> La versin ms comn de Fortran actualmente es todava Fortran 77 (F77), sin embargo Fortran 90 (F90) esta creciendo en popularidad. Fortran 95 es una versin revisada de F90 la cual fue aprobada por ANSI en 1996. Hay tambin varias versiones de Fortran para computadoras paralelas. La ms importante de ellas es High Performance Fortran (HPF), la cual es de hecho el estndar. Los usuarios deben ser cuidadosos con la versin 77 del lenguaje Fortran. Aunque los compiladores ms recientes pueden trabajar con cdigo desarrollado en dicho lenguaje, un programa F77 puede contener extensiones no estandarizadas. As mismo, muchas de las caractersticas encontradas en compiladores mas recientes pueden no reconocer o en su defecto hacer caso omiso a las caractersticas anteriores. Sin embargo, los compiladores recientes generalmente soportan la sintaxis y los comandos de la versin F77, tales como la numeracin de las lneas, la instruccin GOTO computada, as como el estilo de programacin no estructurada. Razones para aprender Fortran Fortran es un lenguaje de programacin dominante usado en muchas aplicaciones de ingeniera y matemticas, por lo que es importante que se tengan bases para poder leer y modificar un cdigo de Fortran. Algunas opiniones de expertos han dicho que Fortran ser un lenguaje que pronto decaer en popularidad y se extinguir, lo que no ha sucedido todava. Una de las razones para esta supervivencia es la inercia del software, ya que una vez que una compaa ha gastado muchos millones de dlares y de aos en el desarrollo de software, no le es conveniente traducir el software a un lenguaje diferente, por el costo que implica y por ser una tarea difcil y laboriosa. Portabilidad Una ventaja principal de Fortran es que ha sido estandarizado por ANSI e ISO, por lo que un programa escrito en ANSI F77 se podr ejecutar todava en cualquier computadora que tenga un compilador de Fortran. Para continuar programando en compiladores Fortran mas recientes (tales como Fortran 2000/2005) es necesario crear cdigo estructurado, hacer uso de comandos como CASE (que sustituye al GOTO computado) as como programar en mdulos, entre otros detalles. En contrapartida, ya es posible crear programas basados en objetos y en algunos casos, tener a disposicin de un entorno para programacin basada en eventos y formularios, ms acorde con las tendencias actuales. </p></li><li><p> Lo ms aconsejable es aprender a construir cdigo estructurado desde el principio. En este trabajo se hace nfasis en el uso de cdigo que puede estar o no estructurado. Si el lector utiliza cdigo antiguo o heredado, se le recomienda que los programas se desarrollen en el futuro se apeguen a los estndares de las versiones 90/95 y subsiguientes. 3. Introduccin a Fortran Un programa de Fortran es una secuencia de lneas de texto. El texto debe de seguir una determinada sintaxis para ser un programa vlido de Fortran. Se analiza el siguiente ejemplo: </p><p>c F77 </p><p>program circulo </p><p>Real r, area c Este programa lee un nmero real r c y muestra el rea del crculo con radio r. </p><p>write (*,*) 'Escribe el radio r:' </p><p>read (*,*) r </p><p>area = 3.14159*r*r </p><p>write (*,*) 'Area = ', area </p><p>stop </p><p>end </p><p>! F90 y siguientes program circulo </p><p>Real :: r, area ! Este programa lee un nmero real r y muestra ! el rea del crculo con radio r. </p><p>write (*,*) 'Escribe el radio r:' </p><p>read (*,*) r </p><p>area = 3.14159*r*r </p><p>write (*,*) 'Area = ', area stop end </p><p> Las lneas que comienzan con el caracter "!" son comentarios y no tienen otro propsito ms que hacer los programas ms legibles. Se puede utilizar tambin el caracter c, puesto que este es el que se utiliza en la versin 77, sin embargo dicha versin no admite el smbolo de asignacin ::, por lo que se omite. Originalmente todos los programas de Fortran tenan que ser escritos solamente con letras maysculas, actualmente se pueden escribir con minsculas con lo cual se mejora la legibilidad, por lo que se har de esa forma. 4. Organizacin del Programa Un programa de Fortran por lo general consiste de un programa principal o main (o manejador) y posiblemente varios subprogramas ( o procedimientos o subrutinas). Por el momento se considerara que todas las sentencias estn en el programa principal; los subprogramas se revisarn ms adelante. La estructura del programa principal es: </p></li><li><p> ! F90/95 program NOMBRE Inclusin de libreras y mdulos externas Declaraciones de variables y tipos Instrucciones stop end </p><p> En este trabajo las palabras que estn en itlicas no debern ser tomadas en forma literal, sino como una descripcin general. La sentencia stop es opcional y podra ser vista como redundante ya que el programa terminar cuando alcance el fin, pero se recomienda que el programa termine con la sentencia stop para resaltar que la ejecucin del programa ah termina. F77 no es un lenguaje de formato libre, ya que tiene un conjunto de reglas estrictas de cmo el cdigo fuente debe ser ordenado en el editor. Las reglas ms importantes son las reglas para la posicin en columnas: Col. 1 : Blanco (espacio), o un caracter "c" o "*" para comentarios Col. 2-5 : Etiqueta de sentencia (opcional) Col. 6 : Continuacin de una lnea previa (opcional) Col. 7-72 : Sentencias Col. 73-80: Nmero de secuencia (opcional, raramente usado actualmente) Muchas lneas de un programa de F77 inician con 6 espacios y terminan antes de la columna 72, solamente el campo de sentencia es usado. Para F90 se permite el libre formato. Continuacin Ocasionalmente una sentencia no cabe en una sola lnea. Se puede dividir la sentencia en dos o ms lneas , y usar la marca de continuacin en la posicin 6. Ejemplo: c 2 3 4 5 6 (Esto muestra la posicin de la columna!) c La siguiente sentencia esta en dos lneas fsicas area = 3.14159265358979 + * r * r </p><p>Cualquier caracter puede ser usado en vez del signo "+" como caracter de continuacin. Se considera un buen estilo de programacin usar el signo ms, ampersand (&amp;) o nmeros (2 para la segunda lnea, 3 para la tercera y as sucesivamente). En F90, para continuar una lnea, el caracter de continuacin es el ampersand &amp;, el cual se debe colocar al final de la lnea que se pretende continuar en el rengln de abajo. El siguiente ejemplo muestra a la sentencia anterior, pero escrita en formato F90 ! La siguiente sentencia esta en dos lneas fsicas area = 3.14159265358979 &amp; * r * r </p><p> Espacios en Blanco Los espacios en blanco son ignorados en F77. Por lo tanto si se remueven todos los espacios en blanco en un programa de F77, el programa sintcticamente es correcto, pero no es legible para los humanos. 5. Declaracin y tipos de Variables </p></li><li><p> Nombre de Variables Los nombres de variables en Fortran consisten de 1 a 6 caracteres escogidos de la a a la z y de los dgitos del 0 al 9. El primer caracter debe ser una letra. (Nota: en F90 se permiten nombres de longitud arbitraria). F77 no diferencia entre maysculas y minsculas, de hecho, asume que toda la entrada es con minsculas. Sin embargo hace poco los compiladores de F77 empezaron a aceptar letras minsculas. Si por alguna razn se llegar a dar la situacin que el compilador de F77 insiste en usar letras maysculas, se puede usar el comando tr de Unix para hacer la conversin. Tipos y declaraciones Cada variable debera ser definida con una declaracin. Esto indica el tipo de la variable. Las declaraciones ms comunes son: c F 77 ! F90/95/2000 Integer lista de variables Integer :: lista de variables Real lista de variables Real :: lista de variables Double precision lista de variables Double precision :: lista de variables Complex lista de variables Complex :: lista de variables Logical lista de variables Logical :: lista de variables Character lista de variables Character :: lista de variables La lista de variables consiste de nombres de variables separadas por comas. Cada variable deber ser declarada exactamente una vez. Si una variable no esta declarada, tanto F77 como 95/2000 usan un conjunto implcito de reglas para establecer el tipo. Con lo anterior todas las variables que comiencen con el conjunto de letras i-n son enteros y el resto tipo real. Varios programas viejos de Fortran usan estas reglas implcitas, pero no se recomienda su uso. La probabilidad de errores en el programa crece exponencialmente si no se declaran las variables explcitamente. Variables Enteras y de punto flotante F77 slo tiene un tipo para variables enteras. Los enteros son usualmente guardados en 32 bits (4 bytes). Por lo que el rango de valores que pueden tomar los enteros es de (-231,231-1). F77 tiene dos tipos diferentes para punto flotantes conocidos como real y doble precisin. Mientras el tipo real es por lo general adecuado, algunos clculos numricos requieren de una mayor precisin por lo que double precision deber ser usado. El tamao por lo general es para el tipo real de 4 bytes y el de doble precisin es de 8 bytes, pero lo anterior depende de la mquina y el compilador. Algunas versiones no estandarizadas de Fortran usan la sintaxis real*8 para indicar una variable de punto flotante de 8 bytes. La sentencia parameter Algunas constantes aparecen varias veces en un programa, por lo que es deseable que se definan una sola vez al principio del program. Esto se puede hacer con la sentencia parameter, a la vez que hace los programas ms legibles. Por ejemplo el programa visto anteriormente podra haberse escrito de la siguiente forma: </p></li><li><p>program circulo </p><p>real r, area, pi </p><p>parameter (pi=3.14159) </p><p>c Este programa lee un nmero real r y muestra c el rea del crculo con radio r. </p><p>write (*,*) 'Escribe el radio r:' </p><p>read (*,*) r area = pi*r*r </p><p>write (*,*) 'Area = ', area </p><p>stop </p><p>end O program circulo real :: r, area real, parameter :: pi = 3.14159 </p><p>! Este programa lee un nmero real r y muestra ! el rea del crculo con radio r. </p><p>write (*,*) 'Escribe el radio r:' </p><p>read (*,*) r area = pi*r*r </p><p>write (*,*) 'Area = ', area stop end La sintaxis de la sentencia parameter en F77 es parameter (nombre = constante, ... , nombre = constante) para F90 existe la siguiente sintaxis: tipo, parameter :: nombre = constante, ... , nombre = constante Las reglas para la sentencia parameter son: </p><p> La "constante" definida en una sentencia parameter no es una variable, es una constante por lo que su valor nunca cambia. </p><p> Una "constante" puede aparecer a lo ms una vez en la sentencia parameter. </p><p> La(s) sentencia(s) parameter debern estar antes que cualquier sentencia de ejecucin. </p><p> Algunas de las razones para usar parameter son: </p><p> ayuda a recordar ms fcilmente el uso de constantes. </p><p> es fcil cambiar una constante si aparece muchas veces en el programa. </p></li><li><p>Asignacin y Expresiones Constantes La forma ms simple de una expresin es una constante. Hay seis tipos de constantes, que corresponden con los tipos de datos que maneja Fortran. Se muestran a continuacin ejemplos de constantes enteras: </p><p>1 0 </p><p>-100 32767 +15 </p><p> Ejemplos de constantes de tipo real: </p><p>1.0 -0.25 2.0E6 </p><p>3.333E-1 La notacin E se usa para nmeros que se encuentran escritos en notacin cientfica. Por lo que 2.0E6 es dos millones, mientras que 3.333E-1 es aproximadamente la tercera parte de uno Para constantes que rebasen la capacidad de almacenamiento de un real se puede usar doble precisin. En este caso, la notacin usada es el smbolo "D" en vez de "E". Por ejemplo: </p><p>2.0D-1 1D99 </p><p> Por lo que 2.0D-1 es la quinta parte de uno almacenada en un tipo doble precisin y 1D99 es un uno seguido por 99 ceros. El siguiente tipo son constantes complejas. Los cuales son indicados por un par de constantes (enteras o reales), separadas por una coma y encerrados entre parntesis. Por ejemplo: </p><p>(2, -3) (1., 9.9E-1) </p><p> El primer nmero denota la parte real y el segundo la parte imaginaria. El quinto tipo, son las constantes lgicas. Estas slo pueden tener uno de dos posibles valores, que son: </p><p>.TRUE. .FALSE. </p><p> Obsrvese que se requiere que se encierren con punto las palabras. El ltimo tipo son las constantes de caracteres. Estas son por lo general usadas como un arreglo de caracteres, llamado cadena. Estas consisten de una secuencia arbitraria de caracteres encerradas con apstrofes (comillas sencillas), por ejemplo: </p><p>'ABC' 'Cualquier cosa!' </p><p>'Es un magnfico da' Las constantes de cadenas son sensibles a maysculas y minsculas. Se presenta un problema cuando se quiere poner un apstrofe dentro de la cadena. En este caso la cadena debe ser encerrada entre comillas dobles, por ejemplo: </p></li><li><p> "Hay muchos CD's piratas" </p><p>6. Expresiones Las expresiones ms sencillas son de la forma </p><p>operando operador operando y un ejemplo es </p><p>x + y El resultado de una expresin es por si misma otro operando, por lo que se puede hacer anidamiento como lo siguiente: </p><p>x + 2 * y Con lo anterior se presenta la pregunta de la precedencia, la ltima expresin significa x + (2*y) o (x+2)*y? La precedencia de los operadores aritmticos en Fortran es (de la ms alta a la ms baja): ** {exponenciacin} * / {multiplicacin, divisin} + - {suma, resta} Todos los operadores son evaluados de izquierda a derecha, excepto el operador de exponenciacin, el cual tiene precedencia de derecha a izquierda. Si se desea cambiar el orden de evaluacin, se pueden usar parntesis. Todos los operadores anteriores son binarios. Se tienen tambin operadores unarios, uno de ellos es el de negacin - y que tiene una precedencia mayor que los anteriores. Por lo que la expresin -x+y significa lo que se esperara. Se debe tener cuidado al usar el operador de divisin, el cual devolver distintos valores dependiendo del tipo de datos que se estn usando. Si ambos operandos son enteros, se hace una divisin entera, de otra forma se hace una divisin que devuelve un tipo real. Por ejemplo, 3/2 es igual a 1 y 3./2. es igual a 1.5. Asignacin Una asignacin...</p></li></ul>

Recommended

View more >