Escolar Documentos
Profissional Documentos
Cultura Documentos
Liguagem de Programação Fortran
Liguagem de Programação Fortran
programao em
linguagem
Fortran 77 e 90
Programao
em Linguagem
FORTRAN
NDICE
CAPTULO 1: CONCEITOS DA LINGUAGEM
1. INTRODUO ............................................................................................................................ 1
2. FORMATAO .......................................................................................................................... 1
3. CONCEITOS BSICOS ................................................................................................................ 2
4. DECLARAO DE VARIVEIS .................................................................................................... 3
Tipos de Variveis
4
Inteiras (INTEGER)
4
Reais (REAL)
5
Complexas (COMPLEX)
5
Alfanumricas (CHARACTER)
5
Lgicas (LOGICAL)
6
5. OPERADORES ........................................................................................................................... 6
Atribuio
6
Operadores Literais
6
Operadores Aritmticos
7
Operadores Relacionais
7
Operadores Lgicos
7
Prioridade
8
6. FUNES INTRNSECAS ............................................................................................................. 8
Funes Trigonomtricas
8
Funes Diversas
9
7. FUNES E SUBROTINAS ........................................................................................................... 9
Funes
9
Subrotinas
10
8. LEITURA E IMPRESSO ............................................................................................................ 11
9. FORMATOS (LEITURA OU IMPRESSO)...................................................................................... 12
Outros Recursos Para Formatos
15
10. ARQUIVOS ............................................................................................................................ 16
Outros Recursos
17
18
24
1. DESLOCAMENTO..................................................................................................................... 24
GOTO Implcito
24
IF Com Deslocamento
24
2. DECLARAES E ATRIBUIES AVANADAS ........................................................................... 25
DIMENSION
25
PARAMETER
26
TYPE (F90)
26
DATA
27
3. DESIGNAO DE MEMRIA ..................................................................................................... 28
COMMON
28
BLOCK DATA
29
4. MODULARIZAO .................................................................................................................. 29
INCLUDE
29
31
37
41
.1.
tpicos precedidos da identificao N77 s so validos para compiladores novos, mas que
no aceitam a programao em FORTRAN 90;
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
A formatao dos cdigos em FORTRAN, principalmente em formato fixo deve seguir
um estilo diferente dos usados na maioria das linguagens de programao. Estes conceitos
iniciais podem no ficar claro para os iniciantes na linguagem, estes leitores podem observar o
exemplo no final do item 8 (Leitura e impresso) para ter maior clareza da disposio dos
comandos em FORTRAN.
.2.
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
Nesta seo sero apresentados outros conceitos importantes para a construo de
programas em FORTRAN.
N77 o ponto de exclamao ! indica que o que vem aps ele comentrio, ele pode vir em
qualquer posio, inclusive aps os comandos.
.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.
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).
.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.
implicit TIPO1 (a, b, c, r-z)
os espaos so usados para dar clareza e so ignorados pelo compilador. Quando no se
deseja que nenhuma varivel seja declarada implicitamente usa-se o comando implicit
none. Se este comando for usado e uma varivel citada no programa no estiver em
nenhuma outra declarao o complilador acusar um erro.
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)
Podem assumir os seguintes valores:
INTEGER*1
128 a 127
INTEGER*2
32,768 a 32,767
INTEGER*4
2,147,483,648 a 2,147,483,647
! a = 6
0 1
2 3
! b =
Os nmeros aps o * indicam quantos bytes a varivel ocupa na memria do computador. Esta
observao vlida para todos os tipos de variveis.
.5.
Reais (REAL)
Preciso simples, 6 casas decimais (padro):
REAL*4 ou REAL `3.402823E+38
Incremento mnimo de `1.175494E-38
Preciso dupla, 15 casas decimais (padro):
REAL*8 ou DOBLE PRECISION `1.797693134862316D+308
Incremento mnimo de `2.225073858507201D-308
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.
implict real(a-z)
integer d
Complexas (COMPLEX)
Preciso simples, 6 casas decimais:
COMPLEX*8 ou COMPLEX
Preciso dupla, 15 casas decimais:
COMPLEX*16
Os valores que um complexo pode assumir so os mesmos que os reais.
complex c/(4.,.3)/
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)
.6.
!
!
character data*8,*9 data2,data3 !
!
Lgicas (LOGICAL)
LOGICAL NOME
Podem assumir os valores .TRUE. (VERDADEIRO) ou .FALSE. (FALSO)
Ou somente T e F ou ainda 1 e 0 ou diferente de zero e 0.
5. Operadores
Atribuio
A varivel ou identificador que estiver a esquerda do sinal de atribuio = recebem o
valor da expresso, constante ou varivel que estiver direita.
Identificador = Expresso
nome = Engenharia Quimica
ano = 1999
data1 = 12\10\98
data2 = 20\11\98
data3 = 15\3\99
temp(1)= 25.6
temp(2)= 22.4
temp(3)= 22.8
F90 estas declaraes poderiam estar na mesma linha desde que fossem separadas por
ponto e vrgula ;.
data3 = 15\3\99;temp(1)= 25.6;num_dias= 3
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
.7.
Operadores Aritmticos
Executam operaes aritmticas comuns.
FORTRAN Matemtica Tradicional Significado
+
+
soma
Subtrao
*
Multiplicao
/
Diviso
p
**
a
Potenciao
Quando uma varivel inteira recebe o resultado de uma diviso com resto, este resto
desprezado ou seja o valor truncado.
! c = a2 + b2
! d = e1/2
C = A**2 + B**2
D = E**(1/2)
Operadores Relacionais
Comparam variveis, constantes ou expresses e retornam .TRUE., T ou 1 se a
comparao for verdadeira, .FALSE., F ou 0 se a comparao for falsa.
FORTRAN
.LT.
.LE.
.EQ.
.NE.
.GT.
.GE.
==
=
IGUAL A
/=
DIFERENTE DE
>
>
MAIOR QUE
>=
MAIOR OU IGUAL QUE
20 .ne. 30
1000 .lt. 500
! verdadeiro
! falso
Operadores Lgicos
So usados quando so necessrias mais de uma condio relacional ou quando
preciso inverter seu resultado.
FORTRAN
Significado
Juno verdadeiro se os dois operadores
forem verdadeiros
Disjuno verdadeiro se um dos dois
operadores forem verdadeiro
Negao verdadeiro se o operador for falso
Desigualdade Lgica verdadeiro se
somente um dos operadores for verdadeiro
Igualdade Lgica verdadeiro se os dois
operadores forem falsos ou verdadeiros
.AND.
.OR.
.NOT.
.NEQV. ou .XOR.
.EQV.
!
!
!
!
.FALSE.
.TRUE.
.TRUE.
.TRUE.
ou
ou
ou
ou
0
1
1
1
.8.
! .FALSE. ou 0
! .TRUE. ou 1
! .FALSE. ou 0
Prioridade
FORTRAN usa a seguinte relao de prioridades:
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
Existem vrias funes predefinidas em FORTRAN, que podem ser usadas em
qualquer parte do programa.
Funes Trigonomtricas
Nome
SIN (x)
ASIN (x)
COS (x)
ACOS (x)
TAN (x)
ATAN (x)
SINH (x)
COSH (x)
TANH (x)
Definio
Tipo de Argumento Tipo da Funo
seno (radianos). Se x for complexo, a parte real Real ou complexo.
REAL*4
assumida como valor em radianos.
Arcoseno (radianos). Retorna valores na faixa [Real, |x| .le. 1
REAL*4
_/2, _/2 ]
Coseno (radianos) Se x for complexo, a parte real Real ou complexo
REAL*4
assumida como valor em radianos.
Arcocoseno (radianos) ) Retorna valores na faixa
Real, |x| .le. 1
REAL*4
[ 0, _ ]
Tangente (radianos)
Real
REAL*4
Arcotangente (radianos). Retorna valores na faixa
Real
REAL*4
[-_/2, _/2 ]
Seno Hiperblico (radianos)
Real
REAL*4
Coseno Hiperblico (radianos)
Real
REAL*4
Tangente Hiperblica (radianos)
Real
REAL*4
.9.
Funes Diversas
Nome
ALOG10 (x)
ALOG (x)
EXP (x)
ABS (x)
IABS (x)
IFIX (x)
FLOAT (x)
DBLE (x)
CMPLX (x)
SIGN (x,y)
MOD (x,y)
AMOD (x,y)
SQRT (x)
Definio
Tipo de Argumento Tipo da Funo
logaritmo de x na base 10
real
real
logaritmo neperiano de x (x > 0)
real
real
o nmero e (base dos logaritmos
real
real
neperianos) elevado a x
valor absoluto de x
real
real
valor absoluto de x
inteiro
inteiro
converso de real para inteiro, truncando
real
inteiro
converso de inteiro para real
inteiro
real
converte para dupla preciso
real
real (dupla preciso)
converte para o tipo complexo
real
complexo
real
real
fornece valor positivo de x se y 0 e
negativo de x se y < 0
resto da diviso de x por y
inteiro
inteiro
resto da diviso de x por y
real
real
real
real
raiz quadrada de x (x 0)
7. Funes e Subrotinas
Funes e subrotinas podem ser usadas para economizar espao e tempo de
programao j que podem ser usadas vrias vezes num mesmo programa. Outro ponto
importante que elas podem dar ao programa maior clareza, pois vrias seqncias de
clculos ou execues podem vir separadas do restante dos comandos.
O que d grande versatilidade s funes e subrotinas, so os argumentos passados a
elas, que quando variam produzem resultados diferentes. As funes e subrotinas podem vir
em qualquer parte do programa, mas o mais comum que apaream no fim (aps o end de
termino do programa), por motivo de clareza. As variveis e rtulos usados em funes e
subrotinas so locais e por isso devem ser declarados novamente, podendo ser usados os
mesmos nomes de variveis e rtulos de outras funes e subrotinas ou mesmo do programa
principal. Os parmetros necessrios devem ser passados junto com a chamada da funo ou
subrotina, devem vir entre parnteses e separados por virgula. Os nomes das variveis no
precisam ser os mesmos na chamada e definio de uma funo ou subrotina, devendo
apenas estar na mesma ordem.
Funes
Retornam sempre um valor, e a ela podem ser passados qualquer nmero de
parmetros. As funes funcionam de forma semelhante s funes intrnsecas, com a
.10.
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.
A funo retornar o valor do ultimo comando do tipo:
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
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.
.11.
Chamada:
call nome_da_subrotina (lista_de_parmetros)
Definio:
subroutine nome_da_subrotina (lista_de_parmetros)
definio e declarao das variveis e constantes locais
seqncia de comandos
return
end
A palavra chave return opcional.
Exemplo:
call converte_unidades
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 :
read (unidade, formato) lista_de_parmetros
impresso:
write (unidade, formato) lista_de_parmetros
ou
print formato, lista_de_parmetros
Onde lista_de_parmetros representa os dados que sero impressos, e devem vir
separados por vrgula. Podendo conter variveis ou expresses alfanumricas, estas ltimas
devem vir entre apstrofos . unidade representa a unidade onde os dados sero impressos
ou de onde sero lidos; tela, teclado, impressora ou arquivo. formato pode conter uma lista
de formatos de impresso (prximo item, Formatos), um rtulo que indique um comando
.12.
format (que contenha a lista de formatos) ou o smbolo * que indica impresso ou leitura de
forma livre.
As unidades 6 e * se no forem definidas dentro do programa, sero consideradas
como a tela do computador (write ou print). Da mesma forma as unidades 5 ou * so
definidas como o teclado (read). O comando print imprime sempre os resultados na
unidade definida por * ou na tela caso no haja nenhuma definio para de uma unidade
especificada pelo *.
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.
write (*,2,advance=no) Engenharia
write (*,2) Quimica
2 format(a)
.13.
nespecificao1,
n2especificao2
ou
n(especificao1,
format (2x,a,I)
N77 o formato pode vir entre apstrofos e parnteses (esp.1, esp2,..), dentro do
prprio comando de impresso ou leitura.
print (esp.), var1
write (*, (esp.1,esp.2)) var1,var2
read (*, (esp.1,esp.2)) var1,var2
As strings devem vir entre apstrofos duplos (string) nesse formato.
N77
F90
F90
F90
F90
Formato
Iw[.m]
Fw.d
Ew.d[Ee]
Gw.d[Ee]
Dw.d
Lw
A[w]
Zw_hexedit
Bw[.m]
Ow[.m]
ENw.d[Ee]
ESw.d[Ee]
.14.
Uso
Valores Inteiros
Valores Reais
Valores Reais com expoente
Mesmo que Iw[.m], Ew.d[Ee], Lw e A[w]
Valores Reais de Dupla Preciso
Valores Lgicos
Seqncia de Caracteres
Valores Hexadecimais
Valores Binrios
Valores Octadecimais
Valores Reais em Notao de Engenharia
Valores Reais em Notao Cientifica
=> 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
.15.
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
.16.
+55.800E-003
hoje e Segunda-
10. Arquivos
Quando se deseja trabalhar com grandes quantidades de dados, o melhor armazenlos numa unidade de memria secundria, ou seja em arquivos. Um programa pode gerar
tantos dados que todos eles no caberiam na tela de uma s vez, e ainda seriam perdidos ao
finalizar o programa. Os dados salvos em arquivos podem ser usados pelo prprio programa ou
exportados para serem processados de outra forma. Arquivos de leitura economizam um tempo
precioso para o usurio do programa pois ele no vai precisar enviar dados via teclado, e com
arquivos milhares de dados podem ser lidos em fraes de segundos.
O primeiro passo para se usar arquivos em FORTRAN indicar ao programa qual o
nome do arquivo e o nmero da unidade referente a ele.
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.
F90 o rtulo unidade pode ser uma string.
Outras opes para abertura e fechamento de arquivos podem ser encontradas no
Anexo B.
Apesar de se poder usar qualquer extenso de arquivo ou at omiti-la, as extenses
.dat para leitura e .out para sada so mais comumente encontradas.
Quando no for utilizado o comando open, alguns compiladores emitiro uma
mensagem na tela pedindo um nome, podendo o usurio escolher um nome diferente a cada
vez que o programa for executado. Em outros compiladores sero dados nomes padro como
fort.1, fort.2, etc para cada arquivo utilizado que no foi aberto. Todos os arquivos devem estar
.17.
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.
Arquivos fechados podem ser reabertos em qualquer parte do programa.
Outros Recursos
rewind unidade
backspace unidade
Programa
character *15a,b,c
open(20,file='arqui.out')
open(30,file='arqui.dat')
read (30,*) a
write(20,*) ' este um '
write(20,*) ' arquivo de '
write(20,*) ' sada '
read (30,*) b
rewind 30
read (30,*) c
write(20,*) a
write(20,*) b,c
end
Arquivo arqui.dat
' Qumica' ' Fsica'
' Engenharia'
Arquivo arqui.out
este um
arquivo de
sada
Qumica
Engenharia
Qumica
.18.
Resultado
10
20
30.000000
10
20
10
.19.
2. Comando GO TO ou GOTO
O quando se deseja que o comando do programa avance ou recue em sua estrutura de
forma no seqencial, usa-se o comando goto ou go to.
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
10
20
30
10
1
20
2
30
goto 20
write (*,*)
write (*,*)
write (*,*)
end
goto 1
write (*,*)
continue
write (*,*)
continue
write (*,*)
end
Resultado
linha 20
linha 30
linha 20
linha 30
3. Estrutura Condicional
Estrutura Condicional Simples
if (expresso de teste) comando
ou
if (expresso de teste) then
seqncia de comandos
end if
Quando a expresso de teste for verdadeira os comandos sero executados, quando
for falsa o programa segue para o prximo comando logo abaixo da estrutura condicional. A
primeira opo s valida quando for executado um nico comando. Este comando pode ser
de qualquer tipo, atribuio, escrita, leitura, goto ou interrupo do programa.
.20.
Resultado
a<b
c=
30 30 20
case)
seleo 1)
seleo 2)
seleo n)
F90
nome_case: SELECT CASE (exp. case)
CASE (lista de seleo 1)
comandos 1
CASE (lista de seleo 2)
comandos 2
...
CASE (lista de seleo n)
comandos n
CASE DEFAULT
comandos d
END SELECT nome_case
ou literal (somente um
.21.
Resultado
a=20
i esta entre d e m
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.
.22.
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)
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
Enquanto exp. teste for verdadeira a seqncia de comandos ser executada.
Programa
real*8 a,b
a=0
b=0
1 if(a.lt.0) goto 2
a=cos(b)
b= b+.125
write (*,*) a
goto 1
2 continue
end
Resultado
1.000000000000000
9.921976672293290E-001
9.689124217106447E-001
9.305076219123143E-001
8.775825618903728E-001
8.109631195052179E-001
7.316888688738209E-001
6.409968581633251E-001
5.403023058681398E-001
4.311765167986662E-001
3.153223623952687E-001
1.945477079889872E-001
7.073720166770291E-002
-5.417713502693632E-002
.23.
Resultado
2
3
4
5
1
1
1
0
+2.97646E+000
--------------+57.67400E+006
--------------+449.99999E-003
--------------+479.42554E-003
---------------
09
10
11
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
integer a(5,3), b(3)
do i=1,5
do j=1,3
a(i,j)=10*i+j
b(j)=100+j**3
enddo
enddo
write (*,1) ((a(i,j), i=1,5) &
&
,b(j), j=1,3)
1 format ( 2x,i4,' - ',i5,' - ',i4)
end
11
41
12
42
13
43
Resultado
21 31
51 - 101
22 32
52 - 108
23 33
53 - 127
.24.
Resultado
o valor de i=2
IF Com Deslocamento
Uma outra maneira de se deslocar num programa, usando agora um comando if a
seguinte:
if (exp. numrica) r1,r2,r3
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..
.25.
Resultado
i<2
i=2
i>2
Resultado
a(-03,+01)=-03
a(-03,+02)=+09
a(-03,+03)=-27
a(-02,+01)=-02
a(-02,+02)=+04
a(-02,+03)=-08
a(-01,+01)=-01
a(-01,+02)=+01
a(-01,+03)=-01
a(+00,+01)=+00
a(+00,+02)=+00
a(+00,+03)=+00
a(+01,+01)=+01
a(+01,+02)=+01
a(+01,+03)=+01
.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).
tipo constante1, constante2,...
parameter ( constante1 = valor, constante2 = valor,...)
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.
tipo , parameter :: constante1=valor, constante2=valor,...
real pi,r(3),a
parameter (pi=3.1459)
do i=1,3
r=i**2
a=area(r(i),pi)
print *,a
enddo
end
function area(r,pi)
real r,area
area=2*pi*r
return
end
Programa
real pi,r(3)
parameter (pi=3.1459)
do i=1,3
r=i**2
call area(r(i),pi)
enddo
end
resultado
6.291800
25.167200
56.626200
subroutine area(r,pi)
real r,a
a=2*pi*r
print *,a
return
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
.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:
type (nome_type) :: nome
Atribuio:
nome = nome_type (valor das variveis)
ou
nome%nome_varivel = valor
Programa
type anivers
character nome*10
character mes*10
integer*1 dia
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
Resultado
Fevereiro
Helder
17
Carlo
12
Keila
Agosto
22
DATA
O modo mais estruturado de se atribuir valores iniciais a variveis pelo comando
data. As diferenas entre o data e parameter que as variveis declaradas em data
podem alterar seu valor durante o programa, e essas variveis podem ser vetores ou matrizes.
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.
.28.
Resultado
010203040506
070809101112
05 03 10
T
F
preto
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.
common /nome/lista de variveis/nome2/lista de variveis2,...
O nome do bloco opcional, e se for repetido, as variveis sero agrupadas em um
mesmo bloco. A ausncia do nome e o nome / / tm o mesmo significado. As variveis de um
common sem nome no podem ser declaradas pelo comando data. Uma mesma varivel
no pode ocupar mais de um comando common.
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.
Na declarao de um common recomendvel que se siga uma ordem crescente do
tamanho das variveis. O tamanho de uma varivel dado pelo nmero de bites que ela
ocupa. A seqncia para essa declarao : logical, character, integer, real, vetores e matrizes.
As matrizes e vetores devem seguir esta mesma seqncia de tamanhos (vetores logical,
vetores character, ...). As strings so consideradas vetores de caracteres.
Alguns compiladores apenas mostraro mensagens de advertncia quando est
seqncia estiver incorreta, outros no avaliam esta ordem e consideram como corretas
quaisquer ordem em que as variveis aparecerem.
.29.
Resultado
12.000
2.000
4.000
! 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
As variveis declaradas em um common com nome podem receber valores iniciais de
uma forma mais estruturada. No block data podem ser usados os seguintes recursos:
common(com nome), parameter, data, dimension e variveis derivadas de um type.
block data nome_bloco
declaraes e atribuies
end
O nome_bloco opcional e deve seguir as mesmas regras para nomes de variveis.
4. Modularizao
INCLUDE
Declaraes, atribuies, common e outros comados que estejam em um arquivo de
texto com o mesmo formato usado no programa podem ser adicionados ao programa principal
atravs do comando include. Esses arquivos podem ser adicionados a outros arquivos
include ao programa principal e a funes e subrotinas. O mesmo arquivo pode ser usado
vrias vezes. Os arquivos sero interpretados como parte do programa, e por isso devem
seguir as mesmas regras do programa normal escrito em FORTRAN.
.30.
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.
.31.
SIND (X)
CSIN (X)
CDSIN (X)
DSIN (X)
DSIND (X)
ASIN (X)
ASIND (X)
DASIN (X)
DASIND (X)
COS (X)
COSD (X)
CCOS (X)
CDCOS (X)
DCOS (X)
DCOSD (X)
AOS (X)
ACOSD (X)
DACOS (X)
DACOSD (X)
TAN (X)
TAND (X)
DTAN (X)
DTAND (X)
COTAN (X)
DCOTAN (X)
Definio
seno (radianos). se x for
complexo, a parte real
assumida como valor em
radianos.
seno (graus se x for
complexo, a parte real
assumida como valor em
graus.
seno (radianos)
seno (radianos)
seno (radianos)
seno (graus)
Arcoseno (radianos). retorna
valores na faixa [-_/2, _/2 ]
Arcoseno (graus) retorna
valores na faixa [-90, 90 ]
Arcoseno (radianos). retorna
valores na faixa [-_/2, _/2 ]
Arcoseno (graus) retorna
valores na faixa [-90, 90 ]
coseno (radianos) se x for
complexo, a parte real
assumida como valor em
radianos.
coseno (graus) se x for
complexo, a parte real
assumida como valor em
graus.
coseno (radianos)
coseno (radianos)
coseno (radianos)
coseno (graus)
Arcocoseno (radianos) )
retorna valores na faixa [ 0,
_]
Arcocoseno (graus) retorna
valores na faixa [ 0, 180 ]
Arcocoseno (radianos) )
retorna valores na faixa [ 0,
_]
Arcocoseno (graus) ) retorna
valores na faixa [ 0, 180 ]
tangente (radianos)
tangente (graus)
tangente (radianos)
tangente (graus)
cotangente (radianos)
cotangente (radianos)
Parmetro
real ou complexo.
Resultado
real*4
real ou complexo
real*4
complex*4
complex*8
real*8
real*8
real, |x| .le. 1
complex*4
complex*8
real*8
real*8
real*4
real*4
real*8
real*8
real*8
real*8
real ou complexo
real*4
real ou complexo
real*4
complex*4
complex*8
real*8
real*8
real, |x| .le. 1
complex*4
complex*8
real*8
real*8
real*4
real*4
real*8
real*8
real
real
real*8
real*8
real. x no pode ser 0.
real*8. x no pode ser 0.
real*4
real*4
real*8
real*8
real*4
real*8
Definio
Arcotangente (radianos). )
retorna valores na faixa [_/2, _/2 ]
ATAND (X)
Arcotangente (graus). )
retorna valores na faixa [-90,
90 ]
DATAN (X)
Arcotangente (radianos).
retorna valores na faixa [_/2, _/2 ]
DATAND (X)
Arcotangente (graus).
retorna valores na faixa [-90,
90 ]
ATAN2 (Y,X)
Arcotangente (y / x) em
radianos. retorna valores na
faixa [-_,_ ]
ATAN2D (Y,X)
Arcotangente (y / x) em
graus. retorna valores na
faixa [-180, 180 ]
DATAN2 (Y,X)
Arcotangente (y / x) em
radianos retorna valores na
faixa [-_,_ ])
DATAN2D (Y,X) Arcotangente (y / x) em
graus. retorna valores na
faixa [-180, 180 ]
SINH (X)
seno hiperblico (radianos)
DSINH (X)
seno hiperblico (radianos)
COSH (X)
coseno hiperblico
(radianos)
DCOSH (X)
coseno hiperblico
(radianos)
TANH (X)
tangente hiperblica
(radianos)
DTANH (X)
tangente hiperblica
(radianos)
.32.
real
Parmetro
Resultado
real*4
real
real*4
real*8
real*8
real*8
real*8
real. x e y no podem
ambos ser 0.
real*4
real*8
real*8 x e y no podem
ambos ser 0.
real*8
real
real*8
real
real*4
real*8
real*4
real*8
real*8
real
real*4
real*8
real*8
2. Funes Genricas
Nome
DPROD(A,B)
EOF(UNIT)
SIGN(X,Y)
ISIGN(X,Y)
DSIGN(X,Y)
Definio
a*b
verifica o final da unidade
unit
retorna x com o sinal de y
retorna x com o sinal de y
retorna x com o sinal de y
Parmetro
real*4, real*4
integer*2
Resultado
real*8
logical
real ou inteiro
inteiro
real*8
real ou inteiro
inteiro
real*8
.33.
3. Exponenciais
O nmero e elevado a X (eX )
Nome
CDEXP (X)
CEXP (X)
DEXP (X)
EXP (X)
Parmetro
complex*16
complex*8
real*8
real, inteiro ou complexo
Resultado
complex*16
complex*8
real*8
mesmo que o parmetro
4. Logaritmos
Nome
LOG (X)
Definio
logaritmo natural
Parmetro
real ou complexo
ALOG (X)
DLOG (X)
CLOG (X)
CDLOG (X)
LOG10 (X)
logaritmo natural
logaritmo natural
logaritmo natural
logaritmo natural
logaritmo na base 10
real*4
real*8
complex*8
complex*16
real
ALOG10 (X)
DLOG10 (X)
logaritmo na base 10
logaritmo na base 10
real*4
real*8
Resultado
mesmo que o
parmetro
real*4
real*8
complex*8
complex*16
mesmo que o
parmetro
real*4
real*8
5. Mximos
Nome
MAX(X1,X2,..)
Definio
maior valor
Parmetro
qualquer tipo
MAX0(X1,X2,..)
AMAX1(X1,X2,..)
AMAX0(X1,X2,..)
MAX1(X1,X2,..)
DMAX1(X1,X2,..)
maior valor
maior valor
maior valor
maior valor
maior valor
inteiro
real
inteiro
real
real*8
Resultado
maio tipo entre os
valores
inteiro
real
real
inteiro
real*8
6. Mnimos
Semelhante as funes de mximo (MIN, MIN0, AMIN1, AMIN0, MIN1, DMIN1)
7. Restos
Resto da diviso de X por Y
Nome
MOD(X,Y)
AMOD(X,Y)
DMOD(X,Y)
Parmetro
real ou inteiro
real*4
real*8
Resultado
real ou inteiro
real*4
real*8
.34.
8. Raiz Quadrada de X
Nome
Parmetro
real ou complexo
real*8
complex*8
complex*16
SQRT(X)
DSQRT(X)
CSQRT(X)
CDSQRT(X)
Resultado
real ou complexo
real*8
complex*8
complex*16
9. Truncamento de X
Nome
Parmetro
AINT(X)
DINT(X)
Resultado
real
real*8
real
real*8
10. Arredondamento de X
Nome
Parmetro
NINT(X)
DNINT(X)
ANINT(X)
IDNINT
Resultado
real
real*8
real
real*8
inteiro
real*8
real
inteiro
Parmetro
real ou inteiro
real*8
inteiro
Resultado
real ou inteiro
real*8
inteiro
Definio
.true. se a for vetor ou
matriz
menor valor que pode
ser incrementado
maior valor possvel
maior expoente
possvel
menor expoente
possvel
se y positivo retorna
o maior real se
negativo o menor real
nmero de casas
decimais
menor valor positivo
que pode ser
armazenado
Parmetro
Resultado
todos
lgico
real
real
real ou inteiro
real
real ou inteiro
real
real
real
real
real
real
real
real
real
.35.
Parmetro
real, inteiro ou complexo
real, inteiro ou complexo
real*4
real, inteiro ou complexo
real, inteiro ou complexo
real*8
real, inteiro ou complexo
complex*16
inteiro
real*8
real*8 ou complexo
real*8 ou complexo
inteiro, real, complexo
inteiro, real, complexo
ASCII
integer*4
Resultado
inteiro
integer*1, integer*2, integer*4, c
integer
inteiro
integer*2
integer*4
inteiro
real*4
real*8
real*4
real*4
real*8
real*8
complexo
complex*16
inteiro
ASCII
14. Complexos
Nome
IMAG(X)
DIMAG(X)
AIMAG(X)
CONJG(X)
DCONJG(X)
Definio
retorna a parte
imaginria
retorna a parte
imaginria
retorna a parte
imaginria
Parmetro
complexo
real
Resultado
complex*16
real*8
complex*8
real*4
retorna o complexo
conjugado
retorna o complexo
conjugado
complex*8
complex*8
complex*16
complex*16
15. Caracteres
Nome
LEN(X)
LGE(X,Y)
LGT(X,Y)
LLE(X,Y)
LLT(X,Y)
INDEX(X,Y)
LEN_TRIM(X)
SCAN(X,Y)
VERIFY(X,Y)
Definio
tamanho de x
compara x e y se x >= y .true.
compara x e y se x > y .true.
compara x e y se x <= y .true.
compara x e y se x < y .true.
procura y em x e retorna a posio
tamanho de x menos o nmero de
espaos
procura um dos caracteres de y em x e
retorna o nmero de ocorrncias
procura um dos caracteres de y em x e
retorna a posio da primeira no
ocorrncia
Parmetro
character
character
character
character
character
character
character
Resultado
inteiro
logical
logical
logical
logical
inteiro
inteiro
character
inteiro
character
inteiro
.36.
Parmetro
complexo ou real
inteiro
real*8
complex*16
complex*16
ABS(X)
IABS(X)
DABS(X)
CABS(X)
CDABS(X)
Os
formula:
valores
absolutos
(real )2 + (imag )2
dos
dados
complexos
Resultado
complexo ou real
inteiro
real*8
complex*16
real*8
so
calculados
pela
seguinte
.37.
.38.
recl Expresso inteira. Representa o tamanho de cada dado em bytes. obrigatrio para
access=DIRECT.
share Expresso alfanumrica. DENYRW ignora mode=READWRITE, DENYWR ignora
mode=WRITE, DENYRD ignora mode=READ, DENYNONE ignora qualquer mode,
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
3. Escrita (WRITE)
WRITE ([UNIT=] unit [ , [{[ FMT=] format] | [ NML=] nml }]
[ , ERR=errlabel] [ , IOSTAT=iocheck] [ , REC=rec] ) iolist
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.
unit Expresso inteira. Indica o nmero da unidade.
format Expresso inteira. Indica o rtulo de um comando format. Expresso alfanumrica.
Expresso que contenha os formatos de impresso.
nml Lista de variveis serem impressas, se estiver presente iolist deve ser omitida.
.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.
iolist Lista de variveis serem impressas.
4. Leitura (READ)
READ { { format, | nml } | ([UNIT=]unit [ , [ {[FMT=] format] |
[NML=]nmlspec}] [ , END=endlabel] [ , ERR=errlabel] [ , IOSTAT=iocheck]
[, REC=rec])} iolist
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.
unit Expresso inteira. Indica o nmero da unidade.
format Expresso inteira. Indica o rtulo de um comando format. Expresso alfanumrica.
Expresso que contenha os formatos de leitura.
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.
iolist Lista de variveis serem lidas.
.40.
.41.