FORTRAN 90/95 Lenguaje FORTRAN PRIMER lenguaje de Alto nivel CÁLCULO; ANÁLISIS NUMÉRICO...

22
FORTRAN 90/95 Lenguaje FORTRAN PRIMER lenguaje de Alto nivel CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation) 1954 FORTRAN II – 1958 FORTRAN IV – 1962 FORTRAN66 FORTRAN77 – 1977 en vigor! FORTRAN90 – 1990 incluye F77 FORTRAN95 – 1996 (mejoras mínimas) FORTRAN2003 – 2000/2004 F90/95

Transcript of FORTRAN 90/95 Lenguaje FORTRAN PRIMER lenguaje de Alto nivel CÁLCULO; ANÁLISIS NUMÉRICO...

Page 1: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

FORTRAN 90/95

Lenguaje FORTRAN

PRIMER lenguaje de Alto nivel CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)

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

F90/95

Page 2: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

• Es el lenguaje más utilizado en el ámbito científico

• Es el lenguaje dominante en supercomputación

• Es un lenguaje fácil de aprender y utilizar.

• Es el único lenguaje que perdura desde los años 50 hasta el

momento actual.

• Existen miles de programas de cálculo, y librerías de uso

absolutamente generalizado: •IMSL (International Mathematics and Statistical Library),

•NAG (Numerical Algorithms Group), etc.

¿Por qué el Fortran?

Page 3: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

• Compilador: traduce a código máquina

• ejecución muy rápida• ejecutable depende de la CPU (no portabilidad)

• permite OPTIMIZAR la ejecución (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

Page 4: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

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

2. Aritméticos: +,-,*,/,**

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

SENTENCIAS:

1. ejecutables2. no ejecutables3. Longitud 132 caracteres

10 output = input1+input2 ! suma

etiqueta de sentencia comentario

output = input1 + & input2

Continuación de línea

Page 5: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Estructura de un programa:

1. Sección de declaración de variables• Variables, tipo, arrays, parámetros, precisión,...

2. Sección ejecutable• El código principal, procedimientos,...

3. Terminación

PROGRAM myprogram

... ...

END PROGRAM myprogram

Page 6: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Identificadores

Es 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, _)

Válidos: pepe, JUAN, PI, x0, x1, z3rt_1234

No válidos: 3luis, fifo$, R2-D2, obi/uan/kenobi

Page 7: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Tipos de datos en Fortran 90/95Hay 5 tipos de datos predefinidos llamados intrínsecos para constantes y variables Fortran.Cada uno de estos tipos de datos intrínsecos admiten varias longitudes de memoria, dependiendo de la anchura de la palabra del computador.

Tipo Denominación en FortranBytes ocupados

Intervalo de valores

Entero INTEGER 4-232-1=-2147483648232-1-1=2147483647

Real REAL 4

-3.402823 10+39

-1.175495 10-39

y1.175495 10-39

3.402823 10+39

Complejo COMPLEX 8 Igual que REAL

Lógico LOGICAL 4 .TRUE. o .FALSE.

CarácterCHARACTER [{(len=nº caract de variab)| (nº caract de variab)}]

longitudConjunto de caracteres ASCII de 8-bits

La longitud de las variables de tipo carácter viene dada por el número de caracteres que tengan. Si no se especifica, las variables sólo podrán tener un carácter.Fortran 90/95 permite al programador definir tipos de datos derivados, que son tipos de datos especiales para resolver problemas particulares.

Page 8: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Variable REAL y precisión

• Una variable declarada de tipo REAL es de 32 bits (4 bytes) por defecto

24 bits de mantisa y 8 de exponente: 10-39 - 10+39

• Existe DOBLE PRECISIÓN de 64 bits (8 bytes)

53 bits de mantisa y 11 de exponente: 10-308 - 10+308

Procesador 32bits

proc. 32b proc. 64b

precisión simple REAL*4 REAL*8doble precisión REAL*8 REAL*16

Page 9: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Declaración de variables

Sintaxis de declaración explícita de tipo de variable:

TIPO:: lista de variables

TIPO es cualquiera de los tipos de datos Fortran válidos

lista de variables es un conjunto de variables separadas por comas cuyos nombres son identificadores válidos.

REAL:: radio,area

INTEGER:: mesas,sillas

COMPLEX:: z1,z2

LOGICAL:: testea

CHARACTER (len=20):: alumno1,alumno2

CHARACTER*20::alumno1,alumno2

