Você está na página 1de 41

1

Conceitos da Linguagem

1.1

Introduo

Em FORTRAN existem basicamente duas formas de se escrever um programa: com forma


fixa ("fixed form") ou com forma livre ("free form"). Sendo este segundo disponvel apenas
para compiladores baseados em WINDOWS. Outro ponto importante so os comandos
validos somente nos novos compiladores (por exemplo Microsoft Developer Studio) que
aceitam programas em FORTRAN 90. Por isso ser adotado o seguinte critrio para as
explicaes:

tpicos precedidos com a identificao WIN s so validos para WINDOWS;

tpicos precedidos de F90 so vlidos apenas para os compiladores que aceitam


comandos FORTRAN 90.

Deve ficar claro que compiladores para FORTRAN 90 aceitam tambm os outros dois tipos,
e os baseados em WINDOWS 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 FORTRAN 90. Os
compiladores em WINDOWS possuem um editor prprio, que deve ser usado pois possui
muitos recursos adicionais, como por exemplo o destaque das palavras chaves.

1.2

Formato da linguagem

Os seguintes critrios devem ser seguidos para se escrever um programa em FORTRAN no


modo de formulrio fixo:

colunas 1 a 5: so usadas para escrever os rtulos (label) ou nmeros de


comando. Estes nmeros devem ser inteiros e estar totalmente contido nestas
colunas. No podem se repetir e no preciso estar em ordem crescente. So
usados para que outros comandos possam identificar aquela linha;

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), podem existir at 19 linhas de continuao;

colunas 7 a 72: comandos ou comentrios;

colunas 73 a 80: campos de identificao, so usados pelo computador, portanto


no se deve escrever nestas colunas.

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:

Pg. 1 de 41

as linhas de continuao so indicadas pelo smbolo & no fim da sentena, e o

que estiver na linha abaixo ser tomado como continuao. permitida a


insero de comentrios aps o &;
os rtulos devem ser os primeiros caracteres da linha, e podem estar em

qualquer coluna.

1.3

Conceitos Bsicos
1.

Comentrios: no so interpretados pelo compilador, um bom programa deve


conter muitos para que fique o mais claro possvel. Em FORTRAN a letra C ou o
caractere * na primeira coluna indicam que toda a linha um comentrio. Na
linha de comentrio permitido o uso de qualquer caractere, especial ou no.
WIN - o ponto de exclamao ! indica que o que vem aps ele comentrio,
ele pode vir em qualquer posio, inclusive aps comandos.

2.

Variveis e Nomes de Blocos: devem ter no mximo seis letras, no permitido


o uso de caracteres espaciais e no podem comear com um nmero.
WIN - podem ter 31 caracteres, inclusive o caractere upercase _

3.

Constantes:

Numricas: podem conter qualquer valor real, inteiro ou complexo. 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 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 virgula da parte
imaginria.

Alfanumricas: (so as strings, seqncias de letras e/ou nmeros) podem


conter qualquer seqncia de caracteres. Deve vir entre aspas " " ou
apstrofos . As aspas tm preferncia sobre os apstrofos, portanto um
valor literal pode conter apstrofos, desde que seu valor venha entre aspas.
No permitido o uso de caracteres especiais e letras acentuadas. Uma outra
forma de se declarar valores alfanumricos o uso de wHvalorliteral, onde w
o nmero de caracteres do valor alfanumrico.

4.

Maisculas e Minsculas: o FORTRAN no faz qualquer distino entre letras


maisculas e minsculas. permitido inclusive o uso do nome da varivel escrita
de formas diferentes no mesmo programa. EX.: VAR = var = Var.

Pg. 2 de 41

5.

Os

programas

podem

conter

no

incio

seu

nome

(program

nome_do_programa), e devem terminar com a palavra end.


6.

Outra forma de parar o programa, que pode ser usada em qualquer parte dele,
usando a palavra stop. O programa terminar independentemente de haver
mais comandos na seqncia.

1.4

Variveis

1.4.1

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 as variveis que
comeam com as letras I at N como inteiras (INTEGER*4) e todas as outras como reais
(REAL*4).
Esta forma de declarao implcita pode ser modificada usando o comando implicit tipo
(a1-a2,b1-b2,...) antes do tipo de varivel. Sendo a1, a2, b1, b2 quaisquer letras do
alfabeto. Quando no se deseja que nenhuma varivel seja declarada implicitamente usase o comando implicit none.
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 de 4 linhas por 3 colunas. As variveis podem receber valores
iniciais usando /valor/, logo aps sua declarao.
implicit integer (a-t,x,y,z)
integer num_dias/3/
real temp(3)
character data1*8,*8 data2,data3
data1 = "12\10\98"
data2 = "20\11\98"
data3 = "15\3\99"
temp(1)= 25.6
temp(2)= 22.4
temp(3)= 22.8
O sinal = atribui a varivel o valor que vem sua direita (item 5).
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
Inteiras (INTEGER):
INTEGER*1 128 a 127
INTEGER*2 32,768 a 32,767
INTEGER*4 2,147,483,648 a 2,147,483,647
INTEGER*4 pode ser representado somente por INTEGER.

Pg. 3 de 41

