Escolar Documentos
Profissional Documentos
Cultura Documentos
Fortran PDF
Fortran PDF
programao em
linguagem
Fortran 77 e 90
Programao
em Linguagem
FORTRAN
tpicos precedidos da identificao N77 s so validos para compiladores novos, mas que
no aceitam a programao em FORTRAN 90;
Deve ficar claro que compiladores para FORTRAN 90 aceitam tambm os outros dois
tipos, e os baseados em FORTRAN N77 aceitam todos os comandos dos compiladores mais
antigos (FORTRAN 77), e que a recproca no verdadeira.
Os programas podem ser escritos em qualquer editor de texto, desde que sejam salvos
com as extenses .for ou .f90. Esta segunda forma somente para F90. Os compiladores em
N77 e F90 possuem um editor prprio; que deve ser usado, pois possui muitos recursos
adicionais, como por exemplo o destaque das palavras chaves e identificaes mais claras dos
erros de compilao, o que facilita muita a deteco de falhas na criao dos programas.
2. Formatao
coluna 6: qualquer caractere diferente de 0 zero nesta coluna indica que o que vem a
seguir continuao da linha anterior ou da ultima linha que no seja um comentrio
(prximo item, conceitos bsicos). Um mesmo comando pode estar dividido em at 19
linhas de cdigo. Entre as linhas do comando pode haver linhas em branco ou comentrios;
F90 O programa pode ser escrito em qualquer posio, desde que o modo formulrio livre
esteja ativado. Alguns pontos devem ser observados para este formato:
os rtulos devem ser os primeiros caracteres da linha, e podem estar em qualquer coluna.
3. Conceitos Bsicos
N77 o ponto de exclamao ! indica que o que vem aps ele comentrio, ele pode vir em
qualquer posio, inclusive aps os comandos.
Programao em Linguagem FORTRAN .3.
Variveis e Nomes de Blocos: devem ter no mximo seis letras, no permitido o uso de
caracteres especiais e no podem comear com um nmero.
Constantes
Numricas: podem conter quaisquer valores reais, inteiros ou complexos. A parte decimal
separada da inteira por um ponto .. Os zeros antes e depois do ponto decimal podem ser
omitidos, se no forem significantes. O expoente decimal indicado pela letra e ou E,
deve vir entre o nmero e seu expoente sem o uso de espaos entre eles. Nmeros
negativos assim como a parte exponencial quando for negativa deve vir precedida do sinal
menos -. O sinal + opcional em ambas as partes. Os nmeros imaginrios devem vir
entre parnteses e a parte real deve ser separada por uma vrgula da parte imaginria.
4. Declarao de Variveis
As variveis podem ser inteiras, reais ou literais. A declarao de uma varivel deve vir
antes que ela seja usada, se isto no ocorrer o compilador assumir que as variveis que
comeam com as letras I at N como inteiras (INTEGER*4) e todas as outras como reais
(REAL*4).
Programao em Linguagem FORTRAN .4.
Esta forma de declarao implcita pode ser modificada usando o comando implicit
tipo (a1-a2,b1-b2,...) sendo a1, a2, b1, b2 quaisquer letras do alfabeto. A vrgula
separa os intervalos de letras e o sinal determina o intervalo. As letras que no estiverem em
nenhum dos intervalos ter o seu tipo dado pela declarao implcita. O comando seguinte
indica que as variveis que comeam com as letras a, b, c e de r at z so do tipo TIPO1.
Para se declarar variveis que sejam matrizes e vetores deve-se indicar suas
dimenses logo aps o nome da varivel; entre parnteses, e separadas umas das outras por
vrgula. Ex.: a(4,3) indica uma matriz a de 4 linhas por 3 colunas.
As variveis podem receber valores iniciais usando /valor/, logo aps sua
declarao. No caso de vetores e matrizes devem ser dados os valores para todos os
elementos de cada linha em seqncia.
Tipos de Variveis
Inteiras (INTEGER)
Os nmeros aps o * indicam quantos bytes a varivel ocupa na memria do computador. Esta
observao vlida para todos os tipos de variveis.
Programao em Linguagem FORTRAN .5.
Reais (REAL)
A parte exponencial deve ser separada por um d ou D no lugar do e ou E para real do tipo
*8.
N77 podem ser usados o e ou E para separar a parte exponencial. No s isso mas
tambm todas as outras funes (item 6 Funes intrnsecas) podem ser iguais a de um real,
no sendo necessrio o uso de funes especiais para este tipo de valor.
Complexas (COMPLEX)
COMPLEX*8 ou COMPLEX
COMPLEX*16
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
Lgicas (LOGICAL)
LOGICAL NOME
5. Operadores
Atribuio
Identificador = Expresso
F90 estas declaraes poderiam estar na mesma linha desde que fossem separadas por
ponto e vrgula ;.
Operadores Literais
Uma funo til para variveis literais a concatenao, ou a juno de duas ou mais
palavras. Em FORTRAN a concatenao feita pelo operador //.
a = tele
b = visao
c = a//b ! c = televisao
Programao em Linguagem FORTRAN .7.
Operadores Aritmticos
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 ! c = a2 + b2
D = E**(1/2) ! d = e1/2
Operadores Relacionais
20 .ne. 30 ! verdadeiro
1000 .lt. 500 ! falso
Operadores Lgicos
FORTRAN Significado
Juno verdadeiro se os dois operadores
.AND.
forem verdadeiros
Disjuno verdadeiro se um dos dois
.OR.
operadores forem verdadeiro
.NOT. Negao verdadeiro se o operador for falso
Desigualdade Lgica verdadeiro se
.NEQV. ou .XOR.
somente um dos operadores for verdadeiro
Igualdade Lgica verdadeiro se os dois
.EQV.
operadores forem falsos ou verdadeiros
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
Funes Diversas
7. Funes e Subrotinas
Funes
diferena de que agora o programador que define o que a funo deve gerar como resultado.
O tipo da funo deve ser declarado no programa principal, como se fosse uma varivel
comum. Uma funo pode utilizar outras funes.
Chamada:
nome_da_funo(lista_de_parmetros)
Definio:
function nome_da_funo(lista_de_parmetros)
definio e declarao das variveis e constantes locais
seqncia de comandos
return
end
A palavra chave return opcional, pode aparecer em qualquer ponto e mais de uma
vez. Ela indica que o comando deve retornar ao programa principal ou funo ou subrotina
que a chamou.
nome_da_funo = expresso
Exemplo:
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
Subrotinas
No retornam nenhum valor, e tambm a elas podem ser passados qualquer nmero de
parmetros inclusive nenhum. As subrotinas podem conter quaisquer tipos de comandos como
imprimir resultados, abrir arquivos (estes sero vistos frente, prximo item Leitura e
Impresso) ou executar clculos. Como ocorrem com as funes, as subrotinas podem
chamar outras subrotinas ou funes.
Programao em Linguagem FORTRAN .11.
Chamada:
Definio:
Exemplo:
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:
ou
format (que contenha a lista 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
tenham 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
os outros separados por espaos (no caso de strings viro sem espaos de separao), 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=opcao no comando anterior. Onde opcao 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.
a significa que ser impressa uma string de qualquer tamanho (item 9, Formatos).
Os formatos servem para que os dados sejam impressos ou lidos de uma forma
especfica, determinada 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 ltima deve vir entre apstrofos . O uso do * no lugar do
formato indica que todos os dados sero impresso ou lidos de forma livre, com o nmero de
casas especificado pelo prprio compilador. um recurso til para se evitar erros.
Programao em Linguagem FORTRAN .13.
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 especificao
ou seqncia de especificaes deve se repetir.
onde r um numero inteiro, e representa o rtulo do format. Um mesmo format pode ser
usado por vrios comandos de escrita e leitura.
N77 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
N77 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
w representa o tamanho do campo a ser impresso ou lido, m representa o nmero de zeros
que vir antes do nmero, d o nmero de casas decimais e e o nmero de casas para o
expoente.
12345
read (*,(f5.3)) a => a = 12.345
Quando o ponto existe mas no est na posio especificada, a sua posio original
mantida.
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
a = 12.345
b = 12345.789e6
write (*,1) a,b
1 format ( a=,e10.4e3, e b=,e10.4e3)
=> a=.1235E+002 e b=.1235E+011
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.
Programao em Linguagem FORTRAN .15.
belo horizonte
read (*, (a10)) nome => belo horiz
write (*, (a15)) nome => belo horiz
F90 os valores dos campos podem ser variveis desde que venham entre <var1>. No
valido para print.
a = 5
b = FORTRAN
write (*,(a<a>)) b => FORTR
Para valores numricos que precisam de mais casas de impresso que as indicadas no
format, sero impressos somente * naquele campo.
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
N77 \ Comea a escrever no ponto onde a ultima escrita parou
N77 $ 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
write (*,'(/2x,''hoje e '',a8)') dia
Programao em Linguagem FORTRAN .16.
+.240E+02 +55.800E-003
hoje e Segunda-
10. Arquivos
open (unidade,file=nome.ext)
onde unidade deve ser um inteiro maior ou igual a zero, e uma referncia a este arquivo. O
nmero da unidade deve vir no comando read ou write indicando que os dados sero
retirados ou armazenados nesta unidade. A disposio dos dados em arquivos a mesma
utilizada nas unidades de entrada e sada padro (Item 8, Leitura e Impresso), 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 subrotinas), desde que venha antes
de um comando que o utilize.
ou sero criados no mesmo diretrio em que estiver o programa a menos que se d como
nome o caminho para um outro diretrio. Os caminhos seguem o mesmo padro do DOS.
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 (Anexos A e B).
close (unidade,status=estado)
ou
endfile unidade
onde status=estado opcional. Estado pode ser keep que mantm o arquivo na
memria (este padro esta opo omitida), ou delete que apaga o arquivo da memria.
Outros Recursos
declarao 1
declarao 2
...
declarao n
comando 1
comando 2
...
comando n
end
Programa Resultado
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
Programao em Linguagem FORTRAN .19.
2. Comando GO TO ou GOTO
goto r
onde r um rtulo de uma linha que possui ou no um comando. Como uma linha rotulada no
pode estar em branco pode-se usar a palavra chave continue, que no ir interferir em nada
no programa.
Programa Resultado
goto 20 linha 20
10 write (*,*) ' linha 10' linha 30
20 write (*,*) ' linha 20'
30 write (*,*) ' linha 30'
end
goto 1 linha 20
10 write (*,*) ' linha 10' linha 30
1 continue
20 write (*,*) ' linha 20'
2 continue
30 write (*,*) ' linha 30'
end
3. Estrutura Condicional
ou
Programa Resultado
implicit integer (a-z) a<b
a=10 c= 30 30 20
b=20
c=30
if (a.lt.b) then
write (*,*) ' a<b'
a=b+10
else
write (*,*) ' a>b'
b=a-5
end if
if (c.ge.20) write(*,*)' c=',c, a, b
end
Uma outra forma de se usar uma estrutura condicional composta (somente N77 e F90)
usando o comando case.
N77 F90
SELECT CASE (exp. case) nome_case: SELECT CASE (exp. case)
CASE (lista de seleo 1) CASE (lista de seleo 1)
comandos 1 comandos 1
CASE (lista de seleo 2) CASE (lista de seleo 2)
comandos 2 comandos 2
... ...
CASE (lista de seleo n) CASE (lista de seleo n)
comandos n comandos n
CASE DEFAULT CASE DEFAULT
comandos d comandos d
END SELECT END SELECT nome_case
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 e deve seguir as
mesmas regras usadas para dar nomes as variveis. A sua utilidade apenas de dar maior
clareza ao programa.
Programao em Linguagem FORTRAN .21.
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 Anexo C.
Programa Resultado
i=20 a=20
select case (i)
case (10)
write (*,*) 'a=10'
case (20)
write (*,*) 'a=20'
case (11,19)
write (*,*) 'a>11 a<19'
end select
end
character i*1 i esta entre d e m
i='h'
valor_i: select case (i)
case ('a','b','c')
write (*,*) 'i=a ou b ou c'
case ('d':'m')
write (*,*) 'i esta entre d e m'
case ('D':'M')
write (*,*) 'i esta entre D e M'
end select valor_i
end
importante observar que as letras maisculas e minsculas possuem valores ASCII
diferentes.
4. Estruturas de Repetio
Quando o mesmo comando precisa ser executado vrias vezes at que se atinja uma
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
Programao em Linguagem FORTRAN .22.
do r1 var=n1,n2,n3
seqncia de comandos
r1 continue
ou
N77 - do var=n1,n2,n3
seqncia de comandos
end do
'var uma varivel inteira ou real 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.
Caso o programa exija uma contagem regressiva o valor de n3 deve ser negativo e n1
maior que 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)
do while(exp. teste)
seqncia de comandos
end do
Programa Resultado
real*8 a,b 1.000000000000000
a=0 9.921976672293290E-001
b=0 9.689124217106447E-001
1 if(a.lt.0) goto 2 9.305076219123143E-001
a=cos(b) 8.775825618903728E-001
b= b+.125 8.109631195052179E-001
write (*,*) a 7.316888688738209E-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
Programao em Linguagem FORTRAN .23.
Programa Resultado
integer i/1/, j/1/ 2 1
do while (i) 3 1
j=j+1 4 1
if(j.eq.5) i=0 5 0
print *,j,i
end do
end
real*8 a(4) +2.97646E+000
i = 1; a(1) = 2.97645984 ---------------
a(2) = 576.74e5 +57.67400E+006
a(3) =.45; a(4) = sin(.5) ---------------
do while(i.le.4) +449.99999E-003
print'(2x,sp,en16.5e3)', a(i) ---------------
write (*,*)' ---------------' +479.42554E-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)
Nos comandos read e write possvel usar uma estrutura de repetio semelhante
ao DO, mas de forma implcita e mais simplificada.
read(unidade,formato)(lista_de_parmetros, var=n1,n2,n3)
Onde var=n1,n2,n3 tem o mesmo significado que na estrutura DO. Podem 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 seqncia correta 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
write (*,1) ((a(i,j), i=1,5) &
& ,b(j), j=1,3)
1 format ( 2x,i4,' - ',i5,' - ',i4)
end
Programao em Linguagem FORTRAN .24.
GOTO Implcito
Onde varivel uma varivel ou expresso 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
10 write (*,*) ' o valor de i=1'
goto 1
20 write (*,*) ' o valor de i=2'
go to 1
15 write (*,*) ' o valor de i=3'
1 continue
end
IF Com Deslocamento
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.
A exp. numrica pode ser uma expresso que gere como valores 0 (zero) que ser
considerado como .false. ou qualquer nmero diferente de 0 (zero) que ser considerado
como .true..
Programao em Linguagem FORTRAN .25.
Programa Resultado
i=1 i<2
10 if(i-2) 1,2,3 i=2
1 write (*,*) ' i<2' i>2
i=2
goto 10
2 write (*,*) ' i=2'
i=3
goto 10
3 write (*,*) ' i>2'
end
DIMENSION
tipo var1,var2,...,varn
dimension var1(Li1:Ls1), var2(Li2:Ls2),..., varn(Lin:Lsn)
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.
Programa Resultado
integer a a(-03,+01)=-03
dimension a(-3:1,3) a(-03,+02)=+09
do i=-3,1 a(-03,+03)=-27
do j=1,3 a(-02,+01)=-02
a(i,j)=i**j a(-02,+02)=+04
print 1,'a(',i,',',j,')=',a(i,j) a(-02,+03)=-08
1 format(1x,sp,a,i3.2,a,i3.2 & a(-01,+01)=-01
,a,i3.2) a(-01,+02)=+01
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
Programao em Linguagem FORTRAN .26.
PARAMETER
Uma constante pode ser representada por um smbolo no lugar do seu valor, ou seja o
valor de _, por exemplo, 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 da constante deve ser especificado antes ou sero usadas s atribuies
implcitas (item 4 Captulo 1).
Os parnteses so opcionais. tipo pode ser integer, real ou qualquer outro tipo
de varivel. Em parameter no se podem declarar vetores e matrizes.
F90 Uma forma simplificada de se atribuir o valor e o tipo da constante feito da seguinte
forma.
Programa resultado
real pi,r(3),a real pi,r(3) 6.291800
parameter (pi=3.1459) parameter (pi=3.1459) 25.167200
do i=1,3 do i=1,3 56.626200
r=i**2 r=i**2
a=area(r(i),pi) call area(r(i),pi)
print *,a enddo
enddo end
end
subroutine area(r,pi)
function area(r,pi) real r,a
real r,area a=2*pi*r
area=2*pi*r print *,a
return return
end end
TYPE (F90)
Quando vrias variveis esto relacionadas entre si, o melhor agrup-las em grupos
type, de forma que possam ser acessadas pelo nome do grupo. Este um recurso
semelhante programao orientada a objetos.
Declarao:
type nome_type
declaraes
end type nome_type
Programao em Linguagem FORTRAN .27.
nome_type o nome do bloco, e deve seguir as mesmas regras para nomes de variveis.
declaraes so declaraes de variveis (tipo varivel). Este bloco pode ser usado
vrias vezes, associando cada novo grupo um nome. O bloco com esse novo nome ter as
mesmas variveis feitas na declarao.
Associao:
Atribuio:
ou
nome%nome_varivel = valor
Programa Resultado
type anivers Fevereiro
character nome*10 Helder 17
character mes*10 Carlo 12
integer*1 dia Keila Agosto 22
end type anivers
type (anivers) :: helder
type (anivers) :: keila
type (anivers) :: carlo
helder=anivers('Helder','Fevereiro',17)
carlo=anivers('Carlo','Fevereiro',12)
keila %nome='Keila'
keila %mes='marco'
keila%dia=24
write(*,*) helder%mes
write(*,*) helder%nome,helder%dia
write(*,*) carlo%nome,carlo%dia
write(*,'(1x,a,a,i2)') keila
end
DATA
data var1/valor1/,var2/valor2/,...,varn/valorn/
ou
data var1,var2,...,varn/valor1,valor2,...,valorn/
Os valores de vetores e matrizes devem ser declarados todos de uma vez, com a
separao entre eles feita por vrgula.
Programao em Linguagem FORTRAN .28.
Programa Resultado
integer h(3,4),a,b,c 010203040506
logical l1,l2 070809101112
character cor*5 05 03 10
data h/1,2,3,4,5,6,7,8,9,10,11,12/ T F
data a/5/,b/3/,c/10/ preto
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
Quando muitos dados devem ser passados a funes ou subrotinas, um recurso til o
common, que pode resumir este servio. Um mesmo common pode ser usado vrias vezes e
carregar muitas variveis ao mesmo tempo. Este comando deve aparecer de forma igual no
incio do programa principal (logo aps a definio dos tipos de variveis) e tambm no incio
de cada funo ou subrotina que o utilize.
A ordem em que as variveis aparecem no common devem ser iguais em qualquer parte
do programa, apesar de seus nomes poderem variar de uma subrotina ou funo para outras.
Programa Resultado
common /func/a,b 12.000
common / /c,d 2.000
common e,f 4.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
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.
Programao em Linguagem FORTRAN .31.
2. Funes Genricas
3. Exponenciais
4. Logaritmos
5. Mximos
6. Mnimos
7. Restos
8. Raiz Quadrada de X
9. Truncamento de X
10. Arredondamento de X
14. Complexos
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.
file Expresso alfanumrica. Indica o nome do arquivo. Quando omitido o programa pede ao
usurio um nome.
iocheck Varivel inteira. Retorna zero quando no ocorre erros, retorna um nmero negativo
se encontrar a marca de fim de arquivo (EOF), retorna o nmero do erro quando um ocorre.
recl Expresso inteira. Representa o tamanho de cada dado em bytes. obrigatrio para
access=DIRECT.
status Expresso alfanumrica. OLD indica que o arquiva j existe, NEW indica que o
arquivo deve ser criado, UNKOWN (padro) verifica a existencia do arquivo, se ele no existir
ser criado um, SCRATHC
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.
iocheck Varivel inteira. Retorna zero quando no ocorre erros, retorna um nmero negativo
se encontrar a marca de fim de arquivo (EOF), retorna o nmero do erro quando um ocorre.
status Expresso alfanumrica. KEEP indica que o arquiva deve ser mantido, DELETE
indica que o arquivo deve ser apagado.
3. Escrita (WRITE)
UNIT= - Quando omitido, o primeiro valor ser o nmero da unidade (unit). Se FMT= ou NML=
forem omitidos, format ou nml devem ser o segundo parmetro.
nml Lista de variveis serem impressas, se estiver presente iolist deve ser omitida.
Programao em Linguagem FORTRAN .39.
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.
iocheck Varivel inteira. Retorna zero quando no ocorre erros, retorna o nmero do erro
quando um ocorre.
rec Expresso inteira. Indica a posio do arquivo onde o dado ser impresso. Somente para
arquivos com access=DIRECT.
4. Leitura (READ)
UNIT= - Quando omitido, o primeiro valor ser o nmero da unidade (unit). Se FMT= ou NML=
forem omitidos, format ou nml devem ser o segundo parmetro.
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.
iocheck Varivel inteira. Retorna zero quando no ocorre erros, retorna 1 se encontrar EOF,
retorna o nmero do erro quando um ocorre.
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.
iocheck Varivel inteira. Retorna zero quando no ocorre erros, retorna o nmero do erro
quando um ocorre.
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.
iocheck Varivel inteira. Retorna zero quando no ocorre erros, retorna o nmero do erro
quando um ocorre.
Programao em Linguagem FORTRAN .41.