You are on page 1of 8

Gua de Fortran77 para Programadores Profesionales

Clive G. Page, Universidad de Leicester, UK 7 de junio de 2005 (Traducido por Mauricio J. Adonis C.)
Copyright (c)1988-2005 Clive G. Page ltima actualizacin/depuracin: 5 de junio de 2005

Se concede permiso para copiar, distribuir y/o modificar este documento bajo los trminos de la Licencia de Libre Documentacin, Versin 1.1 o cualquiera de las versiones posteriores publicada por la Free Software Foundation; sin secciones modificadas, sin textos preliminares, sin textos posteriores. Una copia de la licencia est incluida en la seccin titulada Licencia de Libre Documentacin GNU. Este archivo contiene el texto de Gua de Fortran77 Para Programadores Profesionales de Pitman de 1988. El libro ya no se imprime ms, as que me pareci sensato poner el texto a libre disposicin en Internet. El estndar ISO para Fortran77 es por supuesto ahora obsoleto desde que fuera reemplazado por Fortran90 y Fortran95. Yo recomiendo insistentemente usar Fortran95 debido a una multitud de funciones que han sido agregadas a Fortran, las cuales hacen que la programacin sea ms fcil y ms confiable. Uno de los atractivos de Fortran77 es que existe un buen compilador gratuito en la forma de Fortran GNU: g77. Hasta este momento yo no conozco ningn compilador gratuito para el Fortran95 completo, pero se puede descargar un compilador para un sublenguaje llamado F, lo cual parece ser una buena forma de aprender Fortran moderno. Lamentablemente este libro no ser de mucha ayuda con F o Fortran95. Posiblemente algn da me d el tiempo para revisarlo completamente. Para mayor informacin sobre Fortran (y F) visite estos sitios web, los cuales tienen links a muchos otros http://www.star.le.ac.uk/~cgp http://www.fortran.com/ http://www.ifremer.fr/ditigo/molagnon/fortran90/engfaq.html http://dsm.dsm.fordham.edu/~ftncheck Mi pgina personal Fortran Market y pgina de F Excelentes FAQ (preguntas) FTNCHECK analizador esttico

Ya sea que escriba sus propios programas en Fortran77, o meramente use cdigo escrito por otros, le recomiendo encarecidamente que use el analizador sintctico FTNCHECK para encontrar errores. Puede descargar versiones para muchas plataformas desde el sitio web listado arriba. Originalmente el libro lo escrib usando WordPerfect, pero posteriormente lo traduje a LATEX para hacer ms fcil producir versiones on-line en HTML y Postscrip. El texto aqu presentado es muy similar a la versin publicada aunque aprovech la oportunidad para corregir unos pocos errores y hacer algunas actualizaciones menores. Si usted encuentra errores, por favor hgame saberlos. El libro se mantuvo intencionalmente breve, tanto como fue posible, para que pudiera ser vendido a precio modesto, an as me las arregl para cubrir el entero lenguaje Fortran77 como ha sido definido en los estndares ANSI e ISO, incluyendo muchos tpicos que a menudo son omitidos por libros de texto mucho ms extensos porque son vistos como avanzados.

Para incentivar la escritura de cdigo claro, confiable, portable, robusto y estructurado, aparecen secciones cortas a lo largo del libro ofreciendo gua especfica en el uso prctico del Fortran. Las caractersticas obsoletas del lenguaje, principalmente aquellas que han sido retenidas por razones de compatibilidad con versiones tempranas de Fortran fueron omitidas del texto principal, pero son tratadas en la seccin 13. sta seccin nicamente ha sido provista como ayuda para aquellos que tienen que vrselas con programas existentes pobremente escritos, o con aquellos que datan de antes de Fortran77 estndar.