Reais (REAL):
Preciso simples at 6 casas decimais:
REAL*4 ou REAL 3.402823E+38
Incremento mnimo de 1.175494E-38
Preciso dupla at 15 casas decimais:
REAL*8 ou DOBLE PRECISION 1.797693134862316D+308
A parte exponencial deve ser separada por um d ou D no lugar do e ou E.
WIN - pode ser usado o e ou E para separar a parte exponencial. No s isso mas
tambm todas as outras funes (item 6 primeira parte) podem ser iguais a de um real
comum para compiladores baseados em WINDOWS.
Complexas (COMPLEX):
Preciso simples at 6 casas decimais:
COMPLEX*8 ou COMPLEX
Preciso dupla at 15 casas decimais:
COMPLEX*16
Os valores que uma varivel complexa pode assumir so os mesmos que os reais.
Alfanumricas (CHARACTER):
CHARACTER NOME*w
(var1 e var2 possuem o mesmo tamanho w)
CHARACTER (LEN = w) var1, (LEN=w2) var2
(var1 tem tamanho w e var2 tamanho w2)
Lgicas (LOGICAL):
LOGICAL NOME

Pg. 4 de 41

Podem assumir os valores .TRUE. (VERDADEIRO) ou .FALSE. (FALSO)


Ou somente T e F

1.5

Operadores

1.5.1

Prioridade
Operador

Prioridade

**

1a

2a

2a

3a

3a

.EQ.

4a

.NE.

4a

.GT.

4a

.GE.

4a

.LT.

4a

.LE.

4a

.NOT.

5a

.AND,

6a

.OR.

7a

O uso de parnteses pode ser feito para trocar a ordem de prioridade.


(20.GT.10.AND.20.GT.25).OR.(10.LT.20.AND.10.LT.(3*10))
1.5.2

=> .TRUE.
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
Exemplo

1.5.3

nome = 'Engenharia Quimica'


ano = 1999
Literais

Uma funo til para variveis literais a concatenao, ou a juno de duas ou mais
palavras. Em FORTRAN a concatenao feita pelo operador //.
Exemplo
a = 'tele'
b = 'viso'
c = a//b => c = 'televiso'

Pg. 5 de 41

1.5.4

Aritmticos

Executam operaes aritmticas comuns.


FORTRAN Matemtica Significado
Tradicional
+

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)
1.5.5

Relacionais

Comparam variveis, constantes ou expresses e retornam .TRUE. ou 1 se a


comparao for verdadeira, .FALSE. ou 0 se a comparao for falsa.
FORTRAN Matemtic

Significado

a
Tradicion
al
.LT.

<

MENOR QUE

.LE.

MENOR OU IGUAL
QUE

.EQ.

IGUAL A

.NE.

DIFERENTE DE

.GT.

>

MAIOR QUE

.GE.

MAIOR OU IGUAL
QUE

Exemplo
20.NE.30
=> verdadeiro
1000.LT.500
=> falso
1.5.6

Lgicos

So usados quando necessria mais de uma condio relacional ou quando preciso


inverter seu resultado.

Pg. 6 de 41

FORTRAN Significado
.AND.

Juno

.OR.

Disjuno

.NOT.

Negao

Exemplo
10.GT.5.AND.20.GT.25 => .FALSE.
10.GT.5.OR.20.GT.25 => .TRUE.
=> .TRUE.
.NOT.20.GT.25

1.6

Funes Internas

1.6.1

Introduo

Existem vrias funes predefinidas em FORTRAN, que podem ser usadas em qualquer
parte do programa.
1.6.2 Trigonomtricas
Nome
SIN(x)

Definio

Tipo de

Tipo da

Argumento

Funo

seno (radianos). Se x for complexo, a

Real ou

REAL*4

parte real assumida como valor em

complexo.

radianos.
ASIN(x)

Arcoseno (radianos). Retorna valores na Real, |x|.LE.1

REAL*4

faixa [-p/2, p/2]


COS(x)

Coseno (radianos) Se x for complexo, a

Real ou

parte real assumida como valor em

complexo

REAL*4

radianos.
ACOS(x) Arcocoseno (radianos). Retorna valores Real, |x|.LE.1

REAL*4

na faixa [0,p]
TAN(x)

Tangente (radianos)

Real

REAL*4

Real

REAL*4

Real

REAL*4

COSH(x) Coseno Hiperblico (radianos)

Real

REAL*4

TANH(x) Tangente Hiperblica (radianos)

Real

REAL*4

ATAN(x) Arcotangente (radianos). Retorna valores


na faixa [-p/2,p/2]
SINH(x)

Seno Hiperblico (radianos)

Outras funes trigonomtricas podem ser encontradas no Apndice A.


1.6.3

Outras Funes
Nome

Definio

Tipo de

Tipo da Funo

Argumento
ALOG10(x) logaritmo de x na base 10
ALOG(x)

logaritmo neperiano de x (x >

real

real

real

real

real

real

0)
EXP(x)

o nmero e (base dos

Pg. 7 de 41

logaritmos neperianos)
elevado a x
ABS(x)

valor absoluto de x

real

real

IABS(x)

valor absoluto de x

inteiro

inteiro

IFIX(x)

converso de real para inteiro,

real

inteiro

truncando
FLOAT(x)

converso de inteiro para real

inteiro

real

DBLE(x)

converte para dupla preciso

real

real (dupla
preciso)

CMPLX(x)

converte para o tipo complexo

real

complexo

SIGN(x,y)

fornece valor positivo de x se

real

real

y 0 e negativo de x se y < 0
MOD(x,y)

resto da diviso de x por y

inteiro

inteiro

AMOD(x,y)

resto da diviso de x por y

real

real

SQRT(x)

raiz quadrada de x (x 0)

real

real

Outras funes internas podem ser encontradas no Apndice A.

1.7

Funes e Subrotinas

1.7.1

