fortran 90 danilo ueno takahagi. breve histórico da linguagem - a linguagem fortan foi a primeira...

Post on 17-Apr-2015

114 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

FORTRAN 90FORTRAN 90

Danilo Ueno Takahagi

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;

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;

Itens Fundamentais:Itens Fundamentais:

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

Tipos de DadoTipos de Dado

INTEGER;REAL;COMPLEX;LOGICAL;CHARACTER.

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.

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

Exemplos:

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

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

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.

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

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

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

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

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

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)

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.

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

Estruturas Condicionais:Estruturas Condicionais:

Estrutura condicional simplesComando IF lógicoEstrutura condicional compostaEstrutura CASE

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

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

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

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

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

CASE (case selecionado)

bloco de comandos

CASE (case selecionado)

bloco de comandos

.

.

END SELECT

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

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

DO loops controlados DO loops flexíveisDO WHILE

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

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

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.

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

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:

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);

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.

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

NULLIFY(lista-de-ponteiros)

EXEMPLOS:

NULLIFY(p)

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

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

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

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”

FIMFIM

top related