FORTRAN 90
Danilo Ueno Takahagi
Breve 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:

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:

Tipos de Dado
 Variáveis
 Comando de Atribuição
 Expressões Aritméticas
 Expressões Lógicas
 Entrada e Saída
 Estrutura Condicional
 Estrutura de Repetição
Tipos de Dado

INTEGER;
 REAL;
 COMPLEX;
 LOGICAL;
 CHARACTER.
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:
nome-do-tipo :: lista-de-identificadores

Exemplos:
character*3 :: p
real :: r
complex :: c
logical :: l
Comando de Atribuição
Identificador = 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:
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:
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:
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:
Externo
Memória do Computador
INPUT
teclado
converte forma interna
arq disco

fita magnética
integer
array
real
character
OUTPUT
monitor
converte forma externa
impressora

fita magnética
integer
array
real
character
Comandos de Entrada e Saída:

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
formatação dos dados.
Default – unit 5, para entrada de dados
unit 6, para saída 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 edição:
I – edita tipo inteiro
 F ou E – edita tipo real
 A – edita tipo caractere
 L – edita tipo lógico
 X,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:
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 lógico
 Estrutura condicional composta
 Estrutura CASE
Estrutura condicional simples:
IF (condição B) THEN
seqüência de A comandos
END IF
IF,THEN e END IF – palavras chaves
Condição B – expressão lógica
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:
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:
SELECT CASE (expressão case)
CASE (case selecionado)
bloco de comandos
CASE (case selecionado)
bloco de comandos
.
.
END SELECT
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:

DO loops controlados
 DO loops flexíveis
 DO WHILE
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:
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:
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:
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:
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
declaração:
nome-do-tipo, TARGET :: lista-de-identificadores
Exemplo1:
REAL :: a
REAL, TARGET :: b
REAL, POINTER :: p
INTEGER, 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:
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:
NULLIFY(lista-de-ponteiros)
EXEMPLOS:
NULLIFY(p)
NULLIFY(a,b,c,q,r)
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:
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
Download

fortran 90 - 1