Introduo

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 usadas em funes e
subrotinas so locais e por isso devem ser declaradas novamente, podendo ser usado os
mesmos nomes de variveis 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 preciso ser os mesmos na chamada e definio de uma funo ou subrotina,
devendo apenas estar na mesma ordem.
1.7.2

Funes

Retornam sempre um valor, e a ela podem ser passados qualquer nmero de parmetros.
As funes funcionam de forma semelhante as funes internas, com a diferena de que
agora o programador que define o que a funo de 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.

Pg. 8 de 41

Chamada:
function nome_da_funo(lista_de_parmetros)
definio e declarao das variveis e constantes locais
seqncia de comandos
return
end
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. 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:
varivel = nome_da_funo
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
1.7.3

Subrotinas

No retornam nenhum valor, e tambm a elas podem ser passados qualquer nmero de
parmetros. Nas subrotinas podem conter qualquer tipo de comandos como imprimir
resultados, abrir arquivos (estes sero vistos frente) ou executar clculos. Como ocorre
com as funes, as subrotinas podem chamar outras subrotinas.
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.

Pg. 9 de 41

1.8

Entrada e Sada

1.8.1

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
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, esta ultima
deve 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.
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
usando especificada pelo *.
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 separado por espaos (no caso de strings viro 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.

write (*,2,advance='no') 'Engenharia'


write (*,2) ' Qumica'
format(a)
!=> Engenharia Qumica

a significa que ser impressa uma string de qualquer tamanho (item 9).

Pg. 10 de 41

Outras opes de impresso e leitura so encontrados no Apndice B.

1.9

Formatao

1.9.1

O Recurso FORMAT

A formatao serve para que os dados sejam impressos ou lidos de uma forma especifica,
determinado pelo programador. composta por uma seqncia de especificaes que
determinaro como os dados sero processados. Cada um dessas especificaes deve vir
separado 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 especificado
pelo prprio compilador. um recurso til para se evitar erros.
O FORTRAN no considera a primeira coluna da umidade de leitura e impresso quando a
sada ou entrada formatada, por isso deve-se incluir uma casa de impresso a mais para
dados. Para formato livre no necessrio pois o FORTRAN os posiciona automaticamente.
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.
Caso o nmero de especificaes seja menor que o de variveis a serem lidos ou
impressos, a ultima especificao ou a ultima seqncia, caso seja usado o recurso
n(especificao1, especificao2, ...), ser repetida at que se complete o nmero
necessrio. Isto no valido para constantes.
Quando o nmero de especificaes maior que os de dados a serem impressos as
ultimas sero desprezadas.
A forma de se declarar uma formatao a seguinte:
r

format (especificao1, especificao2, ...)

Strings devem vir entre apstrofos duplos (string) nesse formato.

WIN

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

Zw_hexedit Valores Hexadecimais

Pg. 11 de 41

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 representa o nmero de casas decimais e e
representa o nmero de casas para o expoente.
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.
a = 12345
read (*,'(f5.3)') a !=> a = 12.345
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
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 elas, sero tomados apenas os w
primeiros caracteres. Se forem menores, elas sero alinhadas a direita e os outros espaos
deixados em branco.

Nome = 'belo horizonte'


read (*, '(a10)') nome
write (*, '(a15)') nome

!=> belo horiz


!=> 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 preciso de mais casas de impresso que as indicadas no
format, sero impressos somente * naquele campo.

Pg. 12 de 41

pi = 3.1416
print '(1x,E7.3e2)', pi
print '(1x,E8.3e2)', pi
1.9.3

!=> *******
!=> .314E+01

Outros Recursos para Formatao

Alguns recursos adicionais so permitidos para read ou write.


Formato
string
F90

Uso
Transmite uma string para a sada
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

WIN

nX

Deixa n posies em branco

SP

Escreve o sinal + onde ele opcional

SS

Omite o sinal + onde ele opcional

Retorna ou padro ss

Muda de linha

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

Antes ou depois de ', ", /, \, nH, $ ou : a vrgula opcional.


Exemplo:
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 '',a8)') dia

Pg. 13 de 41

Resultado:
+.240E+02 +55.800E-003
hoje Segunda-

1.10

Arquivos

1.10.1 Abertura e Fechamento


Quando se deseja trabalhar com grandes quantidades de dados, o melhor armazena-los
numa unidade de memria secundaria, 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 segundos.
O primeiro passo para se usar arquivos em FORTRAN indicar ao programa qual o nome
do arquivo e o nmero de unidade referente a ele.
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 nesta unidade. A disposio dos dados nos 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 subrotinas), desde
que venha antes de um comando que o utilize.
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, o programa emitir uma mensagem na tela
pedindo o seu nome, podendo o usurio escolher um nome diferente a cada vez que o
programa for executado. Todos os arquivos devem estar ou sero criados no mesmo
diretrio em que estiver o programa.
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 identificado por outro comando ou
funo (Apndices A e B).

Pg. 14 de 41

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.
Arquivos fechados podem ser reabertos em qualquer parte do programa.
1.10.2 Outros Recursos
rewind unidade

(volta o controle ao primeiro espao do arquivo)

backspace unidade (volta o controle ao primeiro espao do arquivo)


Exemplo:
character*15 a,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
Resultado:
Resultado:
Arquivo 'arqui.dat'
' Qumica' ' Fsica'
' Engenharia'
Arquivo 'arqui.out'
este um
arquivo de
sada
Qumica
Engenharia Qumica

Estruturas de Programao

2.1

Estrutura Seqencial

Pg. 15 de 41

Os programas em FORTRAN devem conter os comandos escritos na ordem em que sero


