Você está na página 1de 36

FORTRAN 90

Danilo Ueno Takahagi

Breve Histrico da Linguagem


- A linguagem FORTAN foi a primeira
linguagem de alto nvel usada para
programao de computadores, proposta
por J. Backus, em 1953;
- primeiro compilador para IBM 704 em
1957;
- criao de FORTRAN 90 devido a pouca
capacidade do FORTRAN 77 em relao a
C, C++,ADA;

Objetivos:
FORmula

TRANslation;
Facilidade de transcrio de frmulas
matemticas para serem usadas nos
computadores;
Direcionada para aplicaes em
matemtica, engenharia e anlises
cientficas;

Itens Fundamentais:
Tipos

de Dado
Variveis
Comando de Atribuio
Expresses Aritmticas
Expresses Lgicas
Entrada e Sada
Estrutura Condicional
Estrutura de Repetio

Tipos de Dado
INTEGER;
REAL;
COMPLEX;
LOGICAL;
CHARACTER.

Variveis:
1

a 31 caracteres;
1 caractere deve ser uma letra;
Apenas letras, undescores, e dgitos so
permitidos;
No so sensveis a maisculo ou
minsculo;
Podem ser utilizadas palavras chaves;
Podem ser utilizadas nomes de
procedimentos intrnsecos.

Declarao de Variveis:
nome-do-tipo :: lista-de-identificadores
Exemplos:

character*3 :: p
real :: r
complex :: c
logical :: l

Comando de Atribuio
Identificador = expresso

- Exemplos:

-Variveis inicializadas:

i =2

integer :: count = 0

r = 0.0

real :: sum = 0.0

c = ABC

character*4 :: c = (cr)

l = .TRUE.

Logical :: l = .FALSE.

Expresses Aritmticas:
OPERADOR

OPERAO

Adio

Subtrao

Multiplicao

Diviso

**

Potenciao

prioridade

operao

Potenciao

Multiplicao,diviso

Adio,subtrao

Algumas Funes Intrnsecas:


Nome

Definio

Tipo da funo

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 nmero de bits do


inteiro i

Inteiro

INT (A,Kind)

converso de n. no real para


inteiro, truncando

Inteiro

MAX (A1,A2,A3,...)

Valor mximo da seqncia

Tipo do argumento

Expresses Lgicas:
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 lgicos:

.AND.

Para conjuno

.OR.

Para disjuno

.NOT.

Para a negao

Entrada e Sada:
Externo

Memria do Computador

INPUT
teclado
converte forma interna
arq disco

fita magntica

integer
array
real
character

OUTPUT
monitor
converte forma externa
impressora

fita magntica

integer
array
real
character

Comandos de Entrada e Sada:


READ

(cilist) input_list
WRITE(cilist) output_list
cilist control information list
Composto pelos especificadores do comando,
como a unit (dispositivo de entrada) e a
formatao dos dados.
Default unit 5, para entrada de dados
unit 6, para sada de dados

Exemplos:
READ

(unit = 5,fmt = (3F6.2)) x,y,z


READ (unit = *,fmt = (5F6.3)) p,q,r,s,t
WRITE (unit = 6,fmt = 200) x
200 FORMAT (F5.2)
WRITE (unit = *,fmt = 201) x/y
201 FORMAT (F5.2)

Descritores de edio:
I

edita tipo inteiro


F ou E edita tipo real
A edita tipo caractere
L edita tipo lgico
X,T,TL,TR usado para controlar onde o dado
deve ser lido numa seqncia de entrada e onde
deve ser colocado na seqncia de sada.

Exemplos de formataes:
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:
Estrutura

condicional simples
Comando IF lgico
Estrutura condicional composta
Estrutura CASE

Estrutura condicional simples:


IF (condio B) THEN
seqncia de A comandos
END IF
IF,THEN e END IF palavras chaves
Condio B expresso lgica

Comando IF lgico:
IF (condio B) comando A

IF palavra chave
Condio B uma expresso lgica
Comando A qualquer comando, exceto um
comando DO ou outro comando IF

Estrutura Condicional Composta:


IF (condio B) THEN
seqncia de comandos
ELSE
seqncia B de comandos
END IF
IF,THEN,ELSE e END IF palavras chaves
Condio B uma expresso lgica

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:
SELECT CASE (expresso case)
CASE (case selecionado)
bloco de comandos
CASE (case selecionado)
bloco de comandos
.
.
END SELECT

Exemplo da estrutura CASE:


! Programa que calcula qual estao do ano pertence o ms
SELECT CASE (mes)
CASE (08:10)
PRINT *,date, esta na primavera
CASE ( 11,12,01)
PRINT *,date, esta no vero
CASE (02,03,04)
PRINT *,date, esta no outono
CASE (05,06,07)
PRINT *,date, esta no inverno
END SELECT

Estrutura de Repetio:
DO

loops controlados
DO loops flexveis
DO WHILE

Estrutura DO:
DO count = initial, final, inc
...
bloco de comandos
...
END DO
DO e END DO palavras chaves
count varivel contadora
initial valor inicial
final valor final
inc - incremento

Exemplo da Estrutura DO:


estrutura DO

contador de iterao

valores da
varivel

DO i = 1,10

10

1,2,3,4,5,6,7,8,9,10

DO j = 20,50,5

20,25,30,35,40,45,50

DO x = -20,20,6

-20,-14,-8,-2,4,10,16

DO m = 20,-20,-6

20,14,8,2,-4,-10,-16

Estrutura DO mais flexvel:


DO count = 1,max_iterations
...
IF (term < epsilon) EXIT
...
END DO
...
OBS: depois de obedecer o comando EXIT ou aps
obedecer a quantidade mxima de iteraes, a
execuo do programa continua a partir do prximo
comando.

Estrutura DO WHILE:
DO WHILE (condio A)
...
bloco de comandos
...
END DO

DO, WHILE, END DO - palavras chaves


Condio A expresso lgica

Ponteiros em FORTRAN 90:


nome-do-tipo, POINTER :: lista-de-identificadores
Exemplos:
REAL, POINTER :: p,q,r,s
INTEGER, POINTER :: i,j,k
O objeto apontado pelo ponteiro deve ter a seguinte
declarao:
nome-do-tipo, TARGET :: lista-de-identificadores

Exemplo1:
REAL :: a
REAL, TARGET :: b
REAL, POINTER :: p
INTEGER, POINTER :: q
-

p pode apontar para a varivel b (real, target);


p no pode apontar para a (no tem target);
q no pode apontar para b (tipos diferentes);

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 associao indefinida.

Dissociao de ponteiros:
NULLIFY(lista-de-ponteiros)
EXEMPLOS:

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

Funes para ponteiros:


ASSOCIATED(ponteiro)
- verifica se o ponteiro entre parnteses possui
alguma associao (retorna TRUE ou FALSE)
ALLOCATE(ponteiro)
- aloca espao na memria que fica associado ao
ponteiro
DEALLOCATE(ponteiro)
- desaloca o espao na memria

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 dissociao
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 espao da memria e dissocia o ptr_2
End Program pointer

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

FIM