1 Qu es Fortran ? 1 Qu es Fortran ?
Fortran es el lenguaje de programacin ms ampliamente usado en el mbito de las aplicaciones numricas. Esta posicin la tiene ganada en parte por haber aparecido en escena ms tempranamente que muchos otros lenguajes principales y en parte porque, tal parece, gradualmente ha ido evolucionando las caractersticas que sus usuarios, especialmente cientficos e ingenieros encuentran ms tiles. Con el fin de mantener compatibilidad con los programas antiguos, Fortran ha progresado principalmente agregando nuevas caractersticas ms bien que removiendo antiguas. El resultado neto es, por supuesto, que algunas partes del lenguaje resultan para este tiempo un poco anticuadas; algunas se pueden evitar fcilmente, otras todava pueden ser una molestia.. Esta seccin presenta una breve historia del lenguaje, esboza sus perspectivas futuras y resume sus fortalezas y debilidades.

1.1

Desarrollo Temprano

Fortran fue inventado por un equipo de programadores que trabajaban para IBM, tempranamente en los aos cincuenta. Este grupo , dirigido por John Backus produjo el primer compilador para un computador IBM 704 en 1957. Ellos usaron el nombre Fortran porque uno de sus principales objetivos era la traduccin de frmulas [formula translation]. Pero Fortran fue de hecho uno de los primersimos lenguajes de alto nivel: lleg completamente con estructuras de control y medios de entrada/salida. Fortran se hizo popular muy rpidamente y pronto se produjeron compiladores para otras mquinas IBM. No mucho tiempo despus otros fabricantes se vieron forzados a disear compiladores Fortran para su propio hardware. Para 1963 todos los principales fabricantes se haban involucrado en ello y haba docenas de diferentes compiladores Fortran en existencia, muchos de ellos bastante ms poderosos que el original. Todo esto result en un caos de dialectos incompatibles. Algo de orden fue restaurado en 1966 cuando se defini un estndar nacional americano para Fortran. Esta fue la primera vez que tuvo de ser producido un estndar para un lenguaje de programacin. Aunque esto fue muy valioso, difcilmente control la proliferacin del lenguaje. Muy deliberadamente Fortran66 estndar slo especificaba una parte de las caractersticas del lenguaje, las cuales deberan estar presentes, no previno la integracin de otras caractersticas. As, con el paso del tiempo, estas extensiones fueron proliferando, llegando a poner de manifiesta la necesidad de aplicar mayor estandarizacin. Esto result en la presente versin del lenguaje: Fortran77.

1.2

Estandarizacin

Una de las principales caractersticas de Fortran es su portabilidad, o sea, la facilidad con que puede ser llevado de un sistema computacional a otro. Ahora en que cada generacin de hardware desplaza a la previa despus de unos pocos aos, mientras que el buen software perdura por mucho ms tiempo, ms y ms programas necesitan ser portables. El crecimiento en las redes de computadoras tambin est alentando el desarrollo de programas portables. El primer paso para lograr portabilidad es asegurar que una forma estndar del lenguaje de programacin sea aceptable en todas partes. Esta necesidad es ahora ampliamente reconocida y ha resultado en el desarrollo de estndares para todos los principales lenguajes de programacin. En la prctica, como sea, muchos de los nuevos estndares han sido ignorados y los sistemas estandarizados para lenguajes tales como Basic y Pascal son todava muy raros. Afortunadamente Fortran est en mucho mejor pie: casi la totalidad de los sistemas Fortran estn diseados para conformarse al estndar usualmente llamado Fortran77. Este fue producido en 1977 por un comit del Instituto Nacional Americano de Estndares [American National Standards Institute (ANSI)] y fue subsecuentemente adoptado por la Organizacin Internacional de Estndares [International Standards Organization (ISO)]. La definicin fue publicada como ANSI X3.9-1978 e ISO 1539-1980. Los trminos Fortran estndar sern usados en el resto de este libro para referirse principalmente a Fortran77 de acuerdo a esta definicin.