executados, com exceo das funes, subrotinas e laos de repetio. Portanto um
programa em FORTRAN deve seguir o seguinte padro:
declarao 1
declarao 2
...
declarao n
comando 1
comando 2
...
end
Onde as declaraes so opcionais (item 4 primeira parte).
O comando end indica o fim do programa. Se o programador preferir pode finalizar o
programa prematuramente usando o comando stop ou call exit.
Exemplo 1:
integer*1 a,b
a=10
b=20
c=30
write (*,*) a
write (*,*) b
write (*,*) c
end
Resultado:
10
20
30.000000
Exemplo 2:
integer*1 a,b
a=10
b=20
c=30
write (*,*) a
write (*,*) b
stop
write (*,*) c
end
Resultado:
10
20

Pg. 16 de 41

Exemplo 3:
integer*1 a,b
a=10
b=20
c=30
write (*,*) a
call exit
write (*,*) b
write (*,*) c
end
Resultado:
10

2.2

Comando 'GO TO' ou 'GOTO'

O quando se deseja que o comando do programa avance ou recue em sua estrutura, usase 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, se no for necessria incluso de nenhum comando,
pode-se usar a palavra chave continue, que no ir interferir em nada no programa.
Exemplo:
goto 20
10 write (*,*) ' linha 10'
20 write (*,*) ' linha 20'
30 write (*,*) ' fim do programa'
end
Resultado:
linha 20
fim do programa

2.3

Estrutura Condicional

2.3.1

Estrutura Condicional Simples


if (expresso lgica) comando
ou
if (expresso lgica) then
seqncia de comandos
end if

Quando a expresso lgica for verdadeira os comandos sero executados, quando for
falsa o programa segue para o prximo comando logo abaixo da estrutura condicional. A

Pg. 17 de 41

primeira opo s valida quando for executado um nico comando. Este comando pode
ser de qualquer tipo, atribuio, escrita, leitura ou goto.
2.3.2

Estrutura Condicional Composta


if (expresso de teste) then
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.
permitido o uso de estruturas condicionais umas dento das outras.
Exemplo:
implicit integer (a-z)
a=10
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
end
Resultado:

2.3.3

a<b
c= 30
Estrutura Condicional Composta Simplificada

Uma outra forma de se usar uma estrutura condicional composta (somente WINDOWS e
FORTRAN 90) usando o comando case.
WIN:
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

Pg. 18 de 41

F90:
nome_case: select case
case (lista de seleo
comandos 1
case (lista de seleo
comandos 2
...
case (lista de seleo
comandos n
case default
comandos d
end select nome_case

(exp. case)
1)
2)

n)

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:
Estrutura

Condio para ser


verdadeira

case (valor)

Exp. teste igual valor

case (:valor)

Exp. teste menor que


valor

case (valor:)

Exp. teste maior que


valor

case (valor1:valor2)

Exp. teste entre valor1 e


valor2

case

Exp. teste igual valor1

(valor1,valor2,...,valo

ou igual valor2 ou ...

rn)

valor n.

No permitida a superposio de valores.


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.

Pg. 19 de 41

Exemplo 1:
i=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
Resultado:
a=20
Exemplo 2:
valor_i: character i*1
i='h'
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
Resultado:
i esta entre d e m

2.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.
2.4.1

Estruturas de Repetio Simples


r1 if (condio_de_teste) goto r2
comandos
goto r
r2 continue

Esta uma estrutura de repetio muito simples, mas no recomendada para


programao. A estrutura mais aceita, pois possui equivalentes em outras linguagens, da
seguinte forma:

Pg. 20 de 41

do r1 var=n1,n2,n3
seqncia de comandos
r1 continue
ou (WIN)
do var=n1,n2,n3
seqncia de comandos
continue
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.
2.4.1

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.
Exemplo 1:
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

Pg. 21 de 41

4.311765167986662E-001
3.153223623952687E-001
1.945477079889872E-001
7.073720166770291E-002
-5.417713502693632E-002
Exemplo 2:
integer i/1/, j/1/
do while (i)
j=j+1
if(j.eq.5) i=0
print *,j,I
end do
end
Resultado:
2
3
4
5

1
1
1
0

Exemplo 3:
real*8 a(4)
i = 1; a(1) = 2.97645984
a(2) = 576.74e5
a(3) =.45; a(4) = sin(.5)
do while(i.le.4)
print'(2x,sp,en16.5e3)', a(i)
write (*,*)' ---------------'
i = i + 1
end do
end
Resultado:
+2.97646E+000
-----------------------------+57.67400E+006
-----------------------------+449.99999E-003
-----------------------------+479.42554E-003
-----------------------------Exemplo 4:
do i=9,12
print '(2x,I2.2)',I
enddo
end

Pg. 22 de 41

Resultado:
09
10
11
12
2.4.2

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 nico 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.
Exemplo:
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
Resultado:
11
41
12
42
13
43

21
51
22
52
23
53

31
101
32
108
33
127

Recursos de Programao

3.1

Deslocamento

3.1.1

GOTO Implcito

Outra forma de usar o goto a seguinte:


goto (r1, r2, ..., rn) varivel

Pg. 23 de 41

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.
Exemplo:

10
20
15
1

i=2
goto (10,20,15)
write (*,*) ' o
goto 1
write (*,*) ' o
goto 1
write (*,*) ' o
continue
end

i
valor de i=1'
valor de i=2'
valor de i=3'

Resultado:

3.1.2

o valor de i=2
IF Com Deslocamento

