Escolar Documentos
Profissional Documentos
Cultura Documentos
Conceitos da Linguagem
1.1
Introduo
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
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;
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
qualquer coluna.
1.3
Conceitos Bsicos
1.
2.
3.
Constantes:
4.
Pg. 2 de 41
5.
Os
programas
podem
conter
no
incio
seu
nome
(program
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
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
=> .TRUE.
Atribuio
1.5.3
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
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
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
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
Real ou
REAL*4
complexo.
radianos.
ASIN(x)
REAL*4
Real ou
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
Real
REAL*4
Real
REAL*4
Outras Funes
Nome
Definio
Tipo de
Tipo da Funo
Argumento
ALOG10(x) logaritmo de x na base 10
ALOG(x)
real
real
real
real
real
real
0)
EXP(x)
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)
real
inteiro
truncando
FLOAT(x)
inteiro
real
DBLE(x)
real
real (dupla
preciso)
CMPLX(x)
real
complexo
SIGN(x,y)
real
real
y 0 e negativo de x se y < 0
MOD(x,y)
inteiro
inteiro
AMOD(x,y)
real
real
SQRT(x)
raiz quadrada de x (x 0)
real
real
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.
a significa que ser impressa uma string de qualquer tamanho (item 9).
Pg. 10 de 41
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
WIN
Formato
Uso
Iw[.m]
Valores Inteiros
Fw.d
Valores Reais
Ew.d[Ee]
Gw.d[Ee]
Dw.d
Lw
Valores Lgicos
A[w]
Seqncia de Caracteres
Pg. 11 de 41
F90
Bw[.m]
Valores Binrios
F90
Ow[.m]
Valores Octadecimais
F90
ENw.d[Ee]
F90
ESw.d[Ee]
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
Uso
Transmite uma string para a sada
A varivel recebe o nmero de espaos que o valor
ocupa
nH
Tc
TLc
TRc
WIN
nX
SP
SS
Retorna ou padro ss
Muda de linha
WIN
kP
BN
BZ
Pg. 13 de 41
Resultado:
+.240E+02 +55.800E-003
hoje Segunda-
1.10
Arquivos
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
Estruturas de Programao
2.1
Estrutura Seqencial
Pg. 15 de 41
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
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
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
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
case (valor)
case (:valor)
case (valor:)
case (valor1:valor2)
case
(valor1,valor2,...,valo
rn)
valor n.
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
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
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
3.2.1
DIMENSION
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
Pg. 29 de 41
3.4
Modularizao
3.4.1
INCLUDE
Definio
Parmetro
Resultad
o
SIN(X)
real ou complexo
real*4
real ou complexo
real*4
complex*4
complex*
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)
real, |x|.LE.1
real*4
Pg. 30 de 41
[-p/2,p/2]
ASIND(X)
real, |x|.LE.1
real*4
real*8
real*8
real*8
real*8
real ou complexo
real*4
real*4
90,90]
DASIN(X)
90,90]
COS(X)
COSD(X)
coseno (radianos)
complex*4
complex*
4
complex*8
complex*
8
DCOS(X)
coseno (radianos)
real*8
real*8
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
[0,180]
TAN(X)
tangente (radianos)
real
real*4
TAND(X)
tangente (graus)
real
real*4
DTAN(X)
tangente (radianos)
real*8
real*8
real*8
real*8
real*4
0.
DCOTAN( cotangente (radianos)
real*8. x no pode
X)
ser 0.
ATAN(X)
real*8
real
real*4
real*4
faixa [-p/2,p/2]
[-90,90]
DATAN(X) Arcotangente (radianos). retorna valores na
real*8
real*8
real*8
faixa [-p/2,p/2]
X)
[-90,90]
Pg. 31 de 41
X)
ambos ser 0.
na faixa [-180,180]
real*4
ambos ser 0.
real*8 x e y no
Y,X)
real*8
real*8
(Y,X)
na faixa [-180,180]
SINH(X)
real
real*4
DSINH(X)
real*8
real*8
COSH(X)
real
real*4
real*8
real*8
TANH(X)
real
real*4
real*8
real*8
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
SIGN(X,Y)
ISIGN(X,Y)
inteiro
inteiro
DSIGN(X,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
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
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)
todos
lgico
EPSILON(X)
real
real
Pg. 34 de 41
incrementado
HUGE(X)
real ou
real ou
inteiro
inteiro
real
real
MINEXPONENT(X)
real
real
NEAREST(X,Y)
real
real
real
real
TINY(X)
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)
complexo
DCMPLX(X)
complex*16
ICHAR(X)
ASCII
inteiro
CHAR(X)
integer*4
ASCII
Complexos
Nome
Definio
Parmetro
Resultado
IMAG(X)
complexo
real
DIMAG(X)
complex*16 real*8
Pg. 35 de 41
AIMAG(X)
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)
character
logical
LGT(X,Y)
character
logical
LLE(X,Y)
character
logical
LLT(X,Y)
character
logical
INDEX(X,Y)
character
inteiro
character
inteiro
character
inteiro
character
inteiro
espaos
SCAN(X,Y)
VERIFY(X,Y)
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)
Pg. 36 de 41
Pg. 37 de 41
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
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