1 Qu es Fortran ?
Fortran es por hoy uno de los lenguajes de computadora ms ampliamente usado en el mundo, con compiladores disponibles para casi todos los tipos de computadores en el mercado. Desde Fortran77 es muy bueno para manejar cadenas de caracteres tanto como nmeros, tambin tiene un poderoso manejo de archivos y medios de entrada/salida, sirve para un rango mucho mayor de aplicaciones que antes.

Fortran Completo y Parcial


El estndar ANSI define actualmente dos diferentes niveles de Fortran77. La forma simple, el Fortran parcial, fue ideado para ser usado en computadores que fueran muy pequeos para manejar el Fortran completo. Ahora que cada computador personal es suficientemente poderoso para manejar Fortran77 completo, el Fortran parcial est prcticamente obsoleto. Este libro, por ende, slo describe el Fortran77 completo.

Fortran90
El ISO estndar para Fortran90 ha reemplazado oficialmente a Fortran77. ste introduce una abundancia de nuevas caractersticas muchas de ellas ya en uso en otros lenguajes de alto nivel, las cuales permitirn programar ms fcilmente, facilitando la construccin de programas portables y robustos. La totalidad del Fortran77 estndar est incluido como un apropiado subconjunto, as los programas existentes (estandarizados) automticamente se conformarn tambin al nuevo estndar. Hasta que los mejor testeados compiladores para Fortran90 estn ampliamente disponibles, realmente, la mayora de los programadores estn todava usando Fortran77, con posiblemente unas menores extensiones.

1.3

Fortalezas y Debilidades

Fortran ha llegado a ser popular y ampliamente difundido debido a su nica combinacin de propiedades. Sus recursos numricos y de entrada/salida casi no tienen rival, mientras que sus recursos lgicos y de manejo de caracteres son tan buenos como en otros lenguajes. Fortran es suficientemente simple como para que usted no necesite ser un especialista para llegar a familiarizarse ms o menos rpido con l , an as tiene caractersticas tales como la compilacin de unidades de programas que permite usarlo en aplicaciones muy extensas. Los programas escritos en Fortran tambin son ms portables que aquellos en otros lenguajes mayores. La eficiencia del cdigo compilado tiende a ser tambin muy alta porque el lenguaje es justo y preciso al compilar y las tcnicas de manejo del Fortran han alcanzado un alto grado de refinacin. Finalmente la facilidad con que los procedimientos existentes pueden ser incorporados a nuevo software hace que sea especialmente fcil desarrollar nuevos programas en base a los antiguos. Sin embargo no puede negarse que Fortran tiene su buena porcin de debilidades e inconvenientes de suyo. Muchos de stos han existido en Fortran desde que fuera por primera vez inventado y debieran haber sido eliminados desde hace tiempo: los ejemplos incluyen la limitacin de nombres simblicos a 6 caracteres, la distribucin rgida de sentencias y la necesidad de usar etiquetas con las sentencias. Fortran tambin tiene reglas algo liberales y un extenso sistema de valores por defecto: mientras stos reducen el esfuerzo de programar, tambin hacen que sea ms difcil detectar errores de los programadores. En muchos otros lenguajes de programacin, por ejemplo, los tipos de datos de cada variable han de ser declarados por anticipado. Fortran no insiste en esto, pero consecuentemente, si usted comete un error de ortografa en el nombre de una variable el compilador parece que indica dos variables cuando usted slo intent usar una. Tales errores suelen ser serios, pero no siempre fciles de detectar. Fortran tambin carece de varias estructuras de control y estructuras de datos las cuales simplifican los lenguajes de programacin de diseo ms moderno. Estas limitaciones y otras son todas eliminadas con el advenimiento de Fortran90.

1 Qu es Fortran ?
1.4 Precauciones