Uma outra maneira de se deslocar num programa, usando agora uma expresso no lugar
de uma varivel 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.
Exemplo:
i=1
10 if(i-2) 1,2,3
1 write (*,*) ' i<2'
i=2
goto 10
2 write (*,*) ' i=2'
i=3
goto 10
3 write (*,*) ' i>2'
end
Resultado:
i<2
i=2
i>2

Pg. 24 de 41

3.2

Declaraes e atribuies avanadas

3.2.1

DIMENSION

Uma outra forma de se declarar vetores e matrizes, com a vantagem de se poder


especificar os ndices mnimos e mximos em cada direo usando o comando
dimension.
tipo var1,var2,...,varn
dimension var1(Li1:Ls1), var2(Li2:Ls2),..., varn(Lin:Lsn)
ou
tipo var1(Li1:Ls1), var2(Li2:Ls2),...,varn(Lin:Lsn)
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)
Exemplo:
integer a
dimension a(-3:2,3)
do i=-3,2
do j=1,3
a(i,j)=i**j
print 1,'a(',i,',',j,')=',a(i,j)
1
format(1x,sp,a,i3.2,a,i3.2 &
&,a,i3.2)
enddo
enddo
end
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

Pg. 25 de 41

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

3.2.2

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).
tipo constante1, constante2,...
parameter (constante1 = valor, constante2 = valor,...)
Os parnteses so opcionais. tipo pode ser integer, real ou qualquer outro tipo de
variveis. Em parameter no se pode 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,...
Programa:
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
ou
real pi,r(3)
parameter (pi=3.1459)

Pg. 26 de 41

do i=1,3
r=i**2
call area(r(i),pi)
enddo
end
subroutine area(r,pi)
real r,a
a=2*pi*r
print *,a
return
end
Resultado:
6.291800
25.167200
56.626200

3.2.3

TYPE (F90)

Quando vrias variveis esto relacionadas entre si, o melhor agrupa-las em grupos
(type), de forma que possam ser acessadas pelo nome do grupo.
Declarao:
Declarao
type nome_type
declaraes
end type nome_type
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 bloco um nome. O bloco com esse novo nome ter as
mesmas variveis feitas na declarao.
Associao:
Associao
type (nome_type) :: nome
Atribuio:
nome = nome_type (valor das variveis)
ou
nome%nome_varivel = valor
Exemplo:
Exemplo
type anivers
character nome*10

Pg. 27 de 41

character mes*10
integer*1 dia
end type anivers
type (anivers) :: helder
type (anivers) :: Luciene
type (anivers) :: Carlo
helder=anivers('Helder','Fevereiro',17)
carlo=anivers('Carlo','Fevereiro',12)
luciene%nome='Luciene'
luciene%mes='Agosto'
luciene%dia=22
write(*,*) helder%ms
write(*,*) helder%nome,helder%dia
write(*,*) carlo%nome,carlo%dia
write(*,'(1x,a,a,i2)') Luciene
end
Resultado:
Resultado
Fevereiro
Helder 17
Carlo 12
Luciene Agosto 22
3.2.4

DATA

O modo mais estruturado de se atribuir valores iniciais valores 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 separao
entre eles feita por vrgula.
Exemplo:
Exemplo
integer h(3,4),a,b,c
logical l1,l2
character cor*5
data h/1,2,3,4,5,6,7,8,9,10,11,12/
data a/5/,b/3/,c/10/
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

Pg. 28 de 41

Resultado:
Resultado
010203040506
070809101112
05 03 10
T F
preto

3.3

Designao de Memria

3.3.1

COMMON

Quando muitos dados devem ser passados funes ou subrotinas, um recurso til o
common, que pode reccsumir 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 bloco
de mesmo nome. A ausncia do nome e o nome '/ /' tem 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.
Exemplo:
common /func/a,b
common / /c,d
common e,f
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
Resultado:

3.3.2

12.000 2.000 4.000


BLOCK DATA

Pg. 29 de 41

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.

3.4

Modularizao

3.4.1

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 de programa normal escrito em FORTRAN. Funes e
subrotinas no podem ser declaradas em um arquivo include, mas podem ser acessadas
a partir deles.
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.

Apndice A: Funes Internas


Funes Trigonomtricas
Nome

Definio

Parmetro

Resultad
o

SIN(X)

seno (radianos). se x for complexo, a parte

real ou complexo

real*4

real ou complexo

real*4

complex*4

complex*

real assumida como valor em radianos.


SIND(X)

seno (graus). se x for complexo, a parte real


assumida como valor em graus.

CSIN(X)

seno (radianos)

4
CDSIN(X)

seno (radianos)

complex*8

complex*
8

DSIN(X)

seno (radianos)

real*8

real*8

DSIND(X)

seno (graus)

real*8

real*8

ASIN(X)

Arcoseno (radianos). retorna valores na faixa

real, |x|.LE.1

real*4

Pg. 30 de 41

[-p/2,p/2]
ASIND(X)

Arcoseno (graus). retorna valores na faixa [-

real, |x|.LE.1

real*4

real*8

real*8

real*8

real*8

real ou complexo

real*4

coseno (graus) se x for complexo, a parte real real ou complexo

real*4

90,90]
DASIN(X)

Arcoseno (radianos). retorna valores na faixa


[-p/2,p/2]

DASIND(X Arcoseno (graus). retorna valores na faixa [)

90,90]

COS(X)

coseno (radianos) se x for complexo, a parte


real assumida como valor em radianos.

COSD(X)

assumida como valor em graus.


CCOS(X)

