fortran 90

Download Fortran 90

Post on 30-Oct-2015

21 views

Category:

Documents

1 download

Embed Size (px)

TRANSCRIPT

  • Apuntes de Fortran 90

    V. Domnguez y F.J. Sayas

    Junio de 2001

  • 1. Introduccion

    Fortran 90 es una actualizacion de Fortran 77 que moderniza este lenguaje, incorporando algunas de lascaractersticas comunes de los lenguajes mas modernos (C, C++, Pascal,etc.). Con el nuevo lenguaje sepersiguen los siguientes objetivos:

    Modernizar la sintaxis.

    Incluir aspectos de programacion modular, recursividad,. . .

    Mejorar la habilidad para trabajar con las matematicas.

    Incorporacion de estructuras de datos y de punteros.

    Dentro de los posible se mantiene todava valida las instrucciones y sintaxis del Fortran 77. As pequenasmodificaciones permiten pasar un codigo en Fortran 77 a un codigo en Fortran 90. Sin embargo con elloperdemos las principales ventajas que incorpora el nuevo lenguaje.Captulo aparte merece el caso del manejo de tablas. En nuestro caso nos concentraremos en tablasunidimensionales y bidimensionales que se identifican con vectores y matrices. La nueva filosofa deFortran 90 consiste en el manejo de estas estructuras globalmente en lugar de elemento a elemento.Por ultimo conviene senalar que existe una actualizacion posterior que se conoce como Fortran 95. Sinembargo los cambios que incorpora son de una magnitud sensiblemente inferior a los desarrollados en laversion anterior

    Primeras ideas sobre la sintaxis.

    se emplea desde la columna inicial, a diferencia del Fortran 77 que dejaba las 6 primeras libres paraetiquetas y control de bucles.

    No se distingue entre mayusculas y minusculas. Hay compiladores que distinguen para los nombresde variables.

    ! indica una lnea de comentario. Todo lo que sigue no se compila.

    & se emplea para cortar una lnea. Se escribe al final de la lnea cortada y al principio de la siguiente.

    Estructura del programa.program nombre programadeclaracion de variablescuerpo del programaend program nombre programa

    Ejemplo

    ! mi primer programa en FORTRAN 90

    program primero ! arranque del programaimplicit none ! declaracion variablesreal :: x,y

    ! programaprint*,dame dos numeros realesread*,x,yprint*,su suma es,x+yprint*,Esta es una linea partida en dos,&

    & (x+(2*y)*x-y*y)/3.5

    end program primero ! final

    2

  • 2. Declaracion de variables y asignacion

    Tipos de constantes y variables:

    enteras (integer) de coma flotante (real) a simple y doble precision complejas (complex) a simple y doble precision caracter (character) logicas (logical): unicamente pueden adoptar los valores

    .TRUE. .FALSE

    La ordenimplicit none

    cancela un convenio implcito de declaracion de variables y obliga a declarar todas las variables

    Por defecto real y complex son de precision simple, pero depende del compilador.

    Ejemplo

    program asignacionesimplicit noneinteger :: i,jreal (kind=4) :: x,y ! declara variables de precision simplereal (kind=8) :: z,t ! precision doblecomplex :: u ! complex(kind=4) :: ucharacter (len=4) :: palabra ! (len=4) indica que tiene 4 caractereslogical :: test

    x=3.23e-4 ! asignacion de 3,23 104

    y=-2.312e2x=3.4y=4 ! esta asignacion incluye una conversion de entero a realz=3.23e-4 8 ! 8 indica que es doble precisiont=2. 8z=(3.e-1,2.) ! =0,3 + 2palabra=casa ! las comillas identifican las constantes caracterpalabra="Juan" ! tambien se usan las dobles comillastest=.TRUE.

    end program asignaciones

    Inicializacion de variables.

    Se pueden dar valores de arranque a las variables al declararlas

    parameter bloque la posibilidad de reasignar la variable en el transcurso del programa

    En las asignaciones de inicializacion no puede haber operaciones aritmeticas. Es aconsejable que nohaya conversiones automaticas (entero a real, etc).

    3

  • programa asignacionesimplicit nonereal :: x=4.,t,z=3.e-2 ! asigna valores de arranque a x y zreal (kind=8) :: u=6.e2 8complex :: a=(2.,3.)character (4) :: palabra=casa ! (4) abrevia (len=4)real, parameter :: pi=3.141592...

    3. Lectura y escritura en pantalla

    Para escribir en pantalla y leer de teclado, en formato libre, se usan respectivamente

    print*, read*,

    Ejemplo

    ...x=3.5print*,x es ,xprint*,da un valor a yread*,yprint*,valores de x e y,x,y...

    4. Operaciones numericas

    Binarias basicas. Suma, resta, producto, division y exponenciacion.

    + - * / **

    Tabla de tipos de datos y resultado.

    entero real dobleentero entero real doblereal real real realdoble doble real doble

    Funciones matematicas basicas. El argumento siempre se escribe entre parentesis.

    abs (valor absoluto o modulo)

    sqrt (raz cuadrada)

    exp (exponencial)

    log (logaritmo neperiano)

    log10

    sin

    cos

    tan

    4

  • asin

    acos

    atan

    sinh

    cosh

    tanh

    Otras.

    mod(i,j) da el resto de la division entera

    int(x) da la parte entera de x

    floor(x) da el mayor entero menor o igual que x

    ceiling(x) da el menor entero mayor o igual que x

    max(x1,...,xn) da el mayor de dos o varios argumentos

    min(x1,...,xn) da el menor de dos o varios argumentos

    Ejemplo

    program partesEnterasreal :: x=2.3, y=-4.3, z=7.2 ! preasignadasinteger :: i=3, j=7, k=-5

    print*, floor(x), ceiling(x), int(x)print*, floor(y), ceiling(y), int(y)print*, max(x,y,z), min(i,j,k)

    end program partesEnteras

    El programa precedente devolvera en pantalla:

    2 3 2-5 -4 -47.2 -5

    5. Estructuras de decision

    Operadores de comparacion. Notese la diferencia entre el igual de comparacion (==) y el de asigna-cion. El smbolo /= indica 6=.

    > < = == /=

    5

  • Operadores logicos. Son cuatro: y, o, o exclusivo, negacion.

    .AND. .OR. .XOR. .NOT.

    Simple de sentencia unica

    if (expresion logica) sentencia

    Simple de sentencia multiple

    if (expresion logica) thensentencia primerasentencia segunda...

    end if

    If-else

    if (...) then...

    else...

    end if

    Decision multiple

    if (...) then...

    else if (...) then...

    else if (...) then...

    else ! puede no estar...

    end if

    Puede haber estructuras anidadas.

    Ejemplo

    program decisionesimplicit nonereal :: x,yprint*,escribe x e yread*,x,yif (y0) then

    print*,x es positivoelse

    print*,x es negativoend ifif ((x>0 .AND. y>0).OR.(x

  • elseprint*,x*y es negativo o nulo

    end ifend program decisiones

    La orden select case. La sintaxis es

    select case (criterio) ! criterio devuelve un valor numericocase(expr1) ! selecciona si se cumple el caso

    ...case(expr2) ! si se cumple este caso y no el precedente

    ......case default ! caso por defecto; puede no estar

    ...end select

    Ejemplo

    program casosimplicit noneinteger :: opreal :: x,y

    print*,elija una opcionread*,opselect case(op)

    case(1)print*,op=1read*,x

    case(2)print*,op=2read*,x,y

    case(3:5)print*,Valor de op entre 3 y 5

    case(6:)print*,Valor de op >=6

    case(:-1)print*,Valor de op negativo

    case defaultprint*,op es cero

    end selectend program casos

    6. Estructuras de repeticion

    Estructura general

    do ndice = inicio, final, incrementosentencias

    end do

    7

  • Por defecto el incremento es 1.

    Puede haber bucles vacos (p.ej. con inicio menor que final e incremento negativo): no se haceninguna operacion.

    exit se puede emplear para forzar la salida del bucle.

    cycle se puede emplear para pasar directamente al comienzo de la siguiente repeticion del bucle.

    Ejemplo

    program repeticionesimplicit noneinteger :: i,opreal :: xdo i=10,1,-1

    print*, i**2 ! cuadrados de enteros del 10 al 1end dodo i=1,10

    print*,i**2 ! lo mismo del revesend dodo i=1,10,-1 ! bucle vaco

    print*,iend donombre : do i=1,10 ! bucle etiquetado

    print*,inserta xread*,xif (.NOT.x>=0) then

    print*,x es negativocycle ! se pasa de nuevo a la primera lnea, incrementando i

    end ifprint*,Otra vez? (1->si)read*,opif (op/=1) exit ! si op 6=1 se sale del bucle

    end do nombre ! cierre de bucle etiquetadoend program repeticiones

    7. Ficheros

    La instruccion basica de apertura de un fichero es

    open(unit=unidad, file=nombreFichero, status=tipo)

    donde:

    unidad es un numero entero que identificara al fichero mientras permanezca abierto nombreFichero es el nombre de fichero que se desea abrir; lleva comillas tipo es uno de los cuatro siguientes valores

    old cuando el fichero ya existe; permite leer pero no escribir new cuando el fichero no existe y se va a crear; si ya existe, da un error replace cuando el fichero no existe o existe pero se va a reemplazar por uno nuevo;borra el anterior

    8

  • scratch cuando se trate de un fichero temporal de trabajo que se borrara al cerrarLas instrucciones

    write(unidad,*)read(unidad,*)

    sirven para escribir y leer en formato libre.

    La instruccion open dada abre ficheros de tipo texto. Se puede modificar para ficheros binarios (sinformato).

    El fichero se cierra con

    close(unidad)

    Ejemplo

    program ficherosimplicit nonereal :: a,binteger :: i,nopen(unit=1, file=datos.dat, status=old)open(unit=2, file=salida.res, status=replace)read(1,*) ndo i=1,n

    read(1,*) a,bwrite(2,*) a+b

    end doclose(1)close(2)end program ficheros

    Si el fichero datos.dat tiene la forma

    54. 2.6. 3.-2. 4.1. 1.2e-32. 1.1e2

    el fichero salida.res tendra la forma

    6.9.2.1.0012112.

    9

  • 8. Funciones

    En principio una funcion devuelve unicamente un valor.

    La sintaxis general es

    function nombredeclaracion de variablesinstruccionesreturnend function nombre

    nombre es la denominacion de la

Recommended

View more >