Escolar Documentos
Profissional Documentos
Cultura Documentos
CENAPAD-SP
2
NDICE
INTRODUO
1-HISTRIA
2-FORTRAN 77
3-FORTRAN 90
_______
04
05
06
ELEMENTOS DO FORTRAN 90
4-EXEMPLO DE PROGRAMA
5-RECOMENDAES DE CODIFICAO
6-CARACTERSTICAS DE CODIFICAO
7-REGRAS DE CODIFICAO
8-COMPILAO NO AMBIENTE CENAPAD-SP
9-EXERCCIO 1-Compilao e Execuo
10-EXERCCIO 2- Reestruturao de programa
11-ESTRUTURA DE PROGRAMAS
_____________
12-TIPOS DE DADOS
13-CONSTANTES
14-TIPO IMPLCITO
15-DECLARAO NUMRICA E LGICA
16 - DECLARAO CARACTERE
17-DECLARAO DE CONSTANTES
18-INICIALIZAO DE VARIVEIS
19-EXERCCIO 3 - Declarao de Variveis
20-EXPRESSES
21-Operador de ATRIBUIO
22-Operadores NUMRICOS
23-Precedncia de Operadores
24-Operadores RELACIONAIS
25-Operadores LGICOS
26-Operador CARACTERE
27-EXERCCIO 4 B Expresses
_____
07
08
09
10
11
______________________12
13
___
_______14
_______14
_______15
_______15
_______16
_______16
_______17
_______17
_______18
_______19
_______19
_______20
_______20
_______21
_______21
_______22
_______23
_______24
_______25
_______26
_______27
_______28
_______29
30
_______31
_______31
_______32
_______32
_______32
_______33
_______33
_______34
_______35
3
NDICE
44-Funes de CONVERSO
45-Funes MATEMTICAS
46-Funes NUMRICAS
47-Funes CARACTERES
48-EXERCCIO 7 B Funes Matemticas
49-Comando PRINT
50-Comando READ
35
36
36
36
37
38
38
MATRIZES
51-DEFINIO DE MATRIZES
52-DECLARAO DE MATRIZES
53-SNTAXE DE MATRIZES
54-SECES DE MATRIZES
55-IMPRESSO E LEITURA DE MATRIZES
56-FUNES DE MATRIZES
57-ALOCAO DE MATRIZES
58-EXERCCIO 8 B DEFINIO DE MATRIZES
59-EXERCCIO 9 B FUNES DE MATRIZES
60-EXERCCIO 10 B USO DE MATRIZES
39
40
41
41
42
43
44
45
46
46
47
48
49
49
50
51
51
52
53
54
54
ENTRADA E SADA
72-ENTRADA / SADA
73-Comando OPEN
74-Comando READ
75-Comando WRITE
76-Comando FORMAT/FMT=
77-Descritores de Formatos
78-Outros comandos de I/O
79-Comando DATA
80-EXERCICIOS 15 B I/O
81-EXERCICIOS 16 B FORMATAO
82-REFERNCIAS
55
56
57
58
59
59
59
60
61
61
62
1-HISTRIA
Primeiro compilador considerado High- Level Idealizado por John Backus 1957;
High Performance Fortran HPF Fortran 90 para ambientes com memria distribuda;
2-FORTRAN 77
O Fortran77 est muito obsoleto em relao s linguagens atuais e aos recursos existentes
Formato fixo:
Linhas da posio 7 a 72;
Somente letras maisculas;
Nomes at 6 caracteres.
3-FORTRAN 90
Formato livre:
132 caracteres por linha;
Maisculas e minsculas;
Nomes at 31 caracteres.
Recursividade
Alm dos recursos descritos acima, vrios outros, melhoraram o Fortran tornando-o mais
atual aos recursos existente em outras linguagens de programao :
Controle de estruturas :
o DO...ENDDO
o DO...WHILE
o SELECT CASE
Substituio de comandos:
o COMMON blocks MODULE
o EQUIVALENCE TRANSFER
Novos comandos:
o IMPLICIT NONE
4-EXEMPLO DE PROGRAMA
MODULE Triangle_Operations
IMPLICIT NONE
CONTAINS
FUNCTION Area(x,y,z)
REAL :: Area ! function type
REAL, INTENT( IN ) :: x, y, z
REAL :: theta, height
theta = ACOS((x**2+y**2-z**2)/(2.0*x*y))
height = x*SIN(theta); Area = 0.5*y*height
END FUNCTION Area
END MODULE Triangle_Operations
PROGRAM Triangle
USE Triangle_Operations
IMPLICIT NONE
REAL :: a, b, c, Area
PRINT *, 'Welcome, please enter the&
lengths of the 3 sides.'
READ *, a, b, c
PRINT *, 'Triangle''s area: ', Area(a,b,c)
END PROGRAM Triangle
5-RECOMENDAES DE CODIFICAO
6-CARACTERSTICAS DE CODIFICAO
Alfanumrico: a- z, A- Z, 0-9, _
&
Smbolos aritmticos:
+ Adio
- Subtrao
* Multiplicao
/ Diviso
** Expoente
10
7-REGRAS DE CODIFICAO
Brancos no so permitidos:
Palavras-chave
INTEGER :: nome1 Certo
INT EGER :: nome1 Errado
Nomes
REAL :: valor_total Certo
REAL :: valor total Errado
Brancos so permitidos:
Entre palavras-chave
Certo
Errado
Errado
11
Ambiente IBM/AIX
extenso: .f , .F
extenso: .f , .f90
Fortran95: xlf95
extenso: .f , .f95
extenso: .f , .F , .f90
Padro de Fortran
Sufixo dos programas
Tipo de formatao
Ambiente INTEL/Linux
qlanglvl=
qsuffix=
qfree=yes/no
Exemplos de compilaes:
xlf prog1.f -o prog
xlf90 cofigo.f -o teste -O3
xlf90 cena.f -c -L/usr/lib - lscalapack
ifort salto.f -o salto -O3 -L/home/kusel - lbib1
ifort parceiro.f -o par -g -O
12
PROGRAM QES
IMPLICIT NONE
INTEGER :: a, b, c, D
REAL :: Part_Real, Part_imag
PRINT*, ''Entre com os valores de a, b, c''
READ*, a, b, c
IF (a /= 0) THEN
D = b*b - 4*a*c
IF (D == 0) THEN
PRINT*, ''Raiz '', -b/(2.0*a)
ELSE IF (D > 0) THEN
PRINT*, ''Raizes so '',(-b+SQRT(REAL(D)))/(2.0*a),&
''e '',
(-b-SQRT(REAL(D)))/(2.0*a)
ELSE
Part_Real = -b/(2.0*a)
Part_Imag = (SQRT(REAL(-D))/(2.0*a))
PRINT*, ''1a. Raiz'', Prat_Real, ''+'', Part_Imag, ''i''
PRINT*, ''2a. Raiz'', Part_Real, ''-'', Part_Imag, ''i''
END IF
ELSE
PRINT*, ''No uma equao quadrtica''
END IF
END PROGRAM QES
! Calculo do discriminante
! Uma raiz
! raizes reais
! raizes complexas
! a == 0
13
14
11-ESTRUTURA DE PROGRAMAS
O Fortran possui algumas regras bem definidas para ordem dos comandos:
1. Cabealho de definio: PROGRAM, FUNCTION, SUBROUTINE, MODULE ou
BLOCK DATA;
S pode haver um nico comando PROGRAM.
Pode haver mais de um FUNCTION, SUBROUTINE e MODULE.
S pode haver um nico BLOCK DATA
1. Comandos de Declarao:
REAL, INTEGER, IMPLICIT, PARAMETER, DATA;
2. Comandos de Execuo:
IF-ENDIF, DO-ENDDO, comando de atribuio;
4. Finalizao do programa com o comando END;
12-TIPOS DE DADOS
Todo tipo de dado possui um nome, um conjunto vlido de valores, um significado dos
valores e um conjunto de operadores.
Dado Caractere
CHARACTER :: sex
CHARACTER(LEN=12) :: nome
Dado Boolean
LOGICAL :: w
Dado Numrico
REAL :: alt
DOUBLE PRECISION :: pi
INTEGER :: id
15
13-CONSTANTES
Nmero Inteiro
Nmero Real
Valor Lgico
Caractere
Observaes:
14-TIPO IMPLCITO
Tipo de dado implcito potencialmente perigoso e deve ser evitado com a declarao:
IMPLICIT NONE
16
Com o comando IMPLICIT NONE, todas as variveis devem ser declaradas, da forma:
Lista de atributos
PARAMETER, DIMENSION;
::
Exemplos:
REAL
INTEGER
LOGICAL
REAL, DIMENSION(10,10)
INTEGER
:: x
:: i, j
:: ptr
:: y, z
:: k=4
16 - DECLARAO CARACTERE
Exemplos:
CHARACTER(LEN=10)
:: nome
CAHARCTER
:: sexo
CHARACTER(LEN=32)
:: str
CHARACTER(LEN=10), DIMENSION(10,10)
:: vetor
17
17-DECLARAO DE CONSTANTES
Um valor constante conhecido como parmetro, pode ser definido pelos comandos de
declarao utilizando o atributo PARAMETER ou pelo prprio comando
PARAMETER;
Exemplos:
INTEGER pre
Fortran77
PARAMETER (pre=252)
Fortran77
REAL, PARAMETER
:: pi=3.14159
Fortran90
O atributo PARAMETER deve ser usado, quando se tiver certeza que a varivel s
poder assumir um nico valor.
18-INICIALIZAO DE VARIVEIS
:: x, y=1.005
INTEGER
:: i=5, j=100
CHARACTER(LEN=5) :: luz=Amber
LOGICAL
:: a=.TRUE., b=.FALSE.
REAL, PARAMETER
:: pi=3.14159
REAL
:: radius=3.5
REAL
:: circo=2*pi*radius (expresso)
OBS: Em geral, funes no podem ser utilizadas em expresses que iniciam uma
varivel, mas existe as excees.
18
Nome
Pe
Milhas
Cidade
Local
Aonde_nasceu
Seno_meio
Status
Varivel
Varivel
Varivel
Constante
Constante
Constante
Tipo
Inteiro
Real
Caractere (at 20 letras)
Caractere
Lgica
Real
Valor Inicial
Campinas
Falso
Sin(0.5)=0.47942554
19
20-EXPRESSES
Exemplos:
X+1
campo//campo
A .GT. B
Expresso lgica
21-Operador de ATRIBUIO
Exemplos:
a=b
c = SIN(0.7)*12.7
nome = iniciais//sobrenome
logi = (a.EQ.b.OR.c.NE.d)
20
22-Operadores NUMRICOS
Exponencial
(**)
10**2
a**b
10*7/4
a*b/c
7+8-3
a+b-c
OBS: Os operandos podem ser variveis, constantes, escalares ou vetores, com exceo do
expoente que, necessariamente, deve ser escalar.
23-Precedncia de Operadores
()
**
*,/
+,-
//
Exemplos:
(a + b)/c
diferente de
a+b/c
(a*b)/c
igual a
a*b/c
a/b*c
diferente de
a/(b*c)
x = a+b/5.0-c**d+1*e
equivale a
x=((a+(b/5.0))-(c**d))+(1*e)
21
24-Operadores RELACIONAIS
.GT.
.GE.
.LE.
.LT.
.NE.
.EQ.
>
>=
<=
<
/=
==
Maior que
Maior igual
Menor igual
Menor que
No igual a
Igual a
Exemplos:
a = i .GT. J
IF (i .EQ. J) c=d
25-Operadores LGICOS
.FALSE.
.TRUE.
.FALSE.
F .AND. F
F .OR. F
T .NEQV. F
.FALSE.
.FALSE.
.TRUE.
22
26-Operador CARACTERE
Exemplo :
CHARACTER(LEN=*), PARAMETER :: string=abcdefgh
string(1:1) a
string(2:4) bcd
a=string//string(3:5) abcdefghcde
b=string(1:1)//string(2:4) abcd
23
27-EXERCCIO 4 Expresses
1-Caminhe para o diretrio ~/curso/fortran/ex4. Edite o programa area_circulo.f
2-O programa est incompleto. Acrescente na linha das reticncias o que solicitado.
...Declarao de variveis...
...Expresso para clculo da rea e volume...
3-rea do crculo:
area = B r
24
25
29-Comando IF
Exemplos:
IF (I > 17) PRINT*, I > 17
26
30-Comando IF...THEN...END IF
Exemplos:
IF (I >17) THEN
PRINT *, I >17
END IF
27
31-Comando IF...THEN...ELSE...END IF
28
32-Comando IF...THEN...ELSEIF...END IF
Exemplos:
IF (I > 17) THEN
PRINT *, I > 17
ELSEIF (I == 17) THEN
PRINT *, I == 17
ELSE
PRINT*, I < 17
END IF
29
<nome>:
Exemplos:
outa:IF (a .NE. 0) THEN
PRINT*, a no igual a 0
IF (c .NE. 0) THEN
PRINT*,a no igual a 0 e c no igual a 0
ELSE
PRINT*,a no igual a 0 mas c igual a 0
END IF
30
34-EXERCCIO 5 - Comando IF
2 O programa solicita que se digite trs valores inteiros que podero formar os trs lados
de um tringulo eqiltero, issceles, escaleno, ou no formar um tringulo.
4 Substitua as linhas com reticncias pela lgica de programao que ir determinar que
tipo de tringulo ser formado. Analise com ateno o resto do programa para perceber
como montar os comandos. Em um determinado instante, a expresso acima ser utilizada.
(1,1,1)
(2,2,1)
(1,1,0)
(3,4,5)
(3,2,1)
(1,2,4)
31
Loop cclico que possui um mecanismo condicional para sair e iniciar o loop,
novamente. O comando CYCLE determina, novamente, o incio imediato do loop.
DO
...
IF (<expresso lgica>) CYCLE
IF (<expresso lgica>) EXIT
...
END DO
Exemplos:
i=0
DO
i=i+1
IF (i >= 50 .AND. I <= 59) CYCLE
IF (i .GT. 100) EXIT
PRINT*, I , i
END DO
PRINT*, Fim do loop. I = , i
32
37-LOOPs Identificados
38-Comando DO-WHILE
loops que condiciona a sua execuo antes de executar o bloco de comandos. Faa
enquanto. A condio testada no topo do loop.
DO WHILE (<expresso lgica>)
...
END DO
Exemplo:
DO WHILE ( salario .LE. 5000 )
salario=salario*1.05
END DO
39-Comando DO iterativo
33
40-Comando SELECT-CASE
Construo similar ao IF, mas muito til quando o valor analisado na expresso lgica
possuir diversos valores.
SELECT CASE (<expresso>)
CASE (<seleo>) <comando>
CASE (<seleo>) <comando>
...
CASE DEFAULT <comando>
END SELECT
Exemplo:
SELECT CASE (I)
CASE (1)
PRINT*, I==1
CASE (2:9)
PRINT*, I>=2 and I<=9
CASE (10)
PRINT*, I>=10
CASE DEFAULT
PRINT*, I<=0
END SELECT
a=1
b = -1
c=2
d = 1.999
e = 1.999
34
42-EXERCCIO 6 SELECT CASE
CADEIRAS
50
100 140 e 200 240
300 340
400 440
PREO
R$ 50,00
R$ 25,00
R$ 20,00
R$ 15,00
35
43-PROCEDIMENTOS INTRNSECOS
Transformao (REAL)
44-Funes de CONVERSO
REAL(1)
INT(1.7)
INT(-0.9999)
IACHAR(C)
ACHAR(67)
1.000000
1
0
67
C
36
45-Funes MATEMTICAS
Algumas:
ACOS(x)
ATAN(x)
SIN(x)
COS(x)
COSH(x)
EXP(x)
LOG(x)
LOG10(x)
SQRT(x)
Arcocoseno
Arcotangente
Seno
Coseno
Coseno Hiperblico
ex
Logaritmo natural ou neperiano ln
Logaritmo base 10
Raiz Quadrada
46-Funes NUMRICAS
Algumas:
ABS(a)
INT(a)
MAX(a1,a2,...)
MIN(a1,a2,...)
MOD(a,p)
REAL(a)
DBLE(x)
Valor absoluto
Valor inteiro
Valor mximo
Valor mnimo
Resto da diviso a/p
Converte a para REAL
Converte x para DOUBLE PRECISION
47-Funes CARACTERES
Algumas:
ADJUSTL(str)
ADJUSTR(str)
LEN(str)
REPEAT(str,i)
TRIM(str)
37
38
49-Comando PRINT
Substit ui um formato
Exemplo:
PROGRAM uno
IMPLICIT NONE
CHARACTER(LEN=*), PARAMETER :: &
nome_completo = Mauricio...Silva
REAL :: x, y, z
LOGICAL :: varlog
x = 1; y = 2; z = 3
varlog = (y .EQ. X)
PRINT*, nome_completo
PRINT*,X= ,x, Y = ,y, Z = ,z
PRINT*,Varivel lgica: ,varlog
END PROGRAM uno
Mauricio...Silva
X = 1.000 Y = 2.000 Z = 3.000
Varivel lgica: F
50-Comando READ
Substitui um formato
Exemplo:
READ*, nome
READ*, x, y, z
READ*,var1
39
MATRIZES
51-DEFINIO DE MATRIZES
1,1
1,2
1,3
2,1
2,2
2,3
3,1
3,2
3,3
4,1
4,2
4,3
5,1
5,2
5,3
10
11
12
13
14
15
40
52-DECLARAO DE MATRIZES
REAL, DIMENSION(15)
REAL, DIMENSION(1:5,1:3)
REAL
:: X
:: Y,Z
:: T(5,3)
Dimenses: at 7 dimenses;
41
53-SNTAXE DE MATRIZES
A = 0.0
B=C+D
A(1) = 0.0
B(0,0) = A(3) + C(5,1)
A(2:4) = 0.0
B(-1:0,0:1) = C(1:2, 2:3) + 1.0
54-SECES DE MATRIZES
[<limite1>:<limite2>][<incremento>]
A(:)
A(3:9)
A(8:3:-1)
A(m:)
A(::2)
Toda matriz
A(3) at A(9) de 1 em 1
A(8) at A(3) de 1 em 1
A(m) at limite superior
Toda matriz de 2 em 2
42
Impresso:
PRINT*, A
A(1,1), A(2,1), A(3,1),..., A(1,2), A(2,2), A(3,2),...
Leitura:
READ*, A
Dever informar os dados na ordem acima (ordem por colunas)
Exemplos:
=, a( 3 , 2 )
=, a( : , 1 )
=, a( :2 , :2 )
=, a
=,TRANSPOSE(a)
=6
=123
=1245
=123456789
=147248369
43
56-FUNES DE MATRIZES
REAL, DIMENSION(-10:10,23,14:28) :: A
LBOUND(SOURCE[,DIM])
UBOUND(SOURCE[,DIM])
SHAPE(SOURCE), RESHAPE(SOURCE,SHAPE)
SIZE(SOURCE[,DIM])
21
7245
44
57-ALOCAO DE MATRIZES
O Fortran90 permite a alocao dinmica de memria. Para isso ser necessrio utilizar
os comandos ALLOCATABLE, ALLOCATE, ALLOCATED e DEALLOCATE.
! 1D
! 2D
READ*, isize
ALLOCATE(idade(isize), STAT=err)
IF (err /= 0) PRINT*, idade : Falhou a alocao de memria
ALLOCATE(velo(0:isize-1,10), STAT=err)
IF (err /= 0) PRINT*, velo : Falhou a alocao de memria
45
________
Limite(s) inferior(es)?
________
Limite(s) Superior(es)?
________
Tamanho da matriz?
________
________
Limite(s) inferior(es)?
________
Limite(s) Superior(es)?
________
Tamanho da matriz?
________
________
Limite(s) inferior(es)?
________
Limite(s) Superior(es)?
________
Tamanho da matriz?
________
________
Limite(s) inferior(es)?
________
Limite(s) Superior(es)?
________
Tamanho da matriz?
________
46
47
PROGRAM
Seco principal do programa aonde a execuo inicia e finaliza. Pode conter vrios
procedimentos.
MODULE
Seco do programa que pode conter novas declaraes e procedimentos, e que pode
ser anexado ao programa principal.
SUBROUTINE
Um programa com parmetros de entrada e sada que pode ser chamada de dentro do
programa principal com o comando CALL
CALL relatorio(titulo)
FUNCTION
Similar a uma SUBROUTINE, no entanto, retorna um nico valor e pode ser
executado de dentro de um coma ndo.
PRINT*, Resultado da Funo : , f(x)
48
62-PROGRAMA PRINCIPAL
PROGRAM principal
! Comandos de declarao
! Comandos executveis
CONTAINS
SUBROUTINE sub1(...)
!Comandos executveis
END SUBROUTINE sub1
! ...
FUNCTION func(...)
!Comandos executveis
END FUNCTION func
END PROGRAM principal
O comando PROGRAM opcional, assim como o nome do programa, mas uma boa
prtica sempre us- los.
Exemplo:
PROGRAM main
IMPLICIT NONE
REAL :: x
READ*, x
PRINT*, SQRT(x) ! Funo interna
PRINT*, Negative(x) ! Funo do usurio
CONTAINS
REAL FUNCTION Negative(a)
REAL, INTENT(IN) :: a
Negative = -a
END FUNCTION Negative
END PROGRAM Main
49
63-PROCEDIMENTOS
Bibliotecas:
64-Procedimentos: SUBROUTINE
SUBROUTINE <nome> [(<argumentos>)]
Declarao dos argumentos dummy
Declarao dos objetos
Comandos executveis
END [SUBROUTINE [<nome>]]
Exemplo:
PROGRAM algo
IMPLICIT NONE
...
CALL ImprimeNum(numeros)
...
CONTAINS
SUBROUTINE ImprimeNum(num)
REAL, DIMENSION(:), INTENT(IN) :: num
PRINT*,Esses so os nmeros, num
END SUBROUTINE ImprimeNum
END PROGRAM algo
50
65-Procedimentos: FUNCTION
Funo funciona sobre o mesmo princpio de Sub-rotina, com a exceo que a funo
retorna um valor;
Funo pode ser definida na rea de declarao de variveis quando se identifica o tipo
da funo.
Exemplo:
PROGRAM algo
IMPLICIT NONE
...
PRINT*, F(a,b)
...
CONTAINS
REAL FUNCTION F(x,y)
REAL, INTENT(IN) :: x,y
F=SQRT(x*x + y*y)
END FUNTION F
END PROGRAM algo
51
66-EXERCCIO 11 B SUBROTINA
1 B Caminhe para o diretrio ~/curso/Fortran/ex11. Edite o arquivo Subrotina.f e adicione a
sub-rotina de acordo com a descrio do problema.
Esse programa possui uma rotina interna que retorna, como primeiro argumento, a soma de
dois nmeros reais.
Sub-rotina summy(arg1, arg2, arg3)
arg1
arg2
arg3
arg1=arg2+arg3
O programa principal dever chamar a rotina trs vezes e imprimir o resultado:
1. Nmeros: 2.6 e 3.1
2. Nmeros: 6.1 e 9.2
3. Nmeros: 0.1 e 0.555
67-EXERCCIO 12 B FUNO
1 B Caminhe para o diretrio ~/curso/Fortran/ex12. Edite o arquivo funcao.f e adicione a
funo de acordo com a descrio do problema.
Esse programa possui uma funo interna que retorna a soma de dois nmeros reais, fornecido
pelos argumentos.
Funo real summy(arg1,arg2)
Arg1
Arg2
summy=arg1+arg2
O programa principal dever chamar a rotina quatro vezes e imprimir o resultado:
1.
2.
3.
4.
52
68-EXERCCIO 13 B PROCEDIMENTOS
Esse programa chama uma funo que por sua vez chama a duas vezes a sub-rotina do
Fortran90, RANDOM_NUMBER(r), para obter um nmero randmico e simular um
arremesso de dados.
2-Mesmo aps substituir as reticncias pelos comandos adequados, haver erros na
compilao. Leia com ateno os provveis erros e tente corrigi- los.
53
Sintaxe:
MODULE <nome>
<Comandos de declarao>
[ CONTAINS
<Definio de procedimentos>]
END [ MODULE [ <nome> ]]
PROGRAM teste
USE <nome>
IMLPICIT NONE
...
END PROGRAM teste
54
Esse programa cria um mdulo que possui duas definies de funes que calculam a mdia e
o desvio padro de um vetor real de tamanho indefinido. O mdulo tambm registra quantas
vezes as funes foram utilizadas.
2 B Substitua as linhas com reticncias com o comando adequado a definio de um mdulo.
55
ENTRADA E SADA
72-ENTRADA / SADA
O Fortran90 possui uma grande variedade de opes de I/O, que permitem diferentes
tipos de arquivos se conectarem ao programa principal para leitura e gravao.
Arquivo
Ao
Status
Mtodo de acesso
Seqencial, Direto
56
73-Comando OPEN
OPEN([UNIT=]<inteiro>, &
FILE=<arquivo>, ERR=<rtulo>, &
STATUS=<status>, ACCESS=<mtodo>, &
ACTION=<modo>, RECL=<expresso>)
UNIT=
FILE=
ERR=
Especifica uma posio lgica de controle caso haja algum erro na abertura
do arquivo;
STATUS=
>OLD=
>NEW=
>REPLACE=
>SCRATCH=
>UNKNOW=
ACCESS=
O arquivo j existe;
O arquivo no existe;
O arquivo ser sobreposto;
O arquivo temporrio e ser apagado quando fechado (CLOSE);
Desconhecido;
>DIRECT=
>SEQUENTIAL=
ACTION=
>READ=
>WRITE=
>READWRITE=
RECl=
Somente leitura;
Somente gravao;
Leitura e gravao;
Exemplo:
OPEN(17,FILE=>saida.dat=,ERR=10,STATUS=>REPLACE=,&
ACCESS=>SEQUENTIAL=,ACTION=>WRITE=)
OPEN(14,FILE=>entra.dat=,ERR=10,STATUS=>OLD=,&
RECL=exp, ACCESS=>DIRECT=,ACTION=>READ=)
57
74-Comando READ
READ([UNIT=]<inteiro>, [FMT]=<formato>,&
IOSTAT=<int -var>, ERR=<rtulo>, &
END=<rtulo>, EOR=<label>, &
ADVANCE=<modo>, REC=<expresso>,&
SIZE=<num-caracteres>) <lista de variveis>
UNIT=
FMT=
ERR=
Especifica uma posio lgica de controle caso haja algum erro de leitura;
IOSTAT=
END=
EOR=
REC=
Especifica o nmero do registro que deve ser lido no modo de acesso direto;
Exemplo:
READ(14,FMT=>(3(F10.7,1x))=,REC=exp) a,b,c
READ(*, >(A)=, ADVANCE=>NO=,EOR=12,SIZE=nch) str
58
75-Comando WRITE
WRITE([UNIT=]<inteiro>, [FMT]=<formato>,&
IOSTAT=<int -var>, ERR=<rtulo>, &
ADVANCE=<modo>, &
REC=<expresso>) <lista de variveis>
UNIT=
FMT=
ERR=
Especifica uma posio lgica de controle caso haja algum erro de gravao;
IOSTAT=
REC=
Especifica o nmero do registro que deve ser lido no modo de acesso direto;
Exemplo:
WRITE(17,FMT=>(I4)=,IOSTAT=stat, ERR=10) val
WRITE(*, >(A)=, ADVANCE=>NO=) >Amarelo=
59
76 - Comando FORMAT/FMT=
Exemplo:
WRITE(17,FMT=>(2X,I4,1X,I4,1X,==Nome:==,A7)=) i, j, str
11 -195 Nome: Felipe
WRITE(*, FMT=10) a, b
10 FORMAT(>vals=,2(F15.6,2X))
Vals
-1.051330
333356.000033
77-Descritores de Formatos
Iw
Fw.d
Ew.d
Lw
A[w]
w numero de caracteres
nX
pula n espaos
Fecha um arquivo
REWIND
BACKSPACE
ENDFILE
60
79-Comando DATA
Exemplo:
INTEGER :: count, I, J
REAL :: inc, max, min
CHARACTER(LEN=5) :: luz
LOGICAL :: vermelho, azul, verde
DATA count/0/, I/5/, J/100/
DATA inc, max, min/1.0E-05, 10.0E+05, -10.0E+05/
DATA luz/=Clara=/
DATA vermelho/.TRUE./, azul, verde/.FALSE.,.FALSE./
61
80-EXERCICIOS 16 B I/O
1 - Caminhe para o diretrio ~/curso/Fortran/ex16. Edite o programa Write_io.f. Substitua
as reticncias pelo comando adequado.
Esse programa solicita dados para serem digitados e os grava em um arquivo.
2 B Compile e execute o programa, testando com os seguintes valores:
Blair
94. 97. 97. 94.
Major
2. 6. 6. 5.
Ashdown 49. 28. 77. 66.
END
0. 0. 0. 0.
3 - Edite o programa Read_io.f. Substitua as reticncias pelo comando adequado.
4 - Compile e execute o programa.
81-EXERCICIOS 17 B FORMATAO
1 B Dado o comando abaixo:
READ(*,'(F10.3,A2,L10)') A,C,L
Como ser representado o valor de A (REAL), o valor de C (CHARACTER de tamanho 2) e
o valor de L LOGICAL logical) para os seguintes valores de dados? (OBS: b significa espao
em branco.)
bbb5.34bbbNOb.TRUE.
5.34bbbbbbYbbFbbbbb
b6bbbbbb3211bbbbbbT
bbbbbbbbbbbbbbbbbbF
2 - Caminhe para o diretrio ~/curso/Fortran/ex17. Edite o programa IOFormatado.f.
Substitua as reticncias pelo comando adequado.
Esse programa gera um arquivo com linhas de cabealho e linhas de dados, sendo: NAME
(at 15 caracteres), AGE (at 3 dgitos), HEIGHT (em metros 4 posies e 2 decimais) e o
FONE ( 4 dgitos inteiros).
Height
Name
Age
(metres)
Tel. No.
-----------------Bloggs J. G.
45
1.80
3456
Clinton P. J.
47
1.75
6783
62
82-REFERNCIAS
1 B IBM XL Fortran 8.1 User=s Guide
2 B IBM XL Fortran 8.1 Language Reference
3 B INTEL Fortran 9 Language Reference
4 B The University of Liverpool B Fortran 90 Programming
Dr. A.C. Marshall