coseno (radianos)

complex*4

complex*
4

CDCOS(X) coseno (radianos)

complex*8

complex*
8

DCOS(X)

coseno (radianos)

real*8

real*8

DCOSD(X) coseno (graus)

real*8

real*8

AOS(X)

real, |x|.LE.1

real*4

real, |x|.LE.1

real*4

real*8, |x|.LE.1

real*8

real*8, |x|.LE.1

real*8

Arcocoseno (radianos). retorna valores na


faixa [0,p]

ACOSD(X) Arcocoseno (graus). retorna valores na faixa


[0,180]
DACOS(X) Arcocoseno (radianos). retorna valores na
faixa [0,p]
DACOSD( Arcocoseno (graus). retorna valores na faixa
X)

[0,180]

TAN(X)

tangente (radianos)

real

real*4

TAND(X)

tangente (graus)

real

real*4

DTAN(X)

tangente (radianos)

real*8

real*8

DTAND(X) tangente (graus)

real*8

real*8

COTAN(X) cotangente (radianos)

real. x no pode ser

real*4

0.
DCOTAN( cotangente (radianos)

real*8. x no pode

X)

ser 0.

ATAN(X)

Arcotangente (radianos). retorna valores na

real*8

real

real*4

ATAND(X) Arcotangente (graus). retorna valores na faixa real

real*4

faixa [-p/2,p/2]
[-90,90]
DATAN(X) Arcotangente (radianos). retorna valores na

real*8

real*8

DATAND( Arcotangente (graus). retorna valores na faixa real*8

real*8

faixa [-p/2,p/2]
X)

[-90,90]

ATAN2(Y, Arcotangente (y/x) em radianos. retorna

real. x e y no podem real*4

Pg. 31 de 41

X)

valores na faixa [-p,p]

ambos ser 0.

ATAN2D( Arcotangente (y/x) em graus. retorna valores real. x e no podem


Y,X)

na faixa [-180,180]

real*4

ambos ser 0.

DATAN2( Arcotangente (y/x) em radianos. retorna

real*8 x e y no

Y,X)

podem ambos ser 0.

valores na faixa [-p,p]

real*8

DATAN2D Arcotangente (y/x) em graus. retorna valores real*8 x e y no

real*8

(Y,X)

na faixa [-180,180]

podem ambos ser 0.

SINH(X)

seno hiperblico (radianos)

real

real*4

DSINH(X)

seno hiperblico (radianos)

real*8

real*8

COSH(X)

coseno hiperblico (radianos)

real

real*4

DCOSH(X) coseno hiperblico (radianos)

real*8

real*8

TANH(X)

real

real*4

real*8

real*8

tangente hiperblica (radianos)

DTANH(X) tangente hiperblica (radianos)

Funes Genricas
Nome

Definio

Parmetro

Resultado

DPROD(A,B) a*b

real*4, real*4

real*8

EOF(UNIT)

integer*2

logical

real ou

real ou

inteiro

inteiro

verifica o final da unidade


unit

SIGN(X,Y)

retorna x com o sinal de y

ISIGN(X,Y)

retorna x com o sinal de y

inteiro

inteiro

DSIGN(X,Y)

retorna x com o sinal de y

real*8

real*8

Exponenciais
O nmero e elevado a X (eX )
Nome
CDEXP

Parmetro

Resultado

complex*16

complex*16

CEXP (X)

complex*8

complex*8

DEXP (X)

real*8

real*8

EXP (X)

real, inteiro ou

mesmo que o

complexo

parmetro

(X)

Logaritmos
Nome
LOG (X)

Definio
logaritmo natural

Parmetro
real ou

Resultado
mesmo que

Pg. 32 de 41

complexo

o
parmetro

ALOG (X)

logaritmo natural

real*4

real*4

DLOG (X)

logaritmo natural

real*8

real*8

CLOG (X)

logaritmo natural

complex*8

complex*8

CDLOG (X)

logaritmo natural

complex*16

complex*16

LOG10 (X)

logaritmo na base

real

mesmo que

10

o
parmetro

ALOG10

logaritmo na base

(X)

10

DLOG10

logaritmo na base

(X)

10

real*4

real*4

real*8

real*8

Mximos
Nome

Definio

MAX(X1,X2,..)
MAX0(X1,X2,..)

Parmetro

Resultado
Resultado

maior

qualquer

maio tipo entre os

valor

tipo

valores

maior

inteiro

inteiro

real

real

inteiro

real

real

inteiro

real*8

real*8

valor
AMAX1(X1,X2,..)

maior
valor

AMAX0(X1,X2,..)

maior
valor

MAX1(X1,X2,..)

maior
valor

DMAX1(X1,X2,..) maior
valor

Mnimos
Semelhante as funes de mximo (MIN, MIN0, AMIN1, AMIN0, MIN1, DMIN1)

Restos
Resto da diviso de X por Y
Nome
MOD(X,Y)

Parmetro

Resultado

real ou

real ou

inteiro

inteiro

AMOD(X,Y)

real*4

real*4

DMOD(X,Y)

real*8

real*8

Pg. 33 de 41

Raiz Quadrada de X
Nome
SQRT(X)

Parmetro

Resultado

real ou

real ou

complexo

complexo

DSQRT(X)

real*8

real*8

CSQRT(X)

complex*8

complex*8

CDSQRT(X) complex*16

complex*16

Truncamento de X
Nome

Parmetro
Parmetro

Resultado

AINT(X)

real

real

DINT(X)

real*8

real*8

Arredondamento de X
Nome

Parmetro

Resultado