CHARACTER(20)::alumno1,alumno2Fortran 90/95 permite al programador definir tipos de datos derivados, que son tipos de datos especiales para resolver problemas particulares.

Page 10: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Declaración implicita de variables

Si una variable no ha sido definida explícitamente por una sentencia de definición 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

Page 11: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

PARAMETROS

Se puede declarar una “variable” como constante a lo largo del programa:

TIPO, PARAMETER:: nombre=número

REAL,PARAMETER:: planck=6.626E-27

• No puede reasignarse el valor de una constante = error de compilación

Page 12: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Inicialización de variables

variable = valor en la parte de código

TIPO:: variable=valor al declararla

Variables CHARACTER:

• string=‘pepe’

Variables LOGICAL:

• test=.FALSE. (.TRUE.)

El valor de una variable no inicializada no está definido en el standard de F90/95.

Page 13: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Si el tipo de la variable es diferente de la expresión_aritmética, se produce una conversión de tipo: expresión_aritmética es convertida al tipo de variable antes de ser asignada a variable.

Pueden producirse problemas de truncamiento.

variable = expresión_aritmética

INTEGER:: I

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

Page 14: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Expresiones aritméticas (I)Operador Descripción

+ Suma

- Resta

* Multiplicación

/ División

** Potencia

+ Signo positivo

- Signo negativo

Operadores binarios

Operadores unarios

Operadores aritméticos

No se pueden escribir dos operadores seguidos.Ejemplo: la expresión a**-b es ilegal en Fortran, debe ser escrita como a**(-b)

Orden de precedencia

Operador

( )

**

+, - (unarios)

*, /

+, -

Prioridad

Mayor

Menor

• La multiplicación, división, suma y resta se evalúan de izquierda a derecha.• Las potencias se evalúan de derecha a izquierda. • Cuando existen paréntesis anidados se evalúan desde el más interno hasta el más externo.

Page 15: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Expresiones aritméticas (II)Orden de

precedencia de tipos

Tipo

COMPLEX

REAL

INTEGERPrioridad

Mayor

Menor

• Si se mezclan en una expresión operandos de distintos tipos, el resultado se eleva a la categoría del de mayor precedencia

Ejemplo, 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 división entera puede producir resultados no deseados, los enteros deberían ser usados únicamente para variables que sean intrínsecamente enteras, como los contadores y los subíndices.• Algunos números reales no pueden representarse exactamente. Por ejemplo, la representación de 1./3. puede ser 0.333333 y, como resultado, algunas cantidades que son teóricamente iguales no lo son al ser evaluadas en un computador: 3.*(1./3.) = 0.999999 ≠ 1.

Page 16: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Variables CHARACTER

Variable_char = expresión carácter

• 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

• concatenaciónc=a(1:3)//b(4:5) ABC45___

Page 17: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Funciones intrínsecas•Fortran incorpora todas las funciones matemáticas (y de otros tipos). •Las funciones de esas librerías se denominan funciones intrínsecas del lenguaje.• funciones externas e internas pueden crearse por el propio programador para resolver problemas específicos.• apéndices de cualquier libro de texto Fortran.• calcula un resultado único a partir de ellos. • La sintaxis general de una función intrínseca 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 número y tipo fijado para cada función intrínseca.

• El resultado es de un tipo también fijado para cada función intrínseca.

REAL::x,yY=funcion(x)

Page 18: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

http://www.nsc.liu.se/~boein/f77to90/a5.html

Funciones intrínsecas en F90/95

Ejemplos:

Raíz 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 hiperbólico SINH SINH R R Coseno hiperbólico COSH COSH R R Tangente hiperbólica TANH TANH R R

Versiones DOUBLE PRECISION (e.g. DEXP) y COMPLEX (e.g. CEXP)

Page 19: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Funciones CHARACTER (algunas):

ACHAR(I) devuelve el carácter ASCII de número I

IACHAR(C) devuelve el número 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 posición inicial de SUBSTRING dentro de STRING. Si BACK es .TRUE., devuelve la última posición; si no, devuelve la primera.

Page 20: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

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

MIN(A,B) devuelve el mínimo de A y B

MAX(A,B) devuelve el máximo de A y B

... y muchas más ....

Page 21: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

Entrada/salida simple

READ(*,*) 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

Page 22: FORTRAN 90/95 Lenguaje FORTRAN  PRIMER lenguaje de Alto nivel  CÁLCULO; ANÁLISIS NUMÉRICO (FORmula TRANslation)  1954  FORTRAN II – 1958  FORTRAN.

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