monografia fortran

Upload: javier-flores-pari

Post on 10-Oct-2015

21 views

Category:

Documents


0 download

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