NINT(X)

real

inteiro

DNINT(X)

real*8

real*8

ANINT(X)

real

real

IDNINT

real*8

inteiro

Diferena Positiva Entre X e Y


(se Y > X o valor zero)
Nome
Nome
DIM(X,Y)

Parmetro

Resultado

real ou

real ou

inteiro

inteiro

DDIM(X,Y)

real*8

real*8

DIM(X,Y)

inteiro

inteiro

Tipo de Dado
Nome

Definio

Parmetro

Resultado

ALLOCATED(X)

.true. se a for vetor ou matriz

todos

lgico

EPSILON(X)

menor valor que pode ser

real

real

Pg. 34 de 41

incrementado
HUGE(X)

maior valor possvel

real ou

real ou

inteiro

inteiro

MAXEXPONENT(X) maior expoente possvel

real

real

MINEXPONENT(X)

menor expoente possvel

real

real

NEAREST(X,Y)

se y positivo retorna o maior

real

real

real se negativo o menor real


PRECISION(X)

nmero de casas decimais

real

real

TINY(X)

menor valor positivo que pode

real

real

ser armazenado

Transformao do Tipo de X
Nome

Parmetro

INT(X)

Resultado

real, inteiro ou

inteiro

complexo
INT1(X), INT2(X), INT4(X),

real, inteiro ou

integer*1, integer*2,

INTC(X)

complexo

integer*4, e integer

IFIX(X)

real*4

inteiro

HFIX(X)

real, inteiro ou

integer*2

complexo
JFIX(X)

real, inteiro ou

integer*4

complexo
IDINT(X)

real*8

inteiro

REAL(X)

real, inteiro ou

real*4

complexo
DREAL(X)

complex*16

real*8

FLOAT(X)

inteiro

real*4

SNGL(X)

real*8

real*4

DBLE(X)

real*8 ou complexo

real*8

DFLOAT(X)

real*8 ou complexo

real*8

CMPLX(X)

inteiro, real, complexo

complexo

DCMPLX(X)

inteiro, real, complexo

complex*16

ICHAR(X)

ASCII

inteiro

CHAR(X)

integer*4

ASCII

Complexos
Nome

Definio

Parmetro

Resultado

IMAG(X)

retorna a parte imaginria

complexo

real

DIMAG(X)

retorna a parte imaginria

complex*16 real*8

Pg. 35 de 41

AIMAG(X)

retorna a parte imaginria

complex*8

real*4

CONJG(X)

retorna o complexo

complex*8

complex*8

conjugado
DCONJG(X)

retorna o complexo

complex*16 complex*16

conjugado

Caracteres
Nome

Parmetro Resultado

Definio

LEN(X)

tamanho de x

character

inteiro

LGE(X,Y)

compara x e y se x >= y .true.

character

logical

LGT(X,Y)

compara x e y se x > y .true.

character

logical

LLE(X,Y)

compara x e y se x <= y .true.

character

logical

LLT(X,Y)

compara x e y se x < y .true.

character

logical

INDEX(X,Y)

procura y em x e retorna a posio

character

inteiro

LEN_TRIM(X) tamanho de x menos o nmero de

character

inteiro

character

inteiro

character

inteiro

espaos
SCAN(X,Y)

procura um dos caracteres de y em x e


retorna o nmero de ocorrncias

VERIFY(X,Y)

procura um dos caracteres de y em x e


retorna a posio da primeira no
ocorrncia

Valores Absolutos de X
Nome

Parmetro

Resultado

complexo ou

complexo ou

real

real

IABS(X)

inteiro

inteiro

DABS(X)

real*8

real*8

CABS(X)

complex*16

complex*16

CDABS(X)

complex*16

real*8

ABS(X)

Apndice B: Opes de Arquivos, Leitura e Escrita


Abertura de Arquivos (OPEN)
OPEN ([UNIT=]unit [,ACCESS=access] [,BLANK=blanks] [,BLOCKSIZE=blocksize]
[,ERR=errlabel] [,FILE=file] [,FORM=form] [,IOSTAT=iocheck] [,MODE=mode]
[,RECL=recl] [,SHARE=share] [,STATUS=status])
UNIT= Quando omitido, o primeiro valor ser o nmero da unidade (unit).

Pg. 36 de 41

unit - Expresso inteira. Indica o nmero da unidade.


access - Expresso alfanumrica. APPEND , DIRECT ou SEQUENTIAL (padro, quando
access omitido)
blanck - Expresso alfanumrica. NULL ignora zeros e espaos, ZERO espaos so
substitudos por zeros. Os formatos BN e BZ podem anular este efeito.
blocksize - Expresso inteira. Especifica o tamanho da unidade (em bytes).
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.
form - Expresso alfanumrica. FORMATED (padro quando access=SEQUENTIAL),
UNFORMATED (padro quando access=DIRECT), BINARY.
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.
mode - Expresso alfanumrica. READ o arquivo s para leitura, WRITE o arquivo s
para escrita, READWRITE o arquivo pode ser usado para leitura ou escrita.
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 existncia do arquivo, se ele no
existir ser criado um, SCRATHC

Fechamento de Arquivos (CLOSE)


CLOSE ( [UNIT=] unit [,ERR=errlabel] [,IOSTAT=iocheck] [,STATUS=status] )
UNIT= Quando omitido, o primeiro valor ser o nmero da unidade (unit).

Pg. 37 de 41

unit - Expresso inteira. Indica o nmero da unidade.


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 erro, 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.

