monografia fortran
TRANSCRIPT
-
5/20/2018 Monografia Fortran
1/30
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN
FACULTAD DE INGENIERA
E.A.P DE INGENIERA EN INFORMTICA Y SISTEMAS
LENGUAJE FORTRAN
Docente:
Ing. Luis Amaro Villanueva
Curso:
Compiladores
Nombre:
Javier Flores Pari 2011-119030
Tacna-Per
-
5/20/2018 Monografia Fortran
2/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 2
Contenido
Contenido 1
INTRODUCCIN 3
CAPITULO I: HISTORIA DE FORTRAN 4
CAPITULO II: QU ES FORTRAN? 6
CAPITULO III: TIPOS DE DATOS Y EXPRESIONES 8
CAPITULO IV: SENTENCIAS Y CICLOS
13
CAPITULO V: ARREGLOS 17
CAPITULO VI: SUBPROGRAMAS 20
CAPITULO VII: E/S BASICA 23
CAPITULO VIII: EJEMPLO: SERIE DE FIBONACCI 25
CONCLUSIONES 27
BIBLIOGRAFIA 28
-
5/20/2018 Monografia Fortran
3/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 3
INTRODUCCIN
Su nombre proviene del ingles de: FORmula TRANslator. Es un lenguaje de programacin
para el desarrollo de aplicaciones matemticas y cientficas, fue el primer lenguaje de
programacin de alto nivel. Estos lenguajes de alto nivel tienen entre otras las ventajas
que pueden utilizarse en cualquier computadora y son ms afines al lenguaje humano.
Uno de los lenguajes de programacin orientado a procedimientos es el FORTRAN. Un
lenguaje orientado a procedimiento es aquel en el que el programador al escribir el
programa lo hace con un orden determinado para resolver el problema. Estos lenguajes
tienen la ventaja de que con una sola instruccin propia hacen referencia a varias del
lenguaje de mquina.
El FORTRAN nace en los aos 50, se utiliza principalmente para aplicaciones cientficas y
el anlisis numrico. Durante toda su vida ha pasado por varias versiones, inicialmente
fue un lenguaje imperativo, actualmente en sus ltimas versiones comprobamos que es
un lenguaje de programacin orientado a objetos y a procedimientos.
El FORTRAN fue bien acogido en la comunidad cientfica por su excelente rendimiento en
todo este tipo de aplicaciones. Por ello lo utilizaron para el desarrollo de programas de
cmputo intensivo. Posteriormente se le incluyo la aritmtica de nmeros complejos lo
mejoro notablemente.
Algunos expertos opinan que el FORTRAN se acabar extinguiendo, pero comprobamos
que actualmente se sigue usando. Una de las razones por la que aun no se ha extinguido
es porque a las compaas que han invertido muchsimo dinero en el desarrollo de un
determinado software, no les es rentable traducirlo a otro lenguaje de programacin
porque es una labor muy tediosa y cara.
-
5/20/2018 Monografia Fortran
4/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 4
CAPITULO I:HISTORIA DEL LENGUAJE FORTRAN
A finales de 1953, John W. Backus someti una propuesta a sus superiores en IBM para
desarrollar una alternativa ms prctica al lenguaje ensamblador para programar el
computador central IBM 704. El histrico 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.5
A mediados de 1954 fue terminada una especificacin del borrador para el IBM
Mathematical Formula Translating System. El primer manual de FORTRAN apareci en
octubre de 1956, porque los clientes eran reacios a usar un lenguaje de programacin de
alto nivel a menos que su compilador pudiera generar cdigo cuyo desempeo fuera
comparable al de un cdigo hecho a mano en lenguaje ensamblador.
Mientras que la comunidad era escptica en que este nuevo a mano, ste redujo por un
factor de 20 al nmero de sentencias de programacin necesarias para operar una
mquina, y rpidamente gan aceptacin. 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 programacin para hacer ms fcil escribir
programas".
El lenguaje fue ampliamente adoptado por los cientficos para escribir programas
numricamente intensivos, que incentiv a los escritores de compiladores a producir
compiladores que pudieran generar un cdigo ms rpido y ms eficiente. La inclusin en
el lenguaje de un tipo de datos y de la aritmtica de nmeros complejos ampli la gama
de aplicaciones para las cuales el lenguaje se adaptaba especialmente e hizo al
FORTRAN especialmente adecuado para aplicaciones tcnicas tales como la ingeniera
elctrica.
Hacia 1960, las versiones de FORTRAN estaban disponibles para los computadores IBM
709, 650, 1620, y 7090. Significativamente, la cada vez mayor popularidad del FORTRAN
estimul a fabricantes de computadores de la competencia a proporcionar compiladoresFORTRAN para sus mquinas, as que por 1963 existan ms de 40 compiladores
-
5/20/2018 Monografia Fortran
5/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 5
FORTRAN. Por estas razones, el FORTRAN es considerado ser el primer lenguaje de
programacin ampliamente usado soportado a travs de una variedad de arquitecturas de
computador.
El desarrollo del FORTRAN fue paralelo a la temprana evolucin de la tecnologa del
compilador. De hecho, muchos avances en la teora y el diseo de compiladores fueron
motivados especficamente por la necesidad de generar cdigo eficiente para los
programas en FORTRAN.
Ilustracin 1: Cdigo FORTRAN en una tarjeta perforada, mostrando el uso especializadode las columnas 1-5, 6 y 73-80
-
5/20/2018 Monografia Fortran
6/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 6
CAPITULO II: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:
Fortran 66
Fortran 77
Fortran 90 (95)
Fortran 2000
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 ensu 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
-
5/20/2018 Monografia Fortran
7/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 7
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 compiladoresFortran 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.
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..
-
5/20/2018 Monografia Fortran
8/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 8
CAPITULO III:TIPOS DE DATOS Y EXPRESIONES
ORGANIZACIN DEL PROGRAMA
Un programa de Fortran por lo general consiste de un programa principal o main (omanejador) y posiblemente varios subprogramas ( o procedimientos o subrutinas). Por elmomento se considerara que todas las sentencias estn en el programa principal; lossubprogramas se revisarn ms adelante. La estructura del programa principal es:
! F90/95program NOMBREInclusin de libreras y mdulos externasDeclaraciones de variables y tiposInstrucciones
stopendF77 no es un lenguaje de formato libre, ya que tiene un conjunto de reglas estrictas decmo el cdigo fuente debe ser ordenado en el editor. Las reglas ms importantes son lasreglas para la posicin en columnas:
Col. 1 : Blanco (espacio), o un caracter "c" o "*" para comentariosCol. 2-5 : Etiqueta de sentencia (opcional)Col. 6 : Continuacin de una lnea previa (opcional)Col. 7-72: SentenciasCol.73-80: Nmero de secuencia (opcional, raramente usado actualmente)
Muchas lneas de un programa de F77 inician con 6 espacios y terminan antes de lacolumna 72, solamente el campo de sentencia es usado. Para F90 se permite el libreformato.Continuacin Ocasionalmente una sentencia no cabe en una sola lnea. Se puede dividirla sentencia en dos o ms lneas , y usar la marca de continuacin en la posicin 6.Ejemplo:
Espacios en Blanco
Los espacios en blanco son ignorados en F77. Por lo tanto si se remueven todos losespacios en blanco en un programa de F77, el programa sintcticamente es correcto,pero no es legible para los humanos.
Declaracin y tipos de Variables
Nombre de Variables
Los nombres de variables en Fortran consisten de 1 a 6 caracteres escogidos de la a a laz 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 yminsculas, de hecho, asume que toda la entrada es con minsculas. Sin embargo hacepoco los compiladores de F77 empezaron a aceptar letras minsculas. Si por alguna
-
5/20/2018 Monografia Fortran
9/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 9
razn se llegar a dar la situacin que el compilador de F77 insiste en usar letrasmaysculas, 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.Lasdeclaraciones ms comunes son:
La lista de variables consiste de nombres de variables separadas por comas. Cadavariable 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. Conlo anterior todas las variables que comiencen con el conjunto de letras i-n son enteros y elresto tipo real. Varios programas viejos de Fortran usan estas reglas implcitas, pero no serecomienda su uso. La probabilidad de errores en el programa crece exponencialmente sino se declaran las variables explcitamente.
Variables Enteras y de punto flotante
F77 slo tiene un tipo para variables enteras. Los enteros son usualmente guardados en32 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 ydoble precisin. Mientras el tipo real es por lo general adecuado, algunos clculosnumricos requieren de una mayor precisin por lo que double precision deber serusado. El tamao por lo general es para el tipo real de 4 bytes y el de doble precisin esde 8 bytes, pero lo anterior depende de la mquina y el compilador. Algunas versiones noestandarizadas de Fortran usan la sintaxis real*8 para indicar una variable de puntoflotante de 8 bytes.
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 continuacinejemplos de constantes enteras:
1
0
-100
+5
Ejemplos de constantes de tipo real:
-
5/20/2018 Monografia Fortran
10/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 10
1.0
-0.25
2.0E6
3.333E-1
La notacin E se usa para nmeros que se encuentran escritos en notacin cientfica. Porlo que 2.0E6 es dos millones, mientras que 3.333E-1 es aproximadamente la tercera partede unoPara constantes que rebasen la capacidad de almacenamiento de un real se puede usardoble precisin. En este caso, la notacin usada es el smbolo "D" en vez de "E". Porejemplo:
2.0D-1 1D99
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 deconstantes (enteras o reales), separadas por una coma y encerrados entre parntesis.Por ejemplo:
(2, -3)
(1., 9.9E-1)
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 posiblesvalores, que son:
.TRUE. .FALSE.
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 unarreglo de caracteres, llamado cadena. Estas consisten de una secuencia arbitraria decaracteres encerradas con apstrofes (comillas sencillas), por ejemplo:
'ABC''Cualquier cosa!'
'Es un magnfico da'
Las constantes de cadenas son sensibles a maysculas y minsculas. Se presenta unproblema cuando se quiere poner un apstrofe dentro de la cadena. En este caso lacadena debe ser encerrada entre comillas dobles, por ejemplo:
"Hay muchos CD piratas
Expresiones
Las expresiones ms sencillas son de la forma
-
5/20/2018 Monografia Fortran
11/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 11
operando operador operando
y un ejemplo es
x + y
El resultado de una expresin es por si misma otro operando, por lo que se puede haceranidamiento como lo siguiente: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 msalta a la ms baja):
** {exponenciacin}
* / {multiplicacin, divisin}
+ - {suma, resta}
Todos los operadores son evaluados de izquierda a derecha, excepto el operador deexponenciacin, el cual tiene precedencia de derecha a izquierda. Si se desea cambiar elorden de evaluacin, se pueden usar parntesis.
Todos los operadores anteriores son binarios. Se tienen tambin operadores unarios, unode ellos es el de negacin -y que tiene una precedencia mayor que los anteriores. Por loque la expresin -x+y significa lo que se esperara.
Se debe tener cuidado al usar el operador de divisin, el cual devolver distintos valoresdependiendo del tipo de datos que se estn usando. Si ambos operandos son enteros, sehace 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.
AsignacinUna asignacin tiene la forma
nombre_de_variable = expresin
La interpretacin es como sigue: se evala el lado derecho y se asigna el valor delresultado a la variable de la izquierda. La expresin de la derecha puede contener otrasvariables, pero estas nunca cambiaran de valor. Por ejemplo:area = pi * r**2
no cambia el valor de pi, ni de r, solamente de area.
Expresiones Lgicas
Una expresin lgica puede tener solamente el valor de .TRUE. o de .FALSE.. Una valor
lgico puede ser obtenido al comparar expresiones aritmticas usando los siguientesoperadores relacionales:
-
5/20/2018 Monografia Fortran
12/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 12
F77 F90
.LT. =
.EQ. =
.NE. /=
Por lo que no se pueden usar smbolos como < o = para comparacin en F77 estandar,por lo que se tienen que usar abreviaturas de dos letras encerradas con puntos. Sinembargo en F90 (y en general en todos los compiladores comerciales de Fortran) yapueden ser usados.
Las expresiones lgicas pueden ser combinadas con los operadores
lgicos .AND. .OR. .NOT. que corresponden a los operadores lgicos conocidos Y, O ynegacin respectivamente.
Asignacin de Variables Lgicas
Los valores booleanos pueden ser guardados en variables lgicas. La asignacin es deforma anloga a la asignacin aritmtica. Ejemplo:
logical:: a, ba = .TRUE.b = a .AND. 3 .LT. 5/2
El orden de precedencia es importante, como se muestra en el ltimo ejemplo. La regla esque las expresiones aritmticas son evaluadas primero, despus las que contienenoperadores relacionales, y finalmente las de operadores lgicos. Por lo que a b se leasigna .FALSE. en el ejemplo anterior.
Las expresiones lgicas son usadas frecuentemente en sentencias condicionales como if.
-
5/20/2018 Monografia Fortran
13/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 13
-
5/20/2018 Monografia Fortran
14/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 14
CAPITULO IV:SENTENCIAS Y CICLOS
LA SENTENCIA IF
Una parte importante de cualquier lenguaje de programacin son las sentenciascondicionales. La sentencia ms comn en Fortran es if, la cual tiene varias formas deuso. La forma ms simple de la sentencia if es:
if(expresin lgica) sentencia
Lo anterior tiene que ser escrito en una sola lnea. El siguiente ejemplo obtiene el valorabsoluto de x:
if(x .LT. 0) x = -x
Si ms de una sentencia necesita ser ejecutada dentro de la sentencia if, entonces lasiguiente sintaxis deber ser usada:
if(expresin lgica) thensentencias endif
La forma ms general ms general de la sentencia if tiene la siguiente forma:
if(expresin lgica) thensentencias
elseif(expresin lgica) thensentencias
:
:
elsesentencias endif
El flujo de ejecucin es de arriba hacia abajo. Las expresiones condicionales sonevaluadas en secuencia hasta que se encuentra una que es verdadera. Entonces elcdigo asociado es ejecutado y el control salta a la siguiente sentencia despus de lasentencia endif.
Sentencias If Anidadas
La sentencia if puede ser anidada varios niveles. Para asegurar la legibilidad esimportante sangrar las sentencias. Se muestra un ejemplo:
-
5/20/2018 Monografia Fortran
15/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 15
write(*,*) 'x es negativo' elsewrite(*,*) 'x es cero' endif
Se debe evitar anidar muchos niveles de sentencias if ya que es difcil de seguir.
CICLOS
Para la repetir la ejecucin de sentencias se usan los ciclos. Si se esta familiarizado conotros lenguajes de programacin se habr escuchado de los ciclos-for y de los ciclos-until,
F77 tiene solamente una construccin de ciclo, conocida como el ciclodo. El ciclo -docorresponde al ciclo-for que existe en otros lenguajes de programacin. Otros ciclospueden ser simulados usando las sentencias if y goto.
Ciclos-do
El ciclo-do es usado para repetir un conjunto de sentencias una determinada cantidad deveces. Se muestra el siguiente ejemplo donde se calcula la suma de los enteros desde el1 hasta n (suponiendo que a n se le ha asignado un valor previamente):
integer i, n, suma
:
:
:
suma = 0 do 10 i = 1, nsuma = suma + i write(*,*) 'i =',
i write(*,*) 'suma =', suma
10 continue
El nmero 10 es una sentencia de etiqueta. Tpicamente, podra haber varios ciclos yotras sentencias en un programa que requierean una sentencia de etiqueta. El
programador es responsable de asignar un nmero nico a cada etiqueta en cadaprograma (o subprograma). Recordar que las posiciones de las columnas 2-5 sonreservadas para sentencias de etiquetas. El valor numrico de las sentencias de etiquetano tienen ningn significado, por lo que cualquier valor entero puede ser usado. Por logeneral, los programadores incrementan las etiquetas de 10 en 10 cada vez.La variable en la sentencia do es incrementada en 1 por default. Sin embargo, se puedeusar cualquier otro entero para el paso o incremento. El siguiente segmento de programamuestra los nmeros pares en forma decreciente entre el 1 y 10:
integer :: i
::
-
5/20/2018 Monografia Fortran
16/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 16
:
do 20 i = 10, 1, -2
write(*,*) 'i =', i
20 continue
La forma general del ciclo do es la siguiente en F77:
doetiq var = expr1, expr2, expr3sentencias etiq continue
o de forma alterna en F90:
do (expr lgica)
sentencias end do
donde:
var es la variable del ciclo (conocida con frecuencia como el ndice del ciclo) el cualdeber ser del tipo integer. expr1 indica el valor inicial de var, expr2 es el valor hasta elque llegar el ndice, y expr3 es el incremento (step).etiq nmero de lnea
Nota: La variable del ciclo do nunca deber ser modificada por otras sentencias dentro delciclo, ya que puede generar errores de lgica.
Muchos compiladores de F77 permiten que los ciclos do sean cerrados por la sentenciaend do. La ventaja es que la sentencia etiqueta puede ser omitida, ya que en este caso lasentencia end do cierra la sentencia do ms cercana. La construccin end do esampliamente usada, pero no es parte del ANSI F77.
Ciclos while
La forma ms intuitiva para escribir un ciclo while es
while(expr lgica) dosentencias end do
o de forma alterna
do while(expr lgica)sentencias end do
Las sentencias en el cuerpo sern repetidas mientras la condicin en el ciclo while sea
verdadera. A pesar de que esta sintaxis es aceptada por muchos compiladores(incluyendo el de Linux), no forma parte del ANSI F77.
-
5/20/2018 Monografia Fortran
17/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 17
A continuacin se tiene un ejemplo que calcula y muestra el doble de todos los nmeroanterior comenzando con el 2 y que son menores a 100:
integern n = 110 if(n .lt. 100) then
n = 2*n
write(*,*) n goto10endif
Ciclos en F90
F90 ha adoptado la construccin do-end do como su ciclo ( el f77 de linux la reconocecomo vlida). Por lo que el ejemplo de decrementar de dos en dos queda como:
doi = 10, 1, -2 write(*,*) 'i=', i end do
para simular los ciclos while y until se puede usar la construccin do-end do, pero se tieneque agregar una sentencia condicional de salida exit (salida). El caso general es:
dosentencias if (expr
lgica) exitsentencias end
do
Si se tienen la condicin de salida al principio es un ciclo while, y si esta al final se tieneun ciclo until.
-
5/20/2018 Monografia Fortran
18/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 18
CAPITULO V:ARREGLOS
Muchos clculos cientficos usan vectores y matrices. El tipo de dato usado en Fortranpara representar tales objetos es el array. Un arreglo unidimensional corresponde a unvector, mientras que un arreglo bidimensional corresponde a una matriz. Para entendercomo son usados en F77, no solamente se requiere conocer la sintaxis para su uso, sinotambin como son guardados estos objetos en la memoria.
Arreglos Unidimensionales
El arreglo ms sencillo es el de una dimensin, el cual es slo un conjunto de elementosalmacenados secuencialmente en memoria. Por ejemplo, la declaracin
reald(20)
o de manera alternativa:real, dimension(20) :: d
declara a d como un arreglo del tipo real con 20 elementos. Esto es, d consiste de 20nmeros del tipo real almacenados en forma contigua en memoria. Las dos instruccionesanteriores son validas para compiladores F77 como F90 modernos. La segundainstruccin sin embargo, permite definir un conjunto de arreglos de una misma dimensine ndice de manera ms cmoda y hasta cierto punto mas legible.
Como ejemplo, tmese la siguiente instruccin:
real, dimension(20) :: d, Lista, NumerosReales, A, B, C, H
y comprese con la siguiente:
reald(20), Lista(20), NumerosReales(20), A(20), B(20), C(20), H(20)
Por convencin, los arreglos en Fortran estn indexados a partir del valor 1. Por lo tanto elprimer elemento en el arreglo es d(1) y el ltimo es d(20). Sin embargo, se puede definirun rango de ndice arbitrario para los arreglos como se observa en los siguientesejemplos:
realb(0:19), c(-162:237)
En el caso de b es similar con el arreglo d del ejemplo previo, excepto que el ndice corredesde el 0 hasta el 19. El arreglo c es un arreglo de longitud 237-(-162)+1 = 400. El tipode los elementos de un arreglo puede ser cualquiera de los tipos bsicos de datos yavistos. Ejemplos:
integer:: i(10) logical:: aa(0:1)doubleprecision:: x(100)
Cada elemento de un arreglo puede ser visto como una variable separada. Se referenciaal i-simo elemento de un arreglo a por a(i). A continuacin se muestra un segmento de
-
5/20/2018 Monografia Fortran
19/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 19
cdigo que guarda los primeros 10 cuadrados en un arreglo cuadrado .
integeri, cuad(10) doi=1, 10, 1cuadrado(i) = i**2; write(*,*)
cuad(i) end do
Un error comn en Fortran es hacer que el programa intente accesar elementos delarreglo que estn fuera de los lmites. Lo anterior es responsabilidad del programador, yaque tales errores no son detectados por el compilador.
Arreglos Bidimensionales
Las matrices son muy importantes en lgebra lineal. Las matrices son usualmenterepresentadas por arreglos bidimensionales. Por ejemplo, la declaracin
realArreglo(3,5)Oreal, dimension(3, 5) :: Arreglo
define un arreglo bidimensional de 3 x 5 = 15 nmeros del tipo real. Es til pensar que elprimer ndice es el ndice del rengln, y el segundo ndice corresponde a la columna. Porlo tanto se vera como:
1 2 3 4 5
1
2
3
Un arreglo bidimensional podra tambin tener ndices de rango arbitrario. La sintaxisgeneral para declarar el arreglo es:
nombre (ndice1_inf : indice1_sup, ndice2_inf : indice2_sup)
El tamao total del arreglo es de
tamao = (indice1_sup -indice1_inf + 1) x (indice2_sup -indice2_inf + 1)
Es muy comn en Fortran declarar arreglos que son ms grandes que la matriz que se vaa guardar. Lo anterior es porque Fortran no tiene almacenamiento dinmico de memoriacomo el lenguaje C. Por ejemplo:
realA(3,5) integeri,j! Solamente se usar
! una submatriz de 3 x 3 del arreglo doi=1, 3doj=1, 3 a(i,j) = real(i)/real(j)
end doend do
-
5/20/2018 Monografia Fortran
20/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 20
Los elementos en la submatriz A(1:3,4:5) no estn definidas. No se debe considerar queestos elementos estn inicializados a cero por el compilador (algunos compiladores lohacen, pero otros no).Forma de Almacenamiento para un arreglo bidimensional . Fortran almacena los arreglosde ms de una dimensin como una secuencia contigua lineal de elementos. Esimportante saber que los arreglos bidimensionales son guardados por columnas. Por lotanto en el ejemplo anterior, el elemento del arreglo (1,2) esta despus del elemento (3,1),luego sigue el resto de la segunda columna, la tercera columna y as sucesivamente.
Considerando otra vez el ejemplo donde solamente se usa la submatriz de 3 x 3 delarreglo de 3 x 5. Los primeros 9 elementos que interesan se encuentran en las primerasnueve localidades de memoria, mientras que las ltimas seis celdas no son usadas. Loanterior funciona en forma transparente porque la dimensin principal es la misma paraambos, el arreglo y la matriz que se guarda en el arreglo. Sin embargo, frecuentemente la
dimensin principal del arreglo ser ms grande que la primera dimensin de la matriz.Entonces la matriz no ser guardada en forma contigua en memoria, an si la arreglo escontiguo. Por ejemplo, supongamos que la declaracin hubiera sido A(5,3) entonceshubiera habido dos celdas "sin usar" entre el fin de la primera columna y el principio de lasiguiente columna (suponiendo que asumimos que la submatriz es de 3 x 3).
Esto podra parecer complicado, pero actualmente es muy simple cuando se empieza ausar. Si se tiene en duda, puede ser til hallar la direccin de un elemento del arreglo.Cada arreglo tendr una direccin en la memoria asignada a partir del arreglo, que es elelemento (1,1). La direccin del elemento (i,j)esta dada por la siguiente expresin:
direccin[A(i,j)] = direccin[A(1,1)] + (j-1)*princ + (i-1)
donde princ es la dimensin principal (la columna) de A. Obsrvese que princ es engeneral diferente de la dimensin actual de la matriz. Muchos errores de lgica en Fortranson causados por lo anterior, por lo tanto es importante entender la diferencia.
Arreglos Multi-dimensionales
F77 permite arreglos de hasta 7 dimensiones. La sintaxis y forma de almacenamiento esanloga al caso de dos dimensiones.
La sentencia dimension
Hay una forma alterna para declarar un arreglo en Fortran. Las siguientes sentencias
real A, x dimensionx(50)
dimension A(10,20)
son equivalentes a
real A(10,20), x(50)
-
5/20/2018 Monografia Fortran
21/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 21
CAPITULO VI:SUBPROGRAMAS
Subprogramas
Cuando un programa tiene ms de cien lneas, es difcil de seguir. Los cdigos de Fortranque resuelven problemas reales de ingeniera por lo general tienen decenas de miles delneas. La nica forma para manejar cdigos tan grandes, es usar una aproximacinmodular y dividir el programa en muchas unidades independientes pequeas llamadassubprogramas.
Un subprograma es una pequea pieza de cdigo que resuelve un subproblema biendefinido. En un programa grande, se tiene con frecuencia que resolver el mismosubproblema con diferentes tipos de datos. En vez de replicar el cdigo, estas tareas
pueden resolverse con subprogramas. El mismo subprograma puede ser llamado variasveces con distintas entradas de datos.
En Fortran se tienen dos tipos diferentes de subprogramas, conocidas como funciones ysubrutinas.
Funciones
Las funciones en Fortran son bastante similares a las funciones matemticas: ambastoman un conjunto de variables de entrada (parmetros) y regresan un valor de algn tipo.Al inicio de la seccin se comento de los subprogramas definidas por el usuario, pero F77
tiene tambin funciones incorporadas. Un ejemplo simple muestra como usar unafuncin:
x = cos(pi/3.0)
En este caso la funcin coseno cos de 60, asignar a la variable x el valor de 0.5 (si pi hasido definido correctamente; F77 no tiene constantes incorporadas). Hay varias funcionesincorporadas en F77. Algunas de las ms comunes son:
abs valor absoluto
min valor mnimomax valor mximo
sqrt raz cuadrada
sin seno
cos coseno
tan tangente
atan arco tangente
exp exponencial
(natural)
log logaritmo
(natural)
-
5/20/2018 Monografia Fortran
22/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 22
En general, una funcin siempre tiene un tipo. Varias de las funciones incorporadasmencionadas anteriormente son sin embargo genricas. Por lo tanto en el ejemploanterior pi y x podran ser del tipo real o del tipo doubleprecision. El compilador revisarlos tipos y usar la versin correcto de la funcin cos (real o double precision).Desafortunadamente, Fortran no es un lenguaje polimrfico, por lo que en general, elprogramador debe hacer coincidir los tipos de las variables y las funciones.
Se revisa a continuacin como implementar las funciones escritas por el usuario.Supongamos el siguiente problema: un meteorlogo ha estudiado los niveles deprecipitacin en el rea de una baha y ha obtenido un modelo (funcin) ll(m,t) donde ll esla cantidad de lluvia, m es el mes, y t es un parmetro escalar que depende de lalocalidad. Dada la frmula para lly el valor de t, calcular la precipitacin anual
La forma obvia de resolver el problema es escribir un ciclo que corra sobre todos losmeses y sume los valores de ll. Como el clculo del valor de ll es un subproblema
independiente, es conveniente implementarlo como una funcin. El siguiente programaprincipal puede ser usado:
program lluvia real :: r, t,suma integer:: m
write(*,*) 'Ingrese el tiempo (t) ' read (*,*)t suma = 0.0 dom = 1, 12 suma =suma + ll(m, t) enddowrite(*,*) 'La precipitacin Anual es ', suma, 'pulgadas' stopend
Adems, la funcin lltiene que ser definida como una funcin de Fortran. La frmula delmeteorlogo es:
ll(m,t) = t/10 * (m**2 + 14*m + 46) si la expresin es positiva ll(m,t) = 0otro caso
La correspondiente funcin en Fortran es
realfunctionll(m,t)Integer:: m
Real:: tll = 0.1*t * (m**2 + 14*m + 46) if(ll .LT. 0) ll = 0.0 returnend
Se puede observar que la estructura de una funcin es parecida a la del programaprincipal. Las diferencias son:
Las funciones tienen un tipo. El tipo debe coincidir con el tipo de la variable que recibir elvalor.
El valor que devolver la funcin, deber ser asignado en una variable que tenga elmismo nombre que la funcin.
-
5/20/2018 Monografia Fortran
23/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 23
Las funciones son terminadas con la sentencia return en vez de la sentencia stop. Pararesumir, la sintaxis general de una funcin en F77 es:
tipo functionnombre (lista_de parmetros) declaraciones
:sentencias
:
returnend
La funcin es llamada simplemente usando el nombre de la funcin y haciendo una listade argumentos entre parntesis.
Subrutinas
Una funcin de Fortran puede devolver nicamente un valor. En ocasiones se deseanregresar dos o ms valores y en ocasiones ninguno. Para este propsito se usa laconstruccin subrutina. La sintaxis es la siguiente:
subroutinenombre (lista_de_parmetros) declaraciones:
sentencias
:
returnend
Obsrvese que las subrutinas no tienen tipo y por consecuencia no pueden hacerseasignacin al momento de llamar al procedimiento. Se da un ejemplo de una subrutinamuy sencilla. El propsito de la subrutina es intercambiar dos valores enteros.
subroutineiswap (a, b) integer:: a, b! Variables locales
integertmp! Sentencias
tmp = a a= b b = tmpreturnend
Se debe observar que hay dos bloques de declaracin de variables en el cdigo. Primero,se declaran los parmetros de entrada/salida, es decir, las variables que son comunes alque llama y al que recibe la llamada. Despus, se declaran las variables locales, esto es,las variables que sern slo conocidas dentro del subprograma. Se pueden usar losmismos nombres de variables en diferentes subprogramas.
-
5/20/2018 Monografia Fortran
24/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 24
-
5/20/2018 Monografia Fortran
25/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 25
CAPITULO VII:E/S BASICA
Una parte importante del cualquier programa de cmputo es manejar la entrada y lasalida. En los ejemplos revisados previamente, se han usado las dos construcciones mscomunes de Fortran que son: read and write. La E/S con Fortran puede ser un pococomplicada, por lo que nos limitaremos a los casos ms sencillos en el tutorial.
Lectura y Escritura
La sentencia read es usada para la entrada y la sentencia write para la salida. El formatoes:
read(nm_unidad, nm_formato) lista_de_variables
write(nm_unidad, nm_formato) lista_de_variables
El nmero de unidad se puede referir a la salida estndar, entrada estndar o a unarchivo. Se describir ms adelante. El nmero de formato se refiere a una etiqueta parala sentencia format, la cual ser descrita brevemente. Es posible simplificar estassentencias usando asteriscos (*) para algunos argumentos, como lo que se ha hecho enlos ejemplos anteriores. A lo anterior se le conoce como una lectura/escritura de listadirigida.
read(*,*) lista_de_variables
write(*,*) lista_de_variables
La primera sentencia leer valores de la entrada estndar y asignar los valores a lasvariables que aparecen en la lista, y la segunda escribe la lista en la salida estndar.Ejemplos
Se muestra un segmento de cdigo de un programa de Fortran:
integer:: m, n real :: x, yread(*,*) m, nread(*,*) x, y
Se ingresan los datos a travs de la entrada estndar (teclado), o bien, redireccionando laentrada a partir de un archivo. Un archivo de datos consiste de registros de acuerdo a losformatos vlidos de Fortran. En el ejemplo, cada registro contiene un nmero (entero oreal). Los registros estn separados por espacios en blanco o comas. Por lo que unaentrada vlida al programa anterior puede ser:
-1 100
-1.0 1e+2
O se pueden agregar comas como separadores:
-1, 100
-
5/20/2018 Monografia Fortran
26/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 26
-1.0, 1e+2
Obsrvese que la entrada en Fortran es sensible a la lnea, por lo que es importantecontar con el nmero apropiado de elementos de entrada (registros) en cada lnea. Por
ejemplo, si se da la siguiente entrada en una sola lnea
-1, 100, -1.0, 1e+2
entonces a m y a n se asignarn los valores de -1 y 100 respectivamente, pero los dosltimos valores sern descartados, dejando a x e y sin definir.
-
5/20/2018 Monografia Fortran
27/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 27
CAPITULO VIII:EJEMPLO: SUCESIN DE FIBONACCI
La serie de Fibonacci es un algoritmo que todos hemos visto alguna vez, pero de todosmodos lo explicaremos brevemente, consiste en una serie de nmeros en la cual secumple un patrn, el cual es que a partir del tercer trmino, cada termino es la suma delos dos anteriores.
Para programarlo, vamos a utilizar Fortran 77, existe versiones ms actuales como losson fortran 2003 o fortran 2008, pero fortran 77 nos ser suficiente. Comencemos
Lo primero, fortran es multiplataforma funciona tanto en Windows como en Linux, paraeste ejemplo utilizaremos Linux.
Instalar el compilador de fortran es muy sencillo, y lo realizaremos con la Terminal deLinux, en mi caso uso como distribucin Linux Mint. Instalamos el compilador con elsiguiente comando:
sudo apt-get install gfortran
Una vez instalado, ahora necesitamos un editar de texto, hay muchos pero en particular,me gusta uno : Emacs, el codigo es el siguiente:
-
5/20/2018 Monografia Fortran
28/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 28
Una vez terminado el codigo, lo guardamos con el siguiente nombre: seriefibonacci.f ,debe tener al extension .f . Para luego poder compilarlo en la Terminal con el siguientecomando:
gfortran seriefibonacci.f
Luego el programa ya estara compilado, y nos generar una archivo llamado ./a.outPara correrlo escribimos el siguiente comando en la Terminal:
./a.out
Como vemos el lenguaje fortran es bastante sencillo de utilizar. Ya que sus comandos sonbastante intuitimos.
-
5/20/2018 Monografia Fortran
29/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 29
CONCLUSIONES
FORTRAN es unos de los primeros lenguajes de programacin de alto nivel que desde
que sali la primera versin, cuando sali FORTRAN como un lenguaje que no era
ensamblador dudaron porque los clientes eran reacios a usar unlenguaje deprogramacindealto nivela menos que su compilador pudiera generar cdigo cuyo
desempeo fuera comparable al de un cdigo hecho a mano en lenguaje ensamblador.
El lenguaje fue ampliamente adoptado por los cientficos para escribir programas
numricamente intensivos, que incentiv a los escritores de compiladores a producir
compiladores que pudieran generar un cdigo ms rpido y ms eficiente. La inclusin en
el lenguaje de untipo de datosy de la aritmtica denmeros complejosampli la gama
de aplicaciones para las cuales el lenguaje se adaptaba especialmente e hizo al
FORTRAN especialmente adecuado para aplicaciones tcnicas tales como la ingeniera
elctrica.Por 1960, las versiones de FORTRAN estaban disponibles para los computadores
IBM709,650,1620, y7090.
Significativamente, era cada vez mayor la popularidad del FORTRAN estimul a
fabricantes de computadores de la competencia a proporcionar compiladores FORTRAN
para sus mquinas, as que por 1963 existan ms de 40 compiladores FORTRAN. Por
estas razones, el FORTRAN es considerado ser el primer lenguaje de programacin
ampliamente usado soportado a travs de una variedad de arquitecturas de computador.
El desarrollo del FORTRAN fue paralelo a la temprana evolucin de la tecnologa del
compilador. De hecho, muchos avances en la teora y el diseo de compiladores fueron
motivados especficamente por la necesidad de generar cdigo eficiente para los
programas en FORTRAN.
FORTRAN ha incluido atreves de los aos mejoras a sus versiones dependiendo las
necesidades.
-
5/20/2018 Monografia Fortran
30/30
Universidad Nacional Jorge Basadre GrohmannE.A.P. Ingeniera en Informtica y Sistemas
Pgina 30
BIBLIOGRAFIA
Actualidad.rt. (s.f.). Obtenido de La revista de la Informatica:http://www.larevistainformatica.com/FORTRAN.htm
Lenguajes de programacin(s.f.). Obtenido de Lenguajes de programacin:http://www.um.es/docencia/barzana/DIVULGACION/INFORMATICA/Lenguaje -FORTRAN.html
Fortran Tutorial. Tutorial de Fortrans. Obtenido de:http://iate.oac.uncor.edu/~manuel/astro2/FortranTutorial.pdf