Extensiones y Portabilidad
Los fabricantes de computadores tienen una tendencia natural a competir con los dems para hacerse de sistemas Fortran que sean mejores que antes, usualmente proveyndose de extensiones del lenguaje. Esto no est en conflicto con el Fortran estndar, previsto que los programas estandarizados todava son procesados correctamente. Verdaderamente, a la larga, los lenguajes avanzan por la absorcin de tales extensiones. An as, a corto plazo su uso se hace ms problemtico, desde que stas [extensiones] necesariamente hacen que los programas sean menos portables. Cuando el ltimo estndar de Fortran fue liberado en 1977, hubo bastante decepcin generalizada dado que ste no hizo el ms mnimo intento de eliminar algunas de las pesadas restricciones que haban persistido desde sus primeros das. El Departamento de Defensa de los Estados Unidos prepar una lista corta de extensiones para animar a los fabricantes a incorporarlas en sus sistemas Fortran77. De aquellas las ms importantes fueron las siguientes:

la sentencia END DO el bucle DO WHILE la sentencia INCLUDE las facilidades IMPLICIT NONE funciones intrnsecas para operaciones de bits en enteros

Muchos sistemas Fortran, especialmente aquellos producidos en los Estados Unidos, ahora dan soporte a esas extensiones, pero stas no son ni con mucho universales y no deberan ser usadas en programas portables. Una de las restricciones ms fastidiosas de Fortran77 es que los nombres simblicos no pueden tener ms de seis caracteres de longitud. Esto fuerza a los programadores a usar toda suerte de contracciones, abreviaciones y acrnimos en lugar de nombres significativos. Es muy tentador sacar ventaja de sistemas que relajan esta regla, aunque esto puede traer serias repercusiones. Considere un programa que usa dos variables llamadas TEMPERATURA y TEMPERACION. Muchos compiladores estaran muy felices con esto, pens un momento que se desecharan ambos nombres en base a su longitud. Desafortunadamente tambin hay uno o dos compiladores en existencia que simplemente ignorarn las letras despus de la sexta posicin, as ambos nombres sern tomados como referencias de la misma variable: TEMPER. Tal comportamiento, por deplorable que sea, est en completa concordancia con el estndar, que para compilar programas correctamente slo requiere sistemas que se ajusten a sus reglas. La nica forma de asegurarse de evitar problemas como stos es ignorando tales tentaciones completamente y slo usar Fortran estndar. Muchos compiladores proveen un switch u opciones que pueden ser configuradas para marcar toda sintaxis no estndar. Todo lo cubierto en este libro es parte del Fortran estndar, a menos que se indique claramente lo contrario.

Directivas
La programacin de computadores siempre requiere un alto nivel de cuidado y precisin si pretende tener xito. Esto es an ms vital cuando usamos Fortran que cuando usamos otros lenguajes, porque como ya se explic ms arriba, las reglas liberales de Fortran hacen ms difcil para el sistema detectar errores. Para programar exitosamente no es suficiente slo conformarse a las reglas del lenguaje, tambin es importante defenderse usted mismo contra las trampas conocidas.

2 Conceptos Bsicos de Fortran


Hay una til leccin para ser aprendida del fallo de uno de los primeros lanzamientos de prueba planetarios de la NASA. Eventualmente la causa del fallo fue rastreada hasta una sentencia en su software de control similar a sta:

DO 15 I = 1.100
cuando lo que debera haberse escrito era

DO 15 I = 1,100
pero de alguna manera el punto ha reemplazado a la coma. Debido a que Fortran ignora los espacios, esto fue visto por el compilador como:

DO15I = 1.100
lo cual es una asignacin perfectamente vlida a una variable llamada DO15I, pero no era lo que se intent hacer. Fortran77 permite una coma adicional para ser insertada despus de la etiqueta en una sentencia DO, as este cdigo podra ser escrito como:

DO 15,I = 1,100
lo cual tiene la gran ventaja de que ya no es ms una vulnerabilidad para algn fallo de punto flotante. Hay muchos peligros de esta misma laya en Fortran, pero el riesgo de caer vctima de ellos puede ser minimizado mediante adoptar las prcticas de programacin de los usuarios de mayor experiencia. Para ayudarle se han dado varias recomendaciones y directrices a lo largo de este libro. Algunas de las caractersticas de Fortran ms anticuadas e insatisfactorias no estn descritas del todo en el cuerpo principal del libro, pero han sido relegadas a la seccin 13. No hay lugar en un libro de este tamao para ir ms all dentro de las tcnicas de diseo de programas e ingeniera de software. Hasta donde fue posible todo lo recomendado aqu es consistente con los mtodos de diseo modular y programacin estructurada, pero usted debera estudiar estos tpicos con mayor detalle antes de embarcarse en cualquier proyecto de programacin de gran magnitud.