Escrita (WRITE)
WRITE ([UNIT=] unit [,[{[ FMT=] format] | [ NML=]
ERR=errlabel] [ , IOSTAT=iocheck] [ , REC=rec] ) iolist

nml

}]

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.
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 erro, 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.

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.

Pg. 38 de 41

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
endlabe - 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 erro, 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.

Recuo Total (REWIND)


REWIND { unit | ([UNIT=]unit [ , ERR=errlabel] [ , IOSTAT=iocheck])}
UNIT= Quando omitido, o primeiro valor ser o nmero da unidade (unit).
unit - Expresso inteira. Indica o nmero da unidade.
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 erro, retorna o nmero do erro
quando um ocorre.

Recuo de um Campo (BACKSPACE)


BACKSPACE {unit|( [UNIT=] unit [,ERR=errlabel] [,IOSTAT=iocheck ]] ) }
UNIT= Quando omitido, o primeiro valor ser o nmero da unidade (unit).
unit Expresso inteira. Indica o nmero da unidade.
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 erro, retorna o nmero do erro
quando um ocorre.

Pg. 39 de 41

Conceitos da Linguagem................................................................................................................1
1.1
Introduo ..............................................................................................................................1
1.2
Formato da linguagem ...........................................................................................................1
1.3
Conceitos Bsicos ..................................................................................................................2
1.4
Variveis ................................................................................................................................3
1.4.1
Declarao de Variveis ................................................................................................3
Inteiras (INTEGER):......................................................................................................................3
1.5
Operadores .............................................................................................................................5
1.5.1
Prioridade.......................................................................................................................5
1.5.2
Atribuio ......................................................................................................................5
1.5.3
Literais ...........................................................................................................................5
1.5.4
Aritmticos.....................................................................................................................6
1.5.5
Relacionais.....................................................................................................................6
1.5.6
Lgicos...........................................................................................................................6
1.6
Funes Internas ....................................................................................................................7
1.6.1
Introduo ......................................................................................................................7
1.6.2
Trigonomtricas .............................................................................................................7
1.6.3
Outras Funes...............................................................................................................7
1.7
Funes e Subrotinas .............................................................................................................8
1.7.1
Introduo ......................................................................................................................8
1.7.2
Funes ..........................................................................................................................8
1.7.3
Subrotinas ......................................................................................................................9
1.8
Entrada e Sada ....................................................................................................................10
1.8.1
Leitura e Impresso......................................................................................................10
1.9
Formatao...........................................................................................................................11
1.9.1
O Recurso FORMAT...................................................................................................11
1.9.3
Outros Recursos para Formatao ...............................................................................13
1.10 Arquivos...............................................................................................................................14
1.10.1
Abertura e Fechamento................................................................................................14
1.10.2
Outros Recursos...........................................................................................................15
2 Estruturas de Programao ..........................................................................................................15
2.1
Estrutura Seqencial ............................................................................................................15
2.2
Comando 'GO TO' ou 'GOTO'.............................................................................................17
2.3
Estrutura Condicional ..........................................................................................................17
2.3.1
Estrutura Condicional Simples ....................................................................................17
2.3.2
Estrutura Condicional Composta .................................................................................18
2.3.3
Estrutura Condicional Composta Simplificada............................................................18
2.4
Estruturas de Repetio........................................................................................................20
2.4.1
Estruturas de Repetio Simples..................................................................................20
2.4.1
DO WHILE (F90) ........................................................................................................21
2.4.2
DO Implcito (WIN) ....................................................................................................23
3 Recursos de Programao ............................................................................................................23
3.1
Deslocamento.......................................................................................................................23
3.1.1
GOTO Implcito...........................................................................................................23
3.1.2
IF Com Deslocamento .................................................................................................24
3.2
Declaraes e atribuies avanadas ...................................................................................25
3.2.1
DIMENSION ...............................................................................................................25
3.2.2
PARAMETER .............................................................................................................26
3.2.3
TYPE (F90)..................................................................................................................27
3.2.4
DATA ..........................................................................................................................28
3.3
Designao de Memria ......................................................................................................29
Pg. 40 de 41

3.3.1
COMMON ...................................................................................................................29
3.3.2
BLOCK DATA............................................................................................................29
3.4
Modularizao......................................................................................................................30
3.4.1
INCLUDE ....................................................................................................................30
Apndice A: Funes Internas.............................................................................................................30
Funes Trigonomtricas.................................................................................................................30
Funes Genricas ...........................................................................................................................32
Exponenciais....................................................................................................................................32
Logaritmos .......................................................................................................................................32
Mximos ..........................................................................................................................................33
Mnimos ...........................................................................................................................................33
Restos...............................................................................................................................................33
Raiz Quadrada de X .........................................................................................................................34
Truncamento de X............................................................................................................................34
Arredondamento de X......................................................................................................................34
Diferena Positiva Entre X e Y........................................................................................................34
Tipo de Dado....................................................................................................................................34
Transformao do Tipo de X ...........................................................................................................35
Complexos .......................................................................................................................................35
Caracteres.........................................................................................................................................36
Valores Absolutos de X ...................................................................................................................36
Apndice B: Opes de Arquivos, Leitura e Escrita ...........................................................................36
Abertura de Arquivos (OPEN).........................................................................................................36
Fechamento de Arquivos (CLOSE) .................................................................................................37
Escrita (WRITE) ..............................................................................................................................38
Leitura (READ) ...............................................................................................................................38
Recuo Total (REWIND) ..................................................................................................................39
Recuo de um Campo (BACKSPACE).............................................................................................39

Pg. 41 de 41

Você também pode gostar