36
FORTRAN 90 FORTRAN 90 Danilo Ueno Takahagi

FORTRAN90_1 (1)

Embed Size (px)

Citation preview

Page 1: FORTRAN90_1 (1)

FORTRAN 90FORTRAN 90

Danilo Ueno Takahagi

Page 2: FORTRAN90_1 (1)

Breve Histórico da LinguagemBreve Histórico da Linguagem- A linguagem FORTAN foi a primeira linguagem de alto nível usada para programação de computadores, proposta por J. Backus, em 1953;

- primeiro compilador para IBM 704 em 1957;

- criação de FORTRAN 90 devido a pouca capacidade do FORTRAN 77 em relação a C, C++,ADA;

Page 3: FORTRAN90_1 (1)

Objetivos:Objetivos:

FORmula TRANslation;Facilidade de transcrição de fórmulas

matemáticas para serem usadas nos computadores;

Direcionada para aplicações em matemática, engenharia e análises científicas;

Page 4: FORTRAN90_1 (1)

Itens Fundamentais:Itens Fundamentais:

Tipos de DadoVariáveisComando de AtribuiçãoExpressões AritméticasExpressões LógicasEntrada e SaídaEstrutura CondicionalEstrutura de Repetição

Page 5: FORTRAN90_1 (1)

Tipos de DadoTipos de Dado

INTEGER;REAL;COMPLEX;LOGICAL;CHARACTER.

Page 6: FORTRAN90_1 (1)

Variáveis:Variáveis:1 a 31 caracteres;1º caractere deve ser uma letra;Apenas letras, undescores, e dígitos são

permitidos;Não são sensíveis a maiúsculo ou

minúsculo;Podem ser utilizadas palavras chaves;Podem ser utilizadas nomes de

procedimentos intrínsecos.

Page 7: FORTRAN90_1 (1)

Declaração de Variáveis:Declaração de Variáveis:

Exemplos:

character*3 :: preal :: rcomplex :: c logical :: l

nome-do-tipo :: lista-de-identificadores

Page 8: FORTRAN90_1 (1)

Comando de AtribuiçãoComando de AtribuiçãoIdentificador = expressão

- Exemplos: -Variáveis inicializadas:

i = 2 integer :: count = 0

r = 0.0 real :: sum = 0.0

c = “ABC” character*4 :: c = “(cr)”

l = .TRUE. Logical :: l = .FALSE.

Page 9: FORTRAN90_1 (1)

Expressões Aritméticas:Expressões Aritméticas:OPERADOR OPERAÇÃO

+ Adição

- Subtração

* Multiplicação

/ Divisão

** Potenciação

prioridade operação

1ª Potenciação

2ª Multiplicação,divisão

3ª Adição,subtração

Page 10: FORTRAN90_1 (1)

Algumas Funções Intrínsecas:Algumas Funções Intrínsecas:Nome Definição Tipo da função

ALOG 10(X) logaritmo na base 10 de X Tipo do argumento de X

EXP (X) o Nº e elevado a X Tipo do argumento de X

ABS (X) valor absoluto de X Tipo do argumento de X

BIT_SIZE(I) Retorna o número de bits do inteiro i

Inteiro

INT (A,Kind) conversão de nº. não real para inteiro, truncando

Inteiro

MAX (A1,A2,A3,...) Valor máximo da seqüência Tipo do argumento

Page 11: FORTRAN90_1 (1)

Expressões Lógicas:Expressões Lógicas:Operador

(Fortran 90)

Operador

(Fortran 77)

Significado

< .LT. Less than

<= .LE. Less than or equal to

= = .EQ. Equal to

/= .NE. Not Equal to

> .GT. Greater than

>= .GE. Greater than or equal to

Operadores lógicos: .AND. Para conjunção

.OR. Para disjunção

.NOT. Para a negação

Page 12: FORTRAN90_1 (1)

Entrada e Saída:Entrada e Saída:

Externo Memória do Computador

INPUT teclado converte forma interna integer array arq disco real fita magnética character

OUTPUT monitor converte forma externa integer array

impressora real fita magnética character

Page 13: FORTRAN90_1 (1)

Comandos de Entrada e Saída:Comandos de Entrada e Saída:READ (cilist) input_listWRITE(cilist) output_list

cilist – control information list

Composto pelos especificadores do comando, como a unit (dispositivo de entrada) e a formatação dos dados.