2 Conceptos Bsicos de Fortran


Esta seccin presenta algunas de las ideas bsicas de Fortran mediante presentar algunos ejemplos completos. En inters de la simplicidad, los problemas que estos resolvern estn apenas ms all del rango de una buena calculadora de bolsillo y los programas aqu mostrados carecen de varias refinaciones que usualmente estn presentes en el software profesional. An as, estos son programas completamente funcionales, los cuales usted mismo puede probar si tiene acceso a un sistema Fortran. Si no, an vale la pena leerlos para ver cmo los elementos bsicos de Fortran pueden ser puestos juntos dentro de programas completos.

2.1 Sentencias
Para empezar, he aqu uno de los programas ms simples que pueden idearse:

PROGRAM TINY WRITE(UNIT=*, FMT=*) Hola Mundo !! END


Como usted probablemente puede suponer, todo lo que este programa hace es enviar el trivial mensaje Hola Mundo !! a su terminal. An as su formato y su estructura merecen alguna explicacin. El programa consiste de tres lneas, cada una conteniendo una sentencia. Cada sentencia Fortran debe ir en una lnea propia (o ms de una si es necesario), pero las primeras seis posiciones de la lnea estn reservados para etiquetas de sentencias y para marcas de continuidad. Ya que las sentencias del ejemplo no necesitan ninguna

de estas caractersticas, las primeras seis columnas de cada lnea se dejaron en blanco. La sentencia PROGRAM da un nombre a la unidad del programa y declara que este es la unidad principal del programa. Otros tipos de unidades de programa sern tratadas ms tarde. El programa puede ser llamado como

2 Conceptos Bsicos de Fortran


usted quiera siempre que el nombre se conforme a las reglas del Fortran; el primer carcter de un nombre simblico Fortran debe ser una letra, pero desafortunadamente este no puede tener ms de seis caracteres de longitud en total. Es generalmente razonable poner el mismo nombre al programa y al archivo que contiene el cdigo fuente Fortran (el texto original). La sentencia WRITE produce salida: el parntesis encierra una lista de items de control los cuales determinan dnde y en qu forma aparece la salida. UNITS=* selecciona el archivo de salida estndar el cual es normalmente su propio terminal; FMT=* selecciona el formato de salida por defecto (tcnicamente conocido como formato de lista direccionado). Los asteriscos se usan aqu, como en muchos otros lugares en Fortran, para seleccionar una opcin por defecto o estndar. De hacho este programa podra haberse escrito an ms corto usando una forma abreviada de la sentencia WRITE:

WRITE(*,*) Hola Mundo !!


Aunque las palabras clave UNIT= y FMT= son opcionales, estas ayudan en hacer el programa ms legible, los items en la lista de control, as como en todas las listas en Fortran, van separados por comas. La informacin de control en la sentencia WRITE es seguido de una lista de items de datos para la salida: aqu hay slo un item, una constante de caracteres encerrado entre un par de caracteres de apstrofe (o comillas simples). Una sentencia END se requiere al final de todas las unidades de programa. Cuando el programa es compilado (traducido a lenguaje de mquina) sta le dice al compilador que la unidad de programa est completa; cuando encuentra una sentencia END en tiempo de ejecucin, detiene la ejecucin del programa y regresa el control al sistema operativo. El conjunto estndar de caracteres de Fortran no contiene letras minsculas, por lo que las sentencias generalmente han de ser escritas completamente con letras maysculas, pero los programas en Fortran pueden procesar como dato cualquiera de los caracteres soportados por la mquina; las constantes de caracteres (como el mensaje en el ltimo ejemplo) no estn sujetas a esta restriccin.

