Fortran2 Ele

Embed Size (px)

DESCRIPTION

Trabajo de Fortran

Citation preview

  • FORTRAN 90/95Lenguaje FORTRAN PRIMER lenguaje de Alto nivel CLCULO; ANLISIS NUMRICO (FORmula TRANslation)

    1954 FORTRAN II 1958 FORTRAN IV 1962 FORTRAN66 FORTRAN77 1977 en vigor! FORTRAN90 1990 incluye F77 FORTRAN95 1996 (mejoras mnimas) FORTRAN2003 2000/2004

    F90/95

  • Es el lenguaje ms utilizado en el mbito cientfico Es el lenguaje dominante en supercomputacin Es un lenguaje fcil de aprender y utilizar. Es el nico lenguaje que perdura desde los aos 50 hasta el momento actual. Existen miles de programas de clculo, y libreras de uso absolutamente generalizado: IMSL (International Mathematics and Statistical Library), NAG (Numerical Algorithms Group), etc.Por qu el Fortran?

  • Compilador: traduce a cdigo mquina ejecucin muy rpida ejecutable depende de la CPU (no portabilidad)

    permite OPTIMIZAR la ejecucin (tiempo, memoria, etc)COMPILADOR: compila: genera un objeto binario NO ejecutable instrucciones empaquetadas e incomunicadas

    linka: vincula paquetes entre si para comunicarse con el exterior (EJECUTARSE) EJECUTABLE/BINARIO

    Permite el uso de LIBRERIAS ya compiladas

  • ELEMENTOS DE FORTRAN1. Caracteres: a-z, A-Z, 0-9, _ case insensitive

    2. Aritmticos: +,-,*,/,**

    3. Otros: ( ) . = , $ : ! % & ; < > ?SENTENCIAS:

    ejecutables no ejecutablesLongitud 132 caracteresoutput = input1 + & input2Continuacin de lnea

  • Estructura de un programa:

    Seccin de declaracin de variablesVariables, tipo, arrays, parmetros, precisin,...

    Seccin ejecutableEl cdigo principal, procedimientos,...

    Terminacin

    PROGRAM myprogram

    ... ...

    END PROGRAM myprogram

  • IdentificadoresEs un nombre para denotar variables, constantes, programas y procedimientos.

    Deben empezar con una letra (a-z) y pueden tener una longitud de 31 caracteres (a-z, 0-9, _)

    Vlidos: pepe, JUAN, PI, x0, x1, z3rt_1234

    No vlidos: 3luis, fifo$, R2-D2, obi/uan/kenobi

  • Tipos de datos en Fortran 90/95Hay 5 tipos de datos predefinidos llamados intrnsecos para constantes y variables Fortran.Cada uno de estos tipos de datos intrnsecos admiten varias longitudes de memoria, dependiendo de la anchura de la palabra del computador. La longitud de las variables de tipo carcter viene dada por el nmero de caracteres que tengan. Si no se especifica, las variables slo podrn tener un carcter.Fortran 90/95 permite al programador definir tipos de datos derivados, que son tipos de datos especiales para resolver problemas particulares.

  • Variable REAL y precisin Una variable declarada de tipo REAL es de 32 bits (4 bytes) por defecto24 bits de mantisa y 8 de exponente: 10-39 - 10+39 Existe DOBLE PRECISIN de 64 bits (8 bytes)53 bits de mantisa y 11 de exponente: 10-308 - 10+308Procesador 32bits

    proc. 32bproc. 64bprecisin simpleREAL*4REAL*8doble precisinREAL*8REAL*16

  • Declaracin de variablesSintaxis de declaracin explcita de tipo de variable:TIPO:: lista de variablesTIPO es cualquiera de los tipos de datos Fortran vlidoslista de variables es un conjunto de variables separadas por comas cuyos nombres son identificadores vlidos.REAL:: radio,area INTEGER:: mesas,sillas COMPLEX:: z1,z2 LOGICAL:: testea CHARACTER (len=20):: alumno1,alumno2CHARACTER*20::alumno1,alumno2CHARACTER(20)::alumno1,alumno2Fortran 90/95 permite al programador definir tipos de datos derivados, que son tipos de datos especiales para resolver problemas particulares.

  • Declaracin implicita de variablesSi una variable no ha sido definida explcitamente por una sentencia de definicin de tipo, ste ser determinado por la primera letra de su nombre:

    I, J, K, L, M, N: entera. resto de letras: real.

    IMPLICIT {NONE | TIPO (lista de letras)} IMPLICIT LOGICAL (L-P)

    IMPLICIT NONE RECOMENDADO

  • PARAMETROSSe puede declarar una variable como constante a lo largo del programa:

    TIPO, PARAMETER:: nombre=nmero

    REAL,PARAMETER:: planck=6.626E-27

    No puede reasignarse el valor de una constante = error de compilacin

  • Inicializacin de variablesvariable = valor en la parte de cdigo

    TIPO:: variable=valor al declararlaVariables CHARACTER:

    string=pepe

    Variables LOGICAL:

    test=.FALSE. (.TRUE.)El valor de una variable no inicializada no est definido en el standard de F90/95.

  • Si el tipo de la variable es diferente de la expresin_aritmtica, se produce una conversin de tipo: expresin_aritmtica es convertida al tipo de variable antes de ser asignada a variable.

    Pueden producirse problemas de truncamiento.variable = expresin_aritmticaINTEGER:: I

    I =3./2. !se asigna a I el valor 1

  • Expresiones aritmticas (I)OperadorDescripcin+Suma-Resta*Multiplicacin/Divisin**Potencia+Signo positivo-Signo negativoOperadores binariosOperadores unariosOperadores aritmticosNo se pueden escribir dos operadores seguidos.Ejemplo: la expresin a**-b es ilegal en Fortran, debe ser escrita como a**(-b)Orden de precedenciaOperador ( )**+, - (unarios)*, /+, -PrioridadMayorMenor La multiplicacin, divisin, suma y resta se evalan de izquierda a derecha. Las potencias se evalan de derecha a izquierda. Cuando existen parntesis anidados se evalan desde el ms interno hasta el ms externo.

  • Expresiones aritmticas (II)Orden de precedencia de tiposTipoCOMPLEX REALINTEGERPrioridadMayorMenor Si se mezclan en una expresin operandos de distintos tipos, el resultado se eleva a la categora del de mayor precedenciaEjemplo, sean:A=8.0 B=4.0 C=3.0 (Reales)I=8 J=4 K=3(Enteros)El resultado de:A/B 2.0 (real)J/A 0.5 (real)I/J 2(entero)B/C 1.33333... (real)A/C 2.66667 (real)J/K 1 (entero)J/I 0(entero)J/C 1.33333...(real) La divisin entera puede producir resultados no deseados, los enteros deberan ser usados nicamente para variables que sean intrnsecamente enteras, como los contadores y los subndices. Algunos nmeros reales no pueden representarse exactamente. Por ejemplo, la representacin de 1./3. puede ser 0.333333 y, como resultado, algunas cantidades que son tericamente iguales no lo son al ser evaluadas en un computador: 3.*(1./3.) = 0.999999 1.

  • Variables CHARACTERVariable_char = expresin carcter CHARACTER(LEN=3):: ext

    ext=f f__

    ext=filete fil CHARACTER(LEN=8):: a,b,c

    a=ABCDEFGHIJ ABCDEFGHb=12345678 12345678c=a(5:7) EFG_____b(7:8)=a(2:6) b(7:8)=BC b=123456BC

  • Funciones intrnsecasFortran incorpora todas las funciones matemticas (y de otros tipos). Las funciones de esas libreras se denominan funciones intrnsecas del lenguaje. funciones externas e internas pueden crearse por el propio programador para resolver problemas especficos. apndices de cualquier libro de texto Fortran. calcula un resultado nico a partir de ellos. La sintaxis general de una funcin intrnseca Fortran es:NOMBRE (lista de argumentos) Lista de argumentos es una lista de variables, constantes, expresiones, o incluso los resultados de otras funciones, separadas por comas, en nmero y tipo fijado para cada funcin intrnseca. El resultado es de un tipo tambin fijado para cada funcin intrnseca.REAL::x,yY=funcion(x)

  • http://www.nsc.liu.se/~boein/f77to90/a5.htmlFunciones intrnsecas en F90/95Ejemplos: Raz cuadrada SQRT SQRT R R Exponencil EXP EXP R R Logaritmo neperiano LOG ALOG R R Logaritmo decimal LOG10 ALOG10 R R Seno SIN SIN R R Coseno COS COS R R Tangente TAN TAN R R Arcoseno ASIN ASIN R R Arcocoseno ACOS ACOS R R Arcotangente ATAN ATAN R R Seno hiperblico SINH SINH R R Coseno hiperblico COSH COSH R R Tangente hiperblica TANH TANH R RVersiones DOUBLE PRECISION (e.g. DEXP) y COMPLEX (e.g. CEXP)

  • Funciones CHARACTER (algunas):ACHAR(I) devuelve el carcter ASCII de nmero I

    IACHAR(C) devuelve el nmero ASCII

    LEN(STRING) devuelve la longitud de STRING

    LEN_TRIM(STRING) devuelve la longitud de STRING sin contar los blancos de relleno (a la derecha)

    TRIM(STRING) devuelve la cadena quitando los blancos de relleno

    INDEX(STRING, SUBSTRING, back) devuelve la posicin inicial de SUBSTRING dentro de STRING. Si BACK es .TRUE., devuelve la ltima posicin; si no, devuelve la primera.

  • INT(X) parte entera, X=REAL, devuelve INTEGER

    MIN(A,B) devuelve el mnimo de A y B

    MAX(A,B) devuelve el mximo de A y B

    ... y muchas ms ....

  • Entrada/salida simpleREAD(*,*) A !lee del teclado !y asigna el valor a AREAD(*,*) a,b,c !lee y asigna tres entradas

    WRITE(*,*) A !escribe en pantalla AWRITE(*,*) Hola mundo.. !escribe la cadena

  • PROGRAM temp_conversion ! Purpose: ! To convert an input temperature from degrees Fahrenheit to! an output temperature in kelvins. !! Record of revisions:! Date Programmer Description of change! ==== ========== =====================! 04/03/02 -- S. J. Chapman Original code !

    IMPLICIT NONE ! Force explicit declaration of variables

    ! Data dictionary: declare variable types, definitions, & units REAL :: temp_f ! Temperature in degrees FahrenheitREAL :: temp_k ! Temperature in kelvins

    ! Prompt the user for the input temperature.WRITE (*,*) 'Enter the temperature in degrees Fahrenheit: 'READ (*,*) temp_f ! Convert to kelvins.temp_k = (5. / 9.) * (temp_f - 32.) + 273.15 ! Write out the result.WRITE (*,*) temp_f, ' degrees Fahrenheit = ', temp_k, ' kelvins' ! Finish up.END PROGRAM temp_conversion