Académique Documents
Professionnel Documents
Culture Documents
1. Introduo
2. Formatao
F90 O programa pode ser escrito em qualquer posio, desde que o modo "free
form" esteja ativado. Alguns pontos devem ser observados para este formato: as
linhas de continuao so indicadas pelo smbolo '&' no fim da sentena, e o que
estiver na linha abaixo ser tomado como continuao. permitido a insero de
comentrios aps o '&';os rtulos dever ser os primeiros caracteres da linha, e
podem estar em qualquer coluna.
3. Conceitos Bsicos
2. Constantes:
Tipos de Variveis:
COMPLEX*8 ou COMPLEX
Preciso dupla at 15 casas decimais:
COMPLEX*16
Os valores que um complexo pode assumir so os mesmos que os reais.
Alfanumricas
(CHARACTER):
CHARACTER NOME*w
Onde w representa o nmero mximo de caracteres que a varivel pode conter
dentro do programa.
Ou CHARACTER *wvar1,var2
(var1 e var2 possuem o mesmo tamanho w)
Ou CHARACTER (LEN = w) var1, (LEN=w2) var2
(var1 tem tamanho w e var2 tamanho w2)
Lgicas (LOGICAL):
LOGICAL NOME
Podem assumir os valores. TRUE. (VERDADEIRO) ou. FALSE.
(FALSO) Ou somente T e F
Atribuio
Identificador = Expresso
Operadores Literais
a = 'tele'
b = 'visao'
Operadores Aritmticos
+ + soma
- - Subtrao
* Multiplicao
/ Diviso
** ap Potenciao
Quando uma varivel inteira recebe o resultado de uma diviso com resto, este
resto desprezado, ou seja, o valor truncado.
C = A**2 + B**2
D = E**(1/2)
Operadores Relacionais
.EQ. = IGUAL A
.NE. DIFERENTE DE
Operadores Lgicos
So usados quando necessria mais de uma condio relacional ou quando
preciso inverter seu resultado.
FORTRAN Significado
.AND. Juno
.OR. Disjuno
.NOT. Negao
Prioridade
Operador Prioridade
** 1
* 2
/ 2
+ 3
- 3
.EQ. 4
.NE. 4
.GT. 4
.GE. 4
.LT. 4
.LE. 4
.NOT. 5
.AND. 6
.OR. 7
6. Funes Intrnsecas
Funes Trigonomtricas
Outras Funes
7. Funes e Sub-rotinas
Funes
Chamada:
Definio:
function nome_da_funo(lista_de_parmetros)
seqncia de comandos
return
end
A palavra chave 'return' opcional. Ela indica que o comando deve retornar ao
programa principal ou funo ou subrotina que a chamou.
nome_da_funo = expresso
Exemplo:
volume = gas_ideal(T,P,3)
function gas_ideal(temp,press,n_mols)
implicit none
real temp,press,n_mols,gas_ideal
gas_ideal= n_mols*8.314*temp/press
return
end
Sub-rotinas
Chamada:
Definio:
seqncia de comandos
return
end
8. Leitura e Impresso
Na maior parte dos programas preciso haver uma interao entre o programa e
o usurio, essa interao pode ser feita em FORTRAN pelos comandos de leitura
e escrita de dados. Esses comandos na sua forma mais simplificada possuem a
seguinte estrutura:
Leitura :
Impresso:
Onde lista de parmetros representa os dados que sero impressos, e devem vir
separados por vrgula. Podendo conter variveis ou expresses alfanumricas,
estas ultimas devem vir entre apstrofos ' '. Unidade representa a unidade onde os
dados sero impressos ou de onde sero lidos. Formato pode conter uma lista de
formatos de impresso (mostrado a seguir), um rtulo que indique um comando
'format', que contenha alista de formatos ou o smbolo '*' que indica impresso ou
leitura de forma livre.
Na leitura os dados devem vir separados por espaos ou vir na linha seguinte.
Caso se tenha mais dados em uma linha do que os que sero lidos por um
comando 'read' eles sero desprezados, inclusive pelo prximo comando 'read'.
Na escrita os dados viro um aps o outro, separados por espaos (no casa de
'strings' vero sem espao entre elas), ou na linha seguinte quando no houver
mais espao. O prximo comando 'write' ou 'print' comear a escrever na linha
seguinte.
F90 para que se leia ou escreva dados na mesma linha mesmo aps mudar o
comando pode-se usar a opo 'advance='advance'' no comando anterior. Onde
advance pode ser 'yes' ou 'no' e indica se o comando deve ou no avanar
automaticamente para a prxima linha. So usados somente nos comandos 'read'
e 'write' onde a opo formato no seja livre.
2 format(a)
imprime: Engenharia Quimica
9. Formatos
Os formatos servem para que os dados sejam impressos ou lidos de uma forma
especifica determinado pelo programador. Os formatos so compostos por uma
seqncia de especificaes que determinaro como os dados sero
processados. Cada uma dessas especificaes deve vir separada por vrgulas.
Pode-se ainda imprimir constantes numricas e alfanumricas, sendo que esta
ultima deve vir entre apstrofos ' '. O uso do '*' no lugar do formato indica que
todos os dados sero impresso de forma livre, com o nmero de casas
especificadas pelo prprio compilador. um recurso til para se evitar erros.
Quando mais de um dado usar a mesma especificao, ela pode ser feita da
seguinte forma: nespecificao1, n2especificao2 ou n(especificao1,
especificao2,...), onde n e n2 representam o nmero de vezes que a seqncia
deve se repetir.
WIN o formato pode vir entre apstrofos e parnteses '(esp.1, esp2,..)', dentro do
prprio comando de impresso ou leitura.
Formato Uso
Iw[.m] Valores Inteiros
Fw.d Valores Reais
Ew.d[Ee] Valores Reais com expoente
Gw.d[Ee] Mesmo que Iw[.m], Ew.d[Ee], Lw e A[w]
Dw.d Valores Reais de Dupla Preciso
Lw Valores Lgicos
A[w] Seqncia de Caracteres
WIN Zw_hexedit Valores Hexadecimais
F90 Bw[.m] Valores Binrios
F90 Ow[.m] Valores Octadecimais
F90 ENw.d[Ee] Valores Reais em Notao de Engenharia
F90 ESw.d[Ee] Valores Reais em Notao Cientifica
O ponto decimal, o 'e' do expoente e o sinal '-' devem ser contados ao se dar o
tamanho do campo ('w'). Ao ler um dado que no possui ponto decimal e no seu
formato esperado um, o compilador ler este dado como se l houvesse um
ponto.
12345
read (*,'(f5.3)') a => a = 12.345
12.345
read (*,'(f5.4)') a => a = 12.345
A notao com zeros 'm' s vlida quando m maior que o nmero de casas
que o nmero ocuparia no formato livre.
a = 555
print '(i5.4)',a => 0555
Nas notaes com expoente (ENw.d[Ee], ESw.d[Ee], ...) no se pode omitir o 'E'
ou 'e'. Sempre que houver este termo, a parte exponencial vai existir independente
do seu valor.
a = 12.345
b = 12345.789e6
Caso as strings sejam maiores que o espao reservado a elas, sero tomados
apenas os w primeiros caracteres. Se forem menores, elas sero alinhadas a
direita e os outros espaos deixados em branco.
F90 os valores dos campos podem ser variveis desde que venham entre
'<var1>'. No valido para 'print'.
b = 'FORTRAN'
write (*,'(a<a>)') b
pi = 3.1416
print '(1x,E7.3e2)', pi => *******
print '(1x,E8.3e2)', pi => .314E+01
Formato Uso
string Transmite uma string para a sada
F90 Q A varivel recebe o nmero de espaos que o valor ocupa
nH Transmite os prximos n caracteres para a sada
Tc Move o ponto de leitura ou escrita para a posio c
TLc Move o ponto de leitura ou escrita c posies esquerda
TRc Move o ponto de leitura ou escrita c posies direita
nX Deixa n posies em branco
SP Escreve o sinal '+' onde ele opcional
SS Omite o sinal '+' onde ele opcional
S Retorna ou padro 'ss'
/ Muda de linha
WIN \ Comea a escrever no ponto onde a ultima escrita parou
WIN $ Comea a escrever no ponto onde a ultima escrita parou
: Termina a impresso se no houver mais itens na lista
kP O nmero multiplicado por 10 elevado -k (se o nmero j
possuir expoente no h efeito)
BN Ignora os espaos em branco
BZ Transforma os espaos em branco em zeros
real a, b
character dia*20
a = 23.99
b = 55.8e-3
dia = 'Segunda-feira'
write (*,'(5x,sp,e10.3e2,2x,en12.3e3)') a, b
+.240E+02 +55.800E-003
hoje e Segunda-
10. Arquivos
open (unidade,file='nome.ext')
Outras opes para abertura e fechamento de arquivos podem ser encontradas no
Apndice B.
Onde unidade deve ser um inteiro maior ou igual a zero, e uma referencia a este
arquivo. O nmero da unidade deve vir no comando 'read' ou 'write' indicando que
os dados sero retirados ou colocados neta unidade. A disposio dos dados em
arquivos so as mesmas utilizadas nas unidades de entrada e sada padro (Item
8 Primeira Parte), com uma nica diferena, as strings devem vir entre apstrofos '
'. A abertura do arquivo pode ser feita em qualquer parte do programa (inclusive
dentro de funes e sub-rotinas), desde que venha antes de um comando que o
utilize.
Um arquivo pode tambm ser fechado, isto far com que o FORTRAN coloque
uma marca de fim de arquivo naquele ponto, esta marca pode ser identificada por
outro comando ou funo (Apndices A e B).
close (unidade,status='estado')
ou
endfile unidade
Onde status='estado' opcional. Estado pode ser 'keep' que mantm o arquivo na
memria (esta a opo assumida quando status='estado' omitida), ou 'delete'
que apaga o arquivo da memria.
read (30,*) c
write(20,*) a
write(20,*) b,c
end
Captulo II - Estrutura de Programao
1. Estrutura Seqencial
declarao 1
declarao 2
...
declarao n
comando 1
comando 2
...
end
integer*1 a,b 10
a=10 20
b=20 30.000000
c=30
write (*,*) a
write (*,*) b
write (*,*) c
end
integer*1 a,b 10
a=10 20
b=20
c=30
write (*,*) a
write (*,*) b
stop
write (*,*) c
end
integer*1 a,b 10
a=10
b=20
c=30
write (*,*) a
call exit
write (*,*) b
write (*,*) c
end
goto r
Onde r um rtulo de uma linha que possui ou no um comando. Como uma linha
rotulada no pode estar em branco, se no for necessria incluso de nenhum
comando, pode-se usar a palavra chave 'continue', que no ir interferir em nada
no programa.
Programa Resultado
goto 20 linha 20
end
3. Estrutura Condicional
ou
seqncia de comandos
end if
seqncia de comandos 1
else
seqncia de comandos 2
end if
Quando a expresso de teste for falsa a seqncia de comandos 2 ser
executada. Mesmo quando s h um comando na seqncia de comandos 1, no
se pode omitir a palavra chave 'then'.
Programa Resultado
implicit integer (a-z) a<b
a=10 c= 30
b=20
c=30
if (a.lt.b) then
a=b+10
else
b=a-5
end if
end
Estrutura Condicional Composta Simplificada
WIN F90
SELECT CASE (exp. case) nome_case: SELECT CASE (exp. case)
comandos 1 comandos 1
comandos 2 comandos 2
... ...
comandos n comandos n
comandos d comandos d
Onde 'exp. case' uma expresso ou constante inteira, lgica ou literal (somente
um caractere 'character*1'). Caso o valor de 'exp. case' estiver na 'lista de seleo
1', os 'comandos 1' sero executados. Se o valor no estiver na 'lista de seleo 1'
o computador ir avaliar a 'lista de seleo 2', se for verdadeira sero executados
os 'comandos 2' e assim at terminar os comandos 'case (lista de seleo n)'. O
comando 'case default' opcional, e faz com que os 'comandos d' sejam
executados caso nenhuma das outras avaliaes sejam verdadeiras. 'nome_case'
opcional, deve seguir as mesmas regras usadas para dar nomes as variveis. A
sua utilidade apenas de dar maior clareza ao programa
As listas de seleo podem ser da seguinte forma:
Os valores literais devem vir entre apstrofos e seus valores sero avaliados de
acordo com o padro ASCII. Uma tabela com os valores ASCII pode ser
encontrada no Apndice C.
Programa Resultado
i=20 a=20
case (10)
case (20)
case (11,19)
end select
end
valor_i: character i*1 i esta entre d e m
i='h'
case ('a','b','c')
case ('d':'m')
end
4. Estruturas de Repetio
Quando o mesmo comando precisa ser executado vrias vezes at que se atinja
certa condio ou um nmero certo de repeties, o melhor usar as estruturas
de repetio. Estas estruturas so bem simples e podem economizar vrias linhas
de comando.
r1 if (condio_de_teste) goto r2
comandos
goto r1
r2 continue
seqncia de comandos
r1 continue
ou
WIN - do var=n1,n2,n3
seqncia de comandos
end do
'var' uma varivel inteira que recebe inicialmente o valor 'n1', a seqncia de
comandos se repete, e o valor de 'var' aumenta de 'n3' a cada vez que o comando
volta para a linha do 'do'. A repetio s para quando o valor de 'var' ultrapassa
'n2'.
A palavra chave 'end do' pode ser escrita como 'enddo'. 'n1', 'n2' e 'n3' podem ser
constantes ou variveis inteiras ou reais, positivas ou negativas. Quando 'n3' for
igual a um ele pode ser omitido.
DO WHILE (F90)
Uma forma de se usar uma expresso de teste no comando 'do', o uso do 'do
while'.
do while(exp. teste)
seqncia de comandos
end do
a=0 9.921976672293290E-001
b=0 9.689124217106447E-001
a=cos(b) 8.775825618903728E-001
b= b+.125 8.109631195052179E-001
goto 1 6.409968581633251E-001
2 continue 5.403023058681398E-001
end 4.311765167986662E-001
3.153223623952687E-001
1.945477079889872E-001
7.073720166770291E-002
-5.417713502693632E-002
do while (i) 31
j=j+1 41
if(j.eq.5) i=0 50
print *,j,i
end do
end
do while(i.le.4) +449.99999E-003
i=i+1 ---------------
end do
end
do i=9,12 09
print '(2x,I2.2)',i 10
enddo 11
end 12
DO Implcito (WIN)
read(unidade,formato)(lista_de_parmetros, var=n1,n2,n3)
Onde 'var=n1,n2,n3' tem o mesmo significado que na estrutura 'DO'. Pode ser
usadas vrias estruturas deste tipo em um mesmo read ou write desde que
venham separadas por parnteses. Quando impressos desta forma, os dados
ficam na mesma linha. Para leitura eles podem vir na mesma linha ou em linhas
diferentes. Os parmetros em formato sero usados at que se atinja o seu final,
quando isto acontecer o comando muda de linha e os formatos so usados
novamente desde o comeo.
Programa Resultado
integer a(5,3), b(3) 11 - 21 - 31
do i=1,5 41 - 51 - 101
do j=1,3 12 - 22 - 32
a(i,j)=10*i+j 42 - 52 - 108
b(j)=100+j**3 13 - 23 - 33
enddo 43 - 53 - 127
enddo
end
GOTO Implcito
Onde 'varivel' uma varivel inteira que deve ter valor mximo igual ao nmero
de rtulos que esto dentro dos parnteses. Quando esta varivel tiver valor 1 o
comando do programa vai para a linha rotulada com 'r1', quando tiver valor 2 vai
para a linha com o rtulo r2, e assim por diante. Se o valor de 'varivel' for maior
que o nmero de rtulos o comando do programa vai para a linha imediatamente
abaixo do 'goto'.
Programa
Resultado
i=2 o valor de i=2
goto (10,20,15) i
goto 1
go to 1
1 continue
end
IF Com Deslocamento
Uma outra maneira de se deslocar num programa, usando agora uma expresso
no lugar de uma varivel a seguinte:
Exp. numrica no pode ser complexa. r1, r2, r3 so rtulos. Se o valor de 'exp.
numrica' for menor que zero o comando vai para a linha com o rtulo r1, quando
for igual a zero o comando vai para linha com o rtulo r2 e quando for maior que
zero vai para r3.
Programa Resultado
i=1 i<2
10 if(i-2) 1,2,3 i=2
i=2
goto 10
i=3
goto 10
end
DIMENSION
tipo var1,var2,...,varn
ou
'tipo' pode ser qualquer tipo de varivel inteira, real, lgica, complexa ou literal. Li1,
Li2,..., Lin so os ndices inferiores, e Ls1, Ls2,..., Ln so os ndices superiores da
matriz ou vetor. Os valores de Li e Ls podem ser positivos, nulos ou negativos
desde que sejam inteiros. Quando o valor de Li omitido, o valor um usado
como padro. As variveis podem ter duas ou mais dimenses, sendo declaradas
da mesma forma, com cada dimenso separada das outras por vrgulas.
var(Li1:Ls1, Li2:Ls2, ...,Lin:Lsn)
Programa Resultado
integer a a(-03,+01)=-03
do i=-3,2 a(-03,+03)=-27
do j=1,3 a(-02,+01)=-02
a(i,j)=i**j a(-02,+02)=+04
enddo a(-01,+03)=-01
enddo a(+00,+01)=+00
end a(+00,+02)=+00
a(+00,+03)=+00
a(+01,+01)=+01
a(+01,+02)=+01
a(+01,+03)=+01
a(+02,+01)=+02
a(+02,+02)=+04
a(+02,+03)=+08
PARAMETER
Uma constante pode ser representada por um smbolo no lugar do seu valor, ou
seja, o valor de _ pode ser sempre que preciso referenciado como 'pi', no lugar de
se escrever sempre 3.14159, bastando para isso o uso do comando 'parameter'. A
diferena entre um valor com 'parameter' e uma varivel comum que com
'parameter' o valor no pode ser modificado em nenhuma parte do programa ou
ser lido atravs de um comando 'read'. O tipo do constante deve ser especificado
antes ou sero usadas as atribuies implcitas (item 4 primeira parte).
Os parnteses so opcionais. 'tipo' pode ser 'integer', real ou qualquer outro tipo
de variveis. Em 'parameter' no se pode declarar vetores e matrizes.
Programa resultado
real pi,r(3),a real pi,r(3) 6.291800
r=i**2 r=i**2
enddo end
return return
end end
TYPE (F90)
Quando vrias variveis esto relacionadas entre si, o melhor agrupado em
grupos ('type'), de forma que possam ser acessadas pelo nome do grupo.
Declarao:
type nome_type
declaraes
Associao:
Atribuio:
ou
nome%nome_varivel = valor
Programa Resultado
type anivers Fevereiro
helder=anivers('Helder','Fevereiro',17)
carlo=anivers('Carlo','Fevereiro',12)
luciene%nome='Luciene'
luciene%mes='Agosto'
luciene%dia=22
write(*,*) helder%mes
write(*,*) helder%nome,helder%dia
write(*,*) carlo%nome,carlo%dia
write(*,'(1x,a,a,i2)') luciene
end
DATA
data var1/valor1/,var2/valor2/,...,varn/valorn/
ou
data var1,var2,...,varn/valor1,valor2,...,valorn/
Programa Resultado
integer h(3,4),a,b,c 010203040506
character cor*5 05 03 10
data h/1,2,3,4,5,6,7,8,9,10,11,12/ TF
data l1,l2,cor/.true.,.false.,'preto'/
print '(2x,6i2.2,/,2x,6i2.2)',h
print '(2x,3(i2.2,2x))',a,b,c
print '(2x,l7,2x,l7)',l1,l2
print *,cor
end
3. Designao de Memria
COMMON
Programa Resultado
common /func/a,b 12.000
data a,b/1,2/
c=3;d=4;e=5
f=funcao(4)
call subrotina(5)
end
! funes e subrotinas
function funcao(t)
common /func/a,b
a=a*2
funcao=t+a+b
return
end
subroutine subrotina(r)
common /func/a,b
common c,d,e,f
r=r+c+d+e
print '(3(2x,f6.3,/))',r,a,f
return
end
BLOCK DATA
declaraes e atribuies
end
4. Modularizao
INCLUDE
include 'nome.ext'
ou
include "nome.ext"
Nome e extenso podem ser qualquer um, mas a extenso '.inc' a mais comum
para este tipo de arquivo. permitido o uso de caminhos completos no lugar do
nome.
2. Funes Genricas
Nome Definio Parmetro Resultado
3. Exponenciais
4. Logaritmos
6. Mnimos
7. Restos
8. Raiz Quadrada de X
10. Arredondamento de X
14. Complexos
Nome
Definio Parmetro Resultado
15. Caracteres
As opes entre colchetes so opcionais. Elas podem vir em qualquer ordem, exceto
quando explicitado.
errlabel Expresso inteira. Indica o rtulo de uma linha no mesmo arquivo para
onde o comando vai se houver erro. Quando omitido o efeito determinado pela
presena ou no de iocheck.
[,STATUS=status] )
status Expresso alfanumrica. 'KEEP' indica que o arquiva deve ser mantido,
'DELETE' indica que o arquivo deve ser apagado.
3. Escrita (WRITE)
nml Lista de variveis serem impressas, se estiver presente iolist deve ser
omitida.
errlabel Expresso inteira. Indica o rtulo de uma linha no mesmo arquivo para
onde o comando vai se houver erro. Quando omitido o efeito determinado pela
presena ou no de iocheck.
rec Expresso inteira. Indica a posio do arquivo onde o dado ser impresso.
Somente para arquivos com access='DIRECT'.
iolist Lista de variveis serem impressas.
4. Leitura (READ)
[, REC=rec])} iolist
nml Lista de variveis serem lidas, se estiver presente iolist deve ser omitida.
endlabel Expresso inteira. Indica o rtulo de uma linha no mesmo arquivo para
onde o comando vai se a marca de fim de arquivo (EOF) for encontrada.
errlabel Expresso inteira. Indica o rtulo de uma linha no mesmo arquivo para
onde o comando vai se houver erro. Quando omitido o efeito determinado pela
presena ou no de iocheck.
rec Expresso inteira. Indica a posio do arquivo de onde o dado ser lido.
errlabel Expresso inteira. Indica o rtulo de uma linha no mesmo arquivo para
onde o comando vai se houver erro. Quando omitido o efeito determinado pela
presena ou no de iocheck.