2.2 Expresiones y Asignaciones


El siguiente ejemplo resuelve un problema un poco ms realista: ste computa la amortizacin sobre un prstamo a tasa de inters fija (tal como un prstamo hipotecario). Los pagos fijos cobren el inters y reembolsan parte del capital; el pago anual puede ser calculado mediante la siguiente frmula:

pago=

intersmonto aos 11inters

En esta frmula, tasa es el inters anual expresado como una fraccin. Ya que es ms convencional referirse a las tasas de inters como porcentajes, el programa har esta conversin para nosotros:

PROGRAM PRESTAMO WRITE(UNIT=*, FMT=*)Ingrese el monto, % inters, aos READ(UNIT=*, FMT=*) MONTO, PCTASA, ANOS TASA = PCTASA / 100.0 PAGO = TASA * MONTO / (1.0 - (1.0+TASA)**(-ANOS)) WRITE(UNIT=*, FMT=*)El pago anual es de $, PAGO END
Este ejemplo presenta dos nuevas formas de sentencias: las sentencias READ y las asignaciones; ambas pueden ser usadas para asignar nuevos valores a las variables.

2 Conceptos Bsicos de Fortran


La sentencia READ tiene una forma similar a WRITE: aqu sta lee tres nmeros ingresados en el terminal en respuesta a la indicacin y asigna este valor a las tres variables nombradas. De nuevo FMT=* selecciona ingreso con listado directo (o formato libre) , lo cual permite que los nmeros sean ingresados de una forma conveniente: pueden ser separados por espacios o comas o ser ingresados lnea por lnea. La cuarta sentencia es una sentencia de asignacin la cual divide PCTASA por 100 y asigna el resultado a otra variable llamada TASA. La siguiente sentencia evala la frmula de los pagos y asigna el resultado a una variable llamada PAGO. Muchos operadores matemticos son usados en esta expresin: como en la mayora de los lenguajes / significa divisin y * representa multiplicacin; en Fortran ** es usado para la exponenciacin, o sea elevar un nmero a la potencia de otro. Note que dos operadores no pueden aparecer en sucesin cuando esto puede causar ambigedad, por lo que en vez de **-N se ha de usar la forma **(-N) . Otro punto general relativo al formato de programa: los espacios (blancos) no son significativos en las sentencias Fortran, as que pueden ser insertados libremente para mejorar la legibilidad de los programas. Cuando un programa est corriendo, el dilogo en pantalla se ver algo as:

Ingrese el monto, % inters, aos 20000, 9.5, 15 El pago anual es de $ 2554.87378


La respuesta dada por el sistema pudiera no ser exactamente la misma, esto debido a que el nmero de dgitos que arroja el formato de listado directo depende de la precisin de la aritmtica, la cual vara de un computador a otro.

2.3 Tipos de datos Real e Integer


El programa PRESTAMO habra sido ms complicado si ste no hubiera tomado ventaja de ciertas reglas implcitas del Fortran concernientes a los tipos de datos: esto requieren un poquito ms de explicacin. Los computadores pueden almacenar nmeros de muchas formas diferentes: la mayora de los tipos de datos numricos son aquellos llamados Integer y Real. Las variables Integer almacenan nmeros exactos y son principalmente usados para contar objetos discretos. Las variables Real son tiles en muchas otras circunstancias ya que stas almacenan nmeros usando una representacin de punto flotante, por lo que pueden manejar nmeros con una parte fraccional, como tambin nmeros enteros. La desventaja de los datos de tipo Real es que los nmeros de punto flotante no son guardados con exactitud: tpicamente los primeros seis o siete decimales estarn correctos. Es importante seleccionar el tipo correcto para cada item de dato en el programa. En el ltimo ejemplo el nmero de aos era un entero, pero todas las otras variables eran de tipo Real.

You might also like