Default – unit 5, para entrada de dados

unit 6, para saída de dados

Page 14: FORTRAN90_1 (1)

Exemplos:Exemplos:READ (unit = 5,fmt = ´(3F6.2)´) x,y,zREAD (unit = *,fmt = ´(5F6.3)´) p,q,r,s,tWRITE (unit = 6,fmt = 200) x

200 FORMAT (F5.2)• WRITE (unit = *,fmt = 201) x/y

201 FORMAT (F5.2)

Page 15: FORTRAN90_1 (1)

Descritores de edição:Descritores de edição:

I – edita tipo inteiroF ou E – edita tipo realA – edita tipo caractereL – edita tipo lógicoX,T,TL,TR – usado para controlar onde o dado

deve ser lido numa seqüência de entrada e onde deve ser colocado na seqüência de saída.

Page 16: FORTRAN90_1 (1)

Exemplos de formatações:Exemplos de formatações:Linha de entrada de dado: 123456789- READ ´(4X,I5)´, num 56789 será armazenado em num- READ ´(T4,I2,T8,I2,T2,I4)´, x,y,z x = 45 y = 89 z = 2345- READ´(F3.1,F2.2,F3.0,TL6,F4.2)´,r1,r2,r3,r4 r1 = 12.3 r2 = 0.45 r3 = 678.0 r4 = 34.56

Page 17: FORTRAN90_1 (1)

Estruturas Condicionais:Estruturas Condicionais:

Estrutura condicional simplesComando IF lógicoEstrutura condicional compostaEstrutura CASE

Page 18: FORTRAN90_1 (1)

Estrutura condicional simples:Estrutura condicional simples:

IF,THEN e END IF – palavras chaves

Condição B – expressão lógica

IF (condição B) THEN seqüência de A comandosEND IF

Page 19: FORTRAN90_1 (1)

Comando IF lógico:Comando IF lógico:

IF (condição B) comando A

IF – palavra chave

Condição B – é uma expressão lógica

Comando A – qualquer comando, exceto um comando DO ou outro comando IF

Page 20: FORTRAN90_1 (1)

Estrutura Condicional Composta:Estrutura Condicional Composta:

IF (condição B) THEN

seqüência de comandos

ELSE

seqüência B de comandos

END IF

IF,THEN,ELSE e END IF – palavras chaves

Condição B – uma expressão lógica

Page 21: FORTRAN90_1 (1)

PROGRAM quadratic

REAL, PARAMETER :: delta=0.0

REAL :: a,b,c,d,sqrt_d,x1,x2

PRINT *,"Digite os tres coeficientes a,b,and c"

PRINT * !para pular uma linha

READ *,a,b,c

d=b**2-4*a*c

IF (d>delta) THEN

sqrt_d = SQRT(d)

x1 = (-b+sqrt_d)/(a+a)

x2 = (-b-sqrt_d)/(a+a)

PRINT *,"A equacao tem duas raizes reais: ",x1," e ",x2

ELSE IF (d==delta) THEN

x1 = -b/(a+a)

PRINT *,"A equacao tem uma raiz real: ",x1

ELSE

PRINT *,"A equacao nao tem raizes reais"

END IF

END PROGRAM quadratic

Page 22: FORTRAN90_1 (1)

Estrutura CASE:Estrutura CASE:SELECT CASE (expressão case)

CASE (case selecionado)

bloco de comandos

CASE (case selecionado)

bloco de comandos

.

.

END SELECT

Page 23: FORTRAN90_1 (1)

Exemplo da estrutura CASE:Exemplo da estrutura CASE:! Programa que calcula qual estação do ano pertence o mês

SELECT CASE (mes)

CASE (“08”:”10”)

PRINT *,date, “esta na primavera”

CASE ( “11”,”12”,”01”)

PRINT *,date, “esta no verão”

CASE (“02”,”03”,”04”)

PRINT *,date, “esta no outono”

CASE (“05”,”06”,”07”)

PRINT *,date, “esta no inverno”

END SELECT

Page 24: FORTRAN90_1 (1)

Estrutura de Repetição:Estrutura de Repetição:

DO loops controlados DO loops flexíveisDO WHILE

Page 25: FORTRAN90_1 (1)

Estrutura DO:Estrutura DO:DO count = initial, final, inc

...

bloco de comandos

...

END DO

DO e END DO – palavras chaves

count – variável contadora

initial – valor inicial

final – valor final

inc - incremento

Page 26: FORTRAN90_1 (1)

Exemplo da Estrutura DO:Exemplo da Estrutura DO:estrutura DO contador de iteração valores da

variável

DO i = 1,10 10 1,2,3,4,5,6,7,8,9,10

DO j = 20,50,5 7 20,25,30,35,40,45,50

DO x = -20,20,6 7 -20,-14,-8,-2,4,10,16

DO m = 20,-20,-6 7 20,14,8,2,-4,-10,-16

Page 27: FORTRAN90_1 (1)

Estrutura DO mais flexível:Estrutura DO mais flexível:

DO count = 1,max_iterations

...

IF (term < epsilon) EXIT

...

END DO

...

OBS: depois de obedecer o comando EXIT ou após obedecer a quantidade máxima de iterações, a execução do programa continua a partir do próximo comando.

Page 28: FORTRAN90_1 (1)

Estrutura DO WHILE:Estrutura DO WHILE:

DO WHILE (condição A) ... bloco de comandos ...END DO

DO, WHILE, END DO - palavras chaves

Condição A – expressão lógica

Page 29: FORTRAN90_1 (1)

Ponteiros em FORTRAN 90:Ponteiros em FORTRAN 90:nome-do-tipo, POINTER :: lista-de-identificadores

Exemplos:

REAL, POINTER :: p,q,r,s

INTEGER, POINTER :: i,j,k

nome-do-tipo, TARGET :: lista-de-identificadores

O objeto apontado pelo ponteiro deve ter a seguinte declaração:

Page 30: FORTRAN90_1 (1)

Exemplo1:Exemplo1:REAL :: aREAL, TARGET :: bREAL, POINTER :: pINTEGER, POINTER :: q

- p pode apontar para a variável b (real, target);- p não pode apontar para a (não tem target);- q não pode apontar para b (tipos diferentes);

Page 31: FORTRAN90_1 (1)

Exemplo2:Exemplo2:REAL, POINTER :: u,v,w

REAL, TARGET :: x

u => x

v => u

u => w

u aponta para x;

v aponta o que x aponta (ou seja, x);

u tem associação indefinida.

Page 32: FORTRAN90_1 (1)

Dissociação de ponteiros: Dissociação de ponteiros:

NULLIFY(lista-de-ponteiros)

EXEMPLOS:

NULLIFY(p)

NULLIFY(a,b,c,q,r)

Page 33: FORTRAN90_1 (1)

Funções para ponteiros:Funções para ponteiros:ASSOCIATED(ponteiro)- verifica se o ponteiro entre parênteses possui

alguma associação (retorna TRUE ou FALSE)

ALLOCATE(ponteiro)- aloca espaço na memória que fica associado ao

ponteiro

DEALLOCATE(ponteiro)- desaloca o espaço na memória

Page 34: FORTRAN90_1 (1)

PROGRAM pointer

TYPE :: cadastro

CHARACTER(10) :: descricao

INTEGER :: numero

END TYPE cadastro

TYPE (cadastro), POINTER :: ptr_1, ptr_2

ALLOCATE (ptr_1) !Cria um local para armazenar o tipo derivado

!cadastro e associa ptr_1 com esse local

ptr_1%descricao = 'carlos' !Armazena valores na estrutura criada

ptr_1%numero = 1234

PRINT "(2A,I6)","ptr_1 = ",ptr_1

ptr_2 => ptr_1 !Associa ptr_2 com o que o ptr_1 apontava

NULLIFY(ptr_1) !faz a dissociação

IF (.NOT. ASSOCIATED (ptr_1)) THEN

PRINT "(A)","ptr_1 esta dissociado"

END IF

PRINT "(2A,I6)","ptr_2 = ",ptr_2

DEALLOCATE(ptr_2) !Desaloca o espaço da memória e dissocia o ptr_2

End Program pointer

Page 35: FORTRAN90_1 (1)

Bibliografia:Bibliografia:

1. Professores da UFMG - “Fortran Estruturado”;

2. REDWINE,C. - “Upgrading to Fortran 90”;

3. ELLIS,T.M.R.; PHILIPS.I.R.; LAHEY,T.M. - “Fortran 90 Programing”

Page 36: FORTRAN90_1 (1)

FIMFIM