Você está na página 1de 63

Universidade de So Paulo

Instituto Astronmico e Geofsico


Departamento de Cincias Atmosfricas

Curso Bsico de Programao em Linguagem FORTRAN-77

Por:
Edmilson Dias de Freitas
Departamento de Cincias Atmosfricas do IAG-USP

So Paulo
Maro de 2004

i
SUMRIO
1. Introduo. .....................................................................................................................1
1.1. Um breve histrico. ................................................................................................1
1.2. Algoritmos. .............................................................................................................2
2. Conceitos Introdutrios sobre a Linguagem FORTRAN. .............................................3
2.1. Caracteres vlidos na Linguagem FORTRAN. ......................................................3
2.2. Folha de Codificao FORTRAN. .........................................................................3
2.3. Constantes. ..............................................................................................................5
2.4. Variveis .................................................................................................................6
2.5. Expresses aritmticas. ...........................................................................................7
2.6. Funes Embutidas. ................................................................................................8
2.7. Comandos da Linguagem FORTRAN. ...................................................................8
2.8. Exerccios Prticos................................................................................................12
3. Comandos de Entrada e Sada E/S. ...........................................................................13
3.1. Entrada de Dados. .................................................................................................13
3.2. O Comando FORMAT. .........................................................................................13
3.2.1.

Especificao numrica para inteiro. ...........................................................14

3.2.2.

Especificao numrica para real sem expoente. ........................................15

3.2.3.

Especificao numrica para real com expoente. ........................................16

3.3. Comandos OPEN e CLOSE..................................................................................17


3.4. Sada de dados. .....................................................................................................20
3.5. Exerccios prticos. ...............................................................................................21
4. Conjuntos e variveis indexadas..................................................................................22
4.1. Vetores ..................................................................................................................22
4.2. Declarao DIMENSION ......................................................................................23
4.3. Declaraes de tipo. ..............................................................................................23
4.4. Declaraes DIMENSION para matrizes. .............................................................23
5. Cadeias de Caracteres ..................................................................................................25
5.1. Constantes do tipo Caractere ................................................................................25
5.2. Variveis do tipo Caractere ..................................................................................25
5.3. Conjuntos de Caracteres. ......................................................................................25
5.4. Constantes Simblicas do Tipo Caractere. ...........................................................26
5.5. Subcadeias de Caracteres. .....................................................................................27
5.6. O comando FORMAT para caracteres. ................................................................27

5.7. Funes intrnsecas para caracteres. .....................................................................28


5.7.1. Funo LEN ......................................................................................................29
5.7.2. Funo INDEX. .................................................................................................29
5.7.3. Funo ICHAR. .................................................................................................29
5.7.4. Funo CHAR ...................................................................................................30
6. Estruturas de Controle .................................................................................................31
6.1. Estrutura de Seleo. ............................................................................................31
6.2. Estrutura de Iterao. ............................................................................................34
6.3. Entrada e sada de conjuntos DO Implcito . ......................................................37
6.4. Exerccios Prticos. ...............................................................................................38
7. Subprogramas. .............................................................................................................39
7.1. Funes. ................................................................................................................39
7.1.1.

Funes de Comando. ..................................................................................39

7.1.2.

Subprograma FUNCTION. ..........................................................................40

7.2. Sub-rotinas............................................................................................................42
7.2.1.

O Comando CALL. ......................................................................................43

7.3. O comando COMMON .........................................................................................47


7.4. Tpico adicional - O comando DATA. ................................................................49
7.5. Exerccios prticos ................................................................................................50
8. Formato de dados utilizados no GrADS. .....................................................................51
8.1. O arquivo descritor de dados no GrADS. .............................................................51
8.2. Seqncia dos dados. ............................................................................................53
8.3. Exerccios Prticos................................................................................................58
9. Referncias Bibliogrficas ...........................................................................................60

1. Introduo.

1. Introduo.
Este material tem como principal objetivo apresentar alguns aspectos bsicos de
programao em linguagem FORTRAN. A idia do curso surgiu pela grande utilizao
da linguagem FO RTRAN nas vrias reas de estudo do Departamento de Cincias
Atmosfricas. Alm da utilizao para construo de programas simples durante a
execuo das disciplinas, acredito que o conhecimento adquirido durante o curso ser de
grande valia para qualquer trabalho futuro na rea de meteorologia. O contedo deste
curso foi baseado em alguns livros sobre a linguagem e na experincia adquirida
durante minha permanncia no IAG. Alm dos aspectos bsicos da linguagem
FORTRAN, foi includo um tpico dedicado ao tratamento de dados atravs da
utilizao conjunta do FORTRAN e do software GrADS (the Grid Analysis and Display
System) altamente utilizado no departamento. Apesar de ser uma verso com algumas
correes e incluses sobre a primeira, escrita em 2001, certo que ainda existam
alguns aspectos que devam ser melhorados e at mesmo alguns erros. Sendo assim,
sugestes e crticas sero sempre bem vindas e podem ser enviadas para o endereo
efreitas@model.iag.usp.br .
1.1. Um breve histrico.
A linguagem FORTRAN foi a primeira linguagem de programao de alto nvel a
ser proposta (surgiu em 1956). Foi sugerida visando a resoluo de problemas da rea
cientfica, atravs do uso de computadores. Seu nome uma composio de FORmula
TRANslation. uma das linguagens mais difundidas no meio tcnico-cientfico, tendo
sido ao longo do tempo aprimorada, constituindo as diversas verses disponveis. Uma
das mais recentes o FORTRAN -95. Neste curso sero apresentados aspectos da verso
FORTRAN-77, mas que so vlidos para as verses mais recentes, uma vez que estas,
so apenas melhorias da verso FORTRAN-77.
Os computadores atuais so incrivelmente rpidos e podem executar conjuntos de
instrues extremamente complexos, porm eles so apenas mquinas. O que todo
computador pode realmente fazer seguir ordens muito simples, as quais foram
cuidadosamente consideradas e refletidas por um programador e escritas em uma
linguagem de programao, como o FORTRAN.
Uma das primeiras coisas que se deve aprender, como resolver problemas com o
auxlio do computador, isto , como montar, logicamente, as instrues para obter sua
Curso Bsico de Programao em Linguagem FORTRAN.

1. Introduo.
tarefa realizada pelo computador. Especificamente, deve -se aprender a projetar e
escrever um algoritmo, que um procedimento que o computador pode realizar.
1.2. Algoritmos.
Um algoritmo uma seqncia ordenada de passos executveis, e precisamente
definidos, que manipulam um volume de informaes, a fim de obter um resultado. Um
algoritmo correto deve possuir trs qualidades:
1) Cada passo no algoritmo deve ser uma instruo que possa ser realizada;
2) A ordem dos passos deve ser precisamente determinada;
3) O algoritmo deve ter fim.
Vamos analisar este procedimento atravs de 2 exemplos
1) Exemplo - Procedimento para contar:
-

Passo 1: Faa N igual a zero.

Passo 2: Some 1 a N.

Passo 3: Volte ao Passo 2.

Este procedimento no um algoritmo, pois ele no satisfaz a condio 3 de um


algoritmo correto.
2) Exemplo - Procedimento para contar at 100:
-

Passo 1: Faa N igual a zero.

Passo 2: Some 1 a N.

Passo 3: Se N menor que 100, volte ao Passo 2. Caso contrrio, pare.

Este procedimento um algoritmo, pois ele satisfaz as trs condies de um


algoritmo correto.
Durante o desenvolvimento do curso, constantemente ser necessria a construo
de algoritmos. Este um procedimento indispensvel antes da construo de qualquer
programa.

Curso Bsico de Programao em Linguagem FORTRAN.

2. Conceitos Introdutrios sobre a Linguagem FORTRAN

2. Conceitos Introdutrios sobre a Linguagem FORTRAN.


Neste item, sero apresentados alguns fundamentos de programao particularizados
para o contexto da linguagem FORTRAN.
2.1. Caracteres vlidos na Linguagem FORTRAN.
Os caracteres vlidos so:

Caracteres Alfabticos : todas as letras maisculas e minsculas do alfabeto


latino (A at Z). Embora existam alguns tipos de plataformas que aceitem a
alternncia entre maisculas e minsculas, algumas no o fazem. Por
exemplo: definida em algum ponto do programa a varivel var. Na maioria
das plataformas pode-se fazer referncia esta varivel utilizando-se de
letras maisculas ou mesmo uma mistura entre ela s, tais como Var , VAR,
etc., sem que haja problemas de identificao da varivel, mas essa no
uma regra geral. Sendo assim, recomenda-se o uso de letras maisculas.

Caracteres numricos : todos os dgitos (0 at 9).

Caracteres especiais: alguns exemplos so:


<branco> ou

. (ponto)

, (vrgula)

(apstrofo)

(aspas)

&

2.2. Folha de Codificao FORTRAN.


Num programa FORTRAN-77, os comandos devem ser escritos em campos
delimitados e fixos. Para facilitar o processo de codificao de programas, existem
formulrios especiais. Estes formulrios so organizados em linhas de 80 colunas, sendo
que cada coluna pode conter apenas um caractere e cada linha corresponde a, no
mximo, um comando da linguagem. Note -se que h comandos que podem ocupar mais
que uma linha. O esquema abaixo uma indicao da utilidade de cada campo.

Curso Bsico de Programao em Linguagem FORTRAN.

2. Conceitos Introdutrios sobre a Linguagem FORTRAN

Em alguns editores existe uma indicao dos campos, atravs da utilizao de cores,
como o caso do FORTRAN Visual Workbench v 1.0 para windows. A figura abaixo
mostra um exemplo de comando em linguagem FORTRAN que ultrapassa o limite
permitido.

Na coluna 1, C ou * indicam linha de comentrio. Comentrios so ignorados pelo


compilador FORTRAN, mas so essenciais a um programa bem documentado. Linhas
de comentrios podem ser inseridas em qualquer parte do programa -fonte. Uma outra
maneira utilizada para inserir um comentrio atravs da utilizao do caractere !
aps um comando. No caso ilustrado acima, haveria um erro de compilao. A maneira
de corrigir esse erro atravs da utilizao do campo de continuao (coluna 6). Para
isso, pode ser utilizado qualquer caractere (diferente de <branco>ou zero). Pode haver
no mximo 19 linhas de continuao. A figura abaixo ilustra a utilizao de comentrio
aps um comando e do campo de continuao.

Curso Bsico de Programao em Linguagem FORTRAN.

2. Conceitos Introdutrios sobre a Linguagem FORTRAN

Os nmeros de comandos podem ser quaisquer (inteiros positivos) consistindo em 1


a 5 dgitos e no precisam estar em ordem. Estes nmeros devem ser colocados no
campo delimitado pelas colunas 1 e 5. Os nmeros dos comandos no afetam a sua
ordem de execuo. Brancos e zeros esquerda so ignorados. Nem todos os comandos
precisam ser numerados.
As colunas 73 a 80 so ignoradas pelo compilador e podem ser utilizadas, por
exemplo, para informaes de identificao dos comandos e do programa.
2.3. Constantes.
Uma constante uma quantidade fixa, invarivel; um valor que no muda no
decorrer dos clculos relativos ao programa.
Existem trs classes de constantes:

Numricas: aquelas que tratam com nmeros inteiros ou reais;

Lgicas : aquelas que tratam com valores lgicos Verdadeiro e Falso.

Cadeias de Caracteres: aquelas que tratam de seqncias de caracteres


admitidos pela linguagem.

Por hora, sero apresentadas apenas constantes numricas. Os outros tipos sero
vistos no decorrer do curso.
Constantes numricas inteiras: representam nmeros inteiros escritos sem o ponto
decimal. Os valores mximo e mnimo para este tipo de constante dependem
exclusivamente do sistema de computao utilizado.
Para valores positivos, o sinal pode ser omitido: Ex:
-2

+2

25

-1

Constantes numricas reais: representam os nmeros reais. So escritas


necessariamente com um ponto decimal ou com um expoente ou com ambos. Da mesma

Curso Bsico de Programao em Linguagem FORTRAN.

2. Conceitos Introdutrios sobre a Linguagem FORTRAN


forma que para as constantes inteiras, os valores m ximo e mnimo deste tipo de
constante dependem do sistema de computao utilizado.
Algumas representaes possveis so:
n.m
n.

n = parte inteira

.m

M = parte decimal

n.mE S

S = expoente na base 10 (com um ou dois dgitos)

2.4. Variveis
Varivel uma entidade que armazena constantes e conhecida no programa por
um nome. Na realidade, um nome representando uma rea de memria. Pode -se
distinguir duas classes de variveis: as variveis simples, que num dado instante,
armazenam um nico valor (ex: contadores), e as variveis compostas, que podem
armazenar um conjunto de valores do mesmo tipo, que podem ser acessados
individualmente (ex: vetores, matrizes).
Para a utilizao de variveis necessrio declarar qual o tipo de varivel utilizada.
Declaraes possveis so:
- Declarao de variveis inteiras:
Ex: INTEGER IANO, IMES, PDIA....

- Declarao de variveis reais:

Ex: REAL ICHUVA, CONCENTRACAO, ...


A declarao explicita do tipo de variveis uma prtica importante de programao
por influir diretamente nos aspectos de legibilidade, documentao e manuteno dos
programas. O FORTRAN no impe esta prtica pois admite uma definio implcita de
tipo de variveis, baseada unicamente no primeiro caractere do nome da varivel
considerada: se for I, J, K, L, M ou N, a varivel ser considerada do tipo inteiro, caso
contrrio ser real. A declarao explcita de tipo de varivel, embora no seja
obrigatria, prevalece sobre a conveno implcita, ou seja, a definio implcita do tipo
de varivel s considerada se for omitida a declarao explcita. Nos exemplos citados
acima, as variveis PDIA e ICHUVA seriam, pela definio implcita, real e inteiro,
Curso Bsico de Programao em Linguagem FORTRAN.

2. Conceitos Introdutrios sobre a Linguagem FORTRAN


respectivamente. Entretanto, a declarao explcita prevalece, ficando PDIA como
inteiro e ICHUVA como real.
2.5. Expresses aritmticas.
As expresses aritmticas

so

formadas

utilizando

operandos

numricos

combinados com operadores aritmticos. Estes operadores so:

+ (adio)

- (subtrao)

* (multiplicao)

/ (diviso)

** (exponenciao)

Os operandos podem ser constantes, variveis, funes aritmticas ou expresses


aritmticas entre parnteses. importante observar que uma expresso aritmtica pode
ser constituda por um nico operando, sem a presena obrigatria de um operador.
Os operadores devem ser explcitos:
Exemplo: Para representar 2 vezes ICHUVA, deve -se usar 2*ICHUVA e no
2ICHUVA.
No permitido o uso de operadores adjacentes.
Exemplo: A*-B dever ser representado por A*( -B).
A avaliao das expresses obedece seguinte hierarquia da s operaes:

No caso de operadores com mesma hierarquia, a avaliao realizada da esquerda


para a direita (exceo feita dupla exponenciao que feita da direita para a
esquerda)
Os parnteses alteram a prioridade do clculo: a expresso mais interna calculada
antes.
Exemplo: A/2*B diferente de A/(2*B)

Curso Bsico de Programao em Linguagem FORTRAN.

2. Conceitos Introdutrios sobre a Linguagem FORTRAN


2.6. Funes Embutidas.
As funes embutidas (Intrnsecas) so funes de uso freqente, j providas pela
linguagem FORTRAN. Elas esto armazenadas numa biblioteca de funes do sistema
computacional.
As funes embutidas de tipo numrico, cujos resultados so valores numricos,
podem ser usadas como operandos nas expresses aritmticas.
Para utilizar as funes de biblioteca, bastam referncias a seus nomes,
acompanhados de um conjunto de valores de entrada (argumentos). Deve-se observar,
para a correta utilizao destas funes, os tipos dos valores de entrada exigidos. O tipo
do resultado fornecido pela funo tambm pr-definido pela linguagem e deve ser
corretamente utilizado nas expresses aritmticas.
A seguir, so apresentadas algumas das principais funes embutidas, onde X um
argumento do tipo real e I um argumento do tipo inteiro.
Funo matemtica

FORTRAN

Tipo de Resultado

SEN (X)

SIN(X)

REAL

COS(X)

COS(X)

REAL

TG(X)

TAN(X)

REAL

SQRT(X)

REAL

Inteiro real

REAL(I) ou FLOAT (I)

REAL

Real inteiro

INT(X) ou IFIX(X)

INTEIRO

|X|

ABS(X)

REAL

ex

EXP(X)

REAL

Ln(X)

ALOG(X)

REAL

Log10(X)

ALOG10(X)

REAL

possvel a combinao de funes:


Exemplos:
a) SQRT(REAL(I))
INT(A*SIN(X))
2.7. Comandos da Linguagem FORTRAN.
Existem duas categorias de comandos na linguagem FORTRAN:
Comandos executveis: so os comandos que executam clculos, E/S, testes ou
alteram o fluxo de controle.
Curso Bsico de Programao em Linguagem FORTRAN.

2. Conceitos Introdutrios sobre a Linguagem FORTRAN


Comandos no-executveis: so comandos que descrevem as caractersticas da
unidade de programa, dos dados, de informaes de edio, etc., mas no causam uma
ao a ser tomada pelo computador durante a execuo do programa.
Os comandos FORTRAN podem ser agrupados, de uma forma geral, como se
segue:
Comando de Atribuio: este comando permite atribuir (associar) um valor a uma
varivel
Exemplos:
R= 4.0
ZETA=(Z/L)
Observaes:
- Em expresses aritmticas mistas, isto , com constantes e/ou variveis reais e
inteiras, o resultado sempre real.
- Em expresses aritmticas que contenham somente entidades do tipo inteiro,
os resultados das suas avaliaes so inteiros.
- Cuidado com os limites mximos dos valores envolvidos. Exemplo: A
=B*G/X. Se B GXLmax, onde todas as variveis so do tipo real e Lmax a
magnitude mxima dos nmeros reais, ento, com a multiplicao (primeira operao),
ocorreria um estouro da capacidade de representao da mquina. Uma possvel soluo
neste caso, seria fazer:
A=B*(G/X)
- Cuidado com os truncamentos na manipulao de nmeros inteiros. Exemplo:
clculo de 80% de um valor X
Y=80/100*X daria zero, pois o resultado da diviso 80/100 (duas constantes
inteiras) produz necessariamente um valor do tipo inteiro, no caso, zero. Uma possvel
soluo seria utilizar valores do tipo real.

Comando de Controle : estes comandos permitem alterar a seqncia de execuo


dos comandos no programa.
Exemplos:
IF(N.EQ.10) GOTO 10
IF(N.EQ.11)GOTO 11
10 WRITE(*,*) N igual a 10
11 WRITE(*,*) N igual a 11
Curso Bsico de Programao em Linguagem FORTRAN.

2. Conceitos Introdutrios sobre a Linguagem FORTRAN


Comando de E/S: estes comandos permitem realizar a transferncia de informaes
entre o usurio (meio externo) e a mquina (computador)
Exemplos:
OPEN(10, FILE=EXEMPLO.DAT,STATUS=OLD)
WRITE(20,100) ICHUVA
READ(50,*) VENTO(I)

Comando de Programa Principal PROGRAM: este comando atribui um nome ao


programa principal. um comando opcional e no-executvel. Deve ser o primeiro
comando utilizado em um programa.
Exemplo:
PROGRAM CALC_MEDIA
Comandos de Declarao ou Especificao: so comandos no-executveis.
Exemplos:
DIMENSION MEDIA(20,50), ICHUVA (20,50,30)
PARAMETER (N=10, M=30)
REAL IPREC, CHUVA
INTEGER VAR1
CHARACTER AUX2*3,NOME*10

Comando de Subprogramas: estes comandos permitem dar nomes e especificar


parmetros para funes e sub-rotinas.
Exemplos:
SUBROUTINE MEDIA(VAR1,INIV,P)
REAL FUNCTION FAT(N)
Os comandos FORTRAN devem obedecer a uma ordem pr-estabelecida na
formao das unidades de programa. A figura abaixo apresenta, de um modo geral, uma
estrutura simplificada desta ordem.

Curso Bsico de Programao em Linguagem FORTRAN.

10

2. Conceitos Introdutrios sobre a Linguagem FORTRAN

O comando END tem como nico objetivo, indicar ao compilador o fim fsico da
unidade de programa. Deste modo, ele s deve ocorrer como o ltimo comando de uma
unidade, e obrigatrio.
O comando STOP encerra a execuo da unidade de programa e retorna o controle
ao siste ma operacional, ou seja, indica o final lgico da execuo programa. Para este
mesmo fim, alternativamente, em alguns ambientes de programao, pose -se utilizar o
comando CALL EXIT ; esta utilizao no recomendvel por questes de
compatibilidade entre ambientes de programao distintos.
Na ausncia de um STOP, o compilador assume que o fim lgico da unidade de
programa coincide com o seu fim fsico.
A figura a seguir apresenta um exemplo dessa situao.

Curso Bsico de Programao em Linguagem FORTRAN.

11

2. Conceitos Introdutrios sobre a Linguagem FORTRAN


2.8. Exerccios Prticos.
1) Instalao e Utilizao do M icrosoft Fortran Visual Workbench.
2) Construo de programas simples.
a. Programa para somar uma varivel
b. Programa para calcular uma mdia entre dois valores
c. Programa para calcular o seno, o cosseno, a tangente, a raiz quadrada, e o
mdulo de uma varivel.
d. Programa para obter a parte inteira de uma varivel real.
e. Programa para verificar o funcionamento dos comandos STOP e END.

Curso Bsico de Programao em Linguagem FORTRAN.

12

3. Comandos de Entrada e Sada E/S

3. Comandos de Entrada e Sada E/S.


Os comandos de Entrada e Sada (E/S) controlam e transferem informaes entre a
unidade de memria principal e um dispositivo externo de entrada/sada (terminais de
vdeo, impressoras, unidades de disco rgido, etc.).
3.1. Entrada de Dados.
A entrada de dados em FORTRAN feita atravs do comando READ e pode ser feita
atravs do teclado ou de um arquivo externo. O comando READ tem a forma geral:
READ(i,n) VAR1, VAR2, VAR3, .....
Onde:
- i indica o nmero da unidade de entrada (para entrada via teclado usa-se o sinal *)
- n indica o nmero do comando FORMAT, que deve ser indicado entre as colunas 1
e 5, e especifica o formato dos dados de entrada. Para o caso de formato livre
utilizado o sinal *. Neste caso, os dados devem ser separados por um espao em
branco ou estar em linhas diferentes.
3.2. O Comando FORMAT.
O comando FORMAT permite especificar a forma em que os dados sero lidos ou
impressos pelos comandos de E/S associados. um comando bastante utilizado,
principalmente quando as E/S so mais elaboradas.
Este comando no-executvel e pode aparecer em qualquer lugar dentro do
programa fonte. recomendvel que ele seja inserido logo aps o comando de E/S
associado.

As especificaes de formato mais usuais so:


- especificao numrica para inteiro;
- especificao numrica para real sem expoente;
- especificao numrica para real com expoente;
- especificao para caractere.

Curso Bsico de Programao em Linguagem FORTRAN.

13

3. Comandos de Entrada e Sada E/S


3.2.1. Especificao numrica para inteiro.
A especificao numrica para inteiro utilizada para definir o comprimento do
campo associado aos valores inteiros, lidos ou escritos. Sua forma geral :

aIw
onde:
- a uma constante inteira e sem sinal que indica o nmero de vezes que esta
especificao I deve ser obedecida, repetitivamente;
- I a indicao para inteiro;
- w uma constante inteira e sem sinal (no nula) que indica o comprimento do
campo do dado (em caracteres).
Como um exemplo, a figura abaixo ilustra o procedimento para ler o arquivo
DATA.DAT, que possui variveis do tipo inteiro na seguinte seqncia: dia, ms, ano,
hora, minuto, segundos.
Estrutura do arquivo DATA.DAT:
15 02 2001 17 34 38

Curso Bsico de Programao em Linguagem FORTRAN.

14

3. Comandos de Entrada e Sada E/S


No exemplo acima so apresentados trs modos diferentes para leitura dos dados no
arquivo DATA.DAT. O primeiro comando, OPEN, faz a abertura de um arquivo
externo que contm os dados de interesse. Este comando ser visto em mais detalhes
posteriormente. No primeiro modo, utilizou-se a opo de formato livre. Esta uma das
maneiras mais utilizadas por no exigir o conhecimento prvio do tamanho de cada
varivel. Entretanto, necessrio que se conhea o tipo de varivel (real, inteiro ou
caractere). No modo 2, cada varivel identificada por um formato prprio, explcito no
comando FORMAT associado, neste caso de nmero 100. As indicaes 1X nesta
declarao de formato, indicam um espao em branco existente entre os dados. Pode -se
omitir esta indicao incluindo o espao em branco ao tamanho da varivel lida. No
nosso exemplo, para a varivel IDIA e para as outras que so formadas por dois dgitos,
poderia ser atribudo o valor 3 (inteiros com trs dgitos) e eliminar a utilizao da
indicao de espao em branco. Este procedimento utilizado no modo 3, que, alm
dessa, faz outra simplificao para o caso em que variveis com o mesmo nmero de
dgitos podem ser representados pelo fator de repetio a anteriormente citado. Por
exemplo, sabe-se que as duas primeiras variveis que sero lidas possuem dois dgitos,
seguidos por um espao em branco. A primeira simplificao considerar essas
variveis como tendo trs dgitos. A segunda simplificao, utilizar o fator de
repetio. Sendo assim, a leitura dessas variveis fica 2I3, conforme ilustrado na figura.
3.2.2. Especificao numrica para real sem expoente.
A especificao numrica para real bsico utilizada para definir o comprimento do
campo associado aos valores reais bsicos, lidos ou escritos. Esta especificao define
tambm, o nmero de casas decima is destes valores. Sua forma geral :
aFw.d
onde:
- a uma constante inteira e sem sinal que indica o nmero de vezes que a
especificao F deve ser obedecida, repetitivamente;
- F a indicao para real;
- w uma constante inteira e sem sinal (no nula) que indica o comprimento do
campo do dado (em caracteres).
- d uma constante inteira e sem sinal, que indica o nmero de casas decimais.
ou seja,

Curso Bsico de Programao em Linguagem FORTRAN.

15

3. Comandos de Entrada e Sada E/S


d casas
decimais

aFw.d XXX.
1 4 2 XX
43
w caracteres

Como exemplo, a figura a seguir apresenta o modo de leitura para valores reais
existentes no arquivo REAL.DAT. Os trs modos apresentados para leitura de valores
inteiros, tambm so vlidos para reais. Por simplicidade, apenas o modo 3
apresentado nessa figura.
Estrutura do arquivo REAL.DAT (existem trs espaos entre cada valor):
602.83

602.61

601.36

604.44

609.58

610.81

3.2.3. Especificao numrica para real com expoente.


A especificao numrica para real com expoente utilizada para definir o
comprimento do campo e o nmero de casas decimais associados aos valores reais com
expoente, lidos ou escritos. Sua forma geral :
aEw.d
onde:
- a, w e d tm o mesmo significado das especificaes anteriores
- E a indicao para real com expoente.

Curso Bsico de Programao em Linguagem FORTRAN.

16

3. Comandos de Entrada e Sada E/S


Na entrada de dados, valem as mesmas convenes sobre o ponto do formato Fw.d.
Deve-se, entretanto, acrescentar ao valor de w o nmero de dgitos utilizados a partir do
indicador E. Na sada, o dgito mais significativo aparece logo direita do ponto. O
nmero de dgitos significativos depende de d. Havendo mais espaos, descontado o
campo do sinal negativo quando for o caso, so impressos brancos. Por garantia, devese fazer w d+7.
A figura a seguir ilustra o caso para abertura do arquivo EXPO.DAT.
Estrutura do arquivo EXPO.DAT (para facilitar, os espaos em branco esto
denotados pelo sinal _.
_ _ _ _6.32E2 _6320.0E-1 _0.632E03

3.3. Comandos OPEN e CLOSE.


Em alguns exemplos vistos anteriormente, vimos que quando a entrada de dados
feita atravs de um arquivo externo, necessria a abertura do mesmo pelo FORTRAN.
Isto feito atravs do comando OPEN.
O comando OPEN inicia o arquivo para que as operaes de E/S possam ser
realizadas sobre ele. Atravs deste comando um nmero de unidade associado a um
arquivo especfico. Tambm, atravs do comando OPEN, so especificados os atributos
do arquivo.
A forma geral deste comando :
OPEN (<unidade>,FILE=<nome do arquivo>,STATUS=<status>,
ACESS = <acesso>,FORM=<formato>,IOSTAT=< iocheck >,
ERR=<errlabel>,RECL=<comprimento do registro>)

Curso Bsico de Programao em Linguagem FORTRAN.

17

3. Comandos de Entrada e Sada E/S


Dependendo da verso do compilador FORTRAN, outros especificadores podem ser
includos no comando OPEN.
<unidade> - expresso do tipo inteiro, que indica o nmero da unidade associado ao
arquivo que esta sendo iniciado.
<nome> -

o nome do arquivo. Deve ser especificado de acordo com as

convenes do sistema operacional. Geralmente, uma expresso do tipo caractere.


Pode ser includo ao nome do arquivo o diretrio em que ele se encontra. Se nenhuma
indicao feita, o FORTRAN ir procurar o arquivo no diretrio corrente.
<status> - pode ser: OLD, NEW, SCRATCH ou UNKNOWN. Utiliza-se OLD
quando o arquivo j existe. NEW, para criar novos arquivos. Quando esse status
utilizado, a cada vez que o programa rodado, necessrio que o arquivo seja apagado
previamente. SCRATCH, para arquivos que existiro somente durante a execuo do
programa. Neste caso, o especificador FILE deve ser omitido (pouco utilizado).
UNKNOWN, quando no se aplica nenhum dos casos anteriores. Geralmente
utilizado para arquivos de sada. A vantagem desse status poder rodar o programa
vrias vezes sem ter a necessidade de apagar previamente o arquivo de sada.
<acesso> - pode ser: SEQUENTIAL ou DIRECT, para indicar acesso seqencial
(arquivos formatados, ASCII) ou direto (arquivos binrios). O padro (default)
seqencial.
<formato> - pode ser: FORMATTED ou UNFORMATTED, para indicar arquivo
formatado ou no-formatado. O padro formatado para acesso seqencial e noformatado para acesso direto.
< iocheck >- uma varivel do tipo inteiro que armazena um valor indicativo do
status da operao de E/S sendo utilizada, podendo indicar, numa condio de erro, o
tipo do erro ocorrido. O valor assumido por < iocheck > dependente do sistema
utilizado. Entretanto, em geral, 0 (zero) indica ausncia de erros; valores negativos
indicam fim de arquivo; valores positivos indicam erro.
<errlabel> - o rtulo de uma afirmao executvel na mesma unidade de programa.
Um erro de E/S causa a transferncia do controle para a afirmao em errlabel. Se for
omitido, o efeito de um erro de E/S determinado pela presena ou ausncia de iocheck
<nmero de registro> - este especificador s deve ser utilizado em comandos de E/S
relacionados com arquivos de acesso direto (ou aleatrio). uma expresso do tipo
inteiro, positiva, e especifica o comprimento, em bytes, do registro que est sendo

Curso Bsico de Programao em Linguagem FORTRAN.

18

3. Comandos de Entrada e Sada E/S


acessado. Quando for apresentada a maneira de escrever um arquivo para ser lido no
Software GrADS, este especificador ser mais bem explicado.
O comando CLOSE tem o efeito inverso ao do comando OPEN. Aps a execuo
do CLOSE, o nmero de unidade desconectado do arquivo em questo. Deste modo,
este nmero pode ser utilizado para um outro arquivo diferente. Se este comando no
for utilizado para fechar um arquivo, a execuo dos comandos STOP ou END ir
fecha -lo automaticamente. Neste sentido, o uso do comando CLOSE opcional, embora
seja recomendvel e, algumas vezes, indispensvel.
Seu formato geral :
CLOSE(<unidade>,STATUS=<status>,IOSTAT=< iocheck >)

<unidade> e <iocheck> tm os mesmos significados descritos anteriormente.


<status>- pode ser KEEP ou DELETE, indicando se o arquivo deve ser mantido ou
apagado aps a execuo do comando CLOSE. O padro KEEP, exceto para os
arquivos criados sem o especificador FILE (arquivos do tipo SCRATCH).
A figura abaixo d um exemplo da abertura e do fechamento de alguns arquivos
com diferentes caractersticas.

Curso Bsico de Programao em Linguagem FORTRAN.

19

3. Comandos de Entrada e Sada E/S

Observe que a unidade 30 no foi fechada. Isto ser feito automaticamente pelos
comandos STOP e END ao trmino do programa.
3.4. Sada de dados.
A sada de dados em FORTRAN feita atravs do comando WRITE e pode ser feita
atravs do monitor (tela) ou para um arquivo externo. O comando WRITE tem a forma
geral:
WRITE(i,n) VAR1, VAR2, VAR3, .....
onde i e n tm os mesmos significados apresentados para o comando READ.
As especificaes de formato para o comando WRITE seguem as mesmas regras do
comando READ. Exceo feita para valores reais com expoente. Neste caso, os
valores sero impressos na forma:
<valor>E<expoente com dois dgitos e sinal>
onde <valor> ser sempre escrito com o primeiro algarismo significativo direita do
ponto. Ex: o valor 1,6 x 10-19 ser impresso, utilizando o formato E10.2 , como:
_ _ _.16E-18
Curso Bsico de Programao em Linguagem FORTRAN.

20

3. Comandos de Entrada e Sada E/S


Deve-se tomar cuidado com o nmero de dgitos reservados para a escrita. No
exemplo acima, o nmero mnimo de dgitos 7, ou seja, E7.2. Caso o nmero seja
insuficiente, sero impressos na tela sinais do tipo ********, indicando que o formato
utilizado para a escrita insuficiente.
A figura a seguir apresenta alguns exemplos da utilizao do comando WRITE.

3.5. Exerccios prticos.


- Abertura de arquivos, leitura de variveis, operaes com variveis, escrita de
resultado.

Curso Bsico de Programao em Linguagem FORTRAN.

21

4.Conjuntos e variveis indexadas.

4. Conjuntos e variveis indexadas


Como citado anteriormente, as variveis de um programa podem ser classificadas
em variveis simples e variveis compostas. As variveis simples armazenam, num
dado instante, um nico valor. Por outro lado, as variveis compostas homogneas
podem armazenar um conjunto de valores de mesmo tipo, que podem ser acessados
individualmente.

As

variveis

compostas

homogneas

(arrays)

permitem

implementao de estruturas de dados mais complexas que as permitidas pelo uso das
variveis simples. Em FORTRAN, os conjuntos homogneos so representados por
seqncias de variveis indexadas.
4.1. Vetores
Um vetor um conjunto unidimensional de variveis. Um nome associado ao
vetor como um todo, sendo cada elemento deste vetor referenciado por um ndice, entre
parntesis, que acompanha o nome atribudo ao vetor. O ndice que discrimina os
elementos constituintes do vetor pode ser qualquer expresso do tipo inteiro.
Consideremos, por exemplo, uma varivel que contenha dados horrios de precipitao
para um dia. Esta varivel pode ser tratada como um vetor contendo 24 elementos, na
forma:
chuva(1)
chuva(2)
chuva(3)
.
.
.
chuva(24)
As variveis indexadas podem ter at 7 ndices. Para o caso de um vetor, todos os
elementos tm o mesmo tipo. Os elementos de um vetor so armazenados em posies
consecutivas da memria do computador.
O nmero de elementos de um vetor e os limites superior e inferior para o ndice
devem ser declarados no incio do programa. Uma das possveis formas a utilizao da
declarao DIMENSION.

Curso Bsico de Programao em Linguagem FORTRAN.

22

4.Conjuntos e variveis indexadas.


4.2. Declarao DIMENSION
DIMENSION uma declarao e, portanto, deve vir antes do primeiro comando
executvel do programa e aps as declaraes de tipo e de constantes simblicas.
Se o limite inferior do ndice no for especificado, ele assumido como sendo igual
a 1.
Sua forma geral :
DIMENSION var1(e1i :e1s), var2(e 2i:e 2 s), ... varN(eNi :eNs)
Sendo:
- vari os nomes dos vetores;
- eii limites inferiores para o vetor i;
- eis limite superior para o veto i.
Os limites inferior e superior devem ser constantes inteiras e devem satisfazer a
condio (eis > eii )
Exemplo:
DIMENSION chuva(100), media(0:25)
A declarao acima informa ao compilador que a varivel chuva um vetor com
100 elementos. Como no foi declarado o limite inferior, o compilador assumir o valor
1. Para a varivel mdia o compilador entender que esta varivel um vetor que possui
26 elementos, sendo o limite inferior igual a 0.
Outra maneira de declarao do nmero de elementos de um vetor atravs da
declarao de tipo. A declarao de tipo pode substituir completamente a declarao
DIMENSION , como ser visto a seguir.
4.3. Declaraes de tipo.
Alguns exemplos de declarao de tipo so: REAL e INTEGER. O nome, o nmero
de elementos e os limites para o ndice de um vetor podem ser especificados por
declaraes de tipo. Neste caso, a declarao DIMENSION no deve ser utilizada.
Exemplos:
REAL chuva(0:50), rad(24)
INTEGER ihora(24), dia(31)
4.4. Declaraes DIMENSION para matrizes.
A declarao DIMENSION para matrizes semelhante quela para vetores. A
diferena que todas as dimenses devem ser indicadas. Este tipo de declarao muito
utilizado na criao de grades regulares para serem lidas no GrADS.
Curso Bsico de Programao em Linguagem FORTRAN.

23

4.Conjuntos e variveis indexadas.


Exemplos:
DIMENSION topo(100,100), solo(100,100), vento(100,100,20) etc.
O exemplo acima indica que a varivel topo uma matriz de 100 colunas por 100
linhas. O mesmo acontece para a varivel solo. A varivel vento esta disposta na mesma
grade que as variveis anteriores mas possui uma terceira dimenso, por exemplo, os
nveis verticais.
As declaraes de tipo, semelhantemente ao caso vetorial, podem substituir a
declarao DIMENSION.
Exemplo:
INTEGER isolo(50,50), indk(50,50,15)
REAL vento(100,100,15), geop(100,100,15), relhum(100,100,10), etc.
Nos exemplos acima, isolo uma varivel do tipo inteira disposta numa matriz de
50 x 50 elementos, indk uma varivel do tipo inteira com trs dimenses tendo 50 x 50
elementos na horizontal e 15 na vertical. Vale lembrar que a declarao de tipo
sobrepe-se a declarao explicita para inteiros e reais, ou seja, independente da letra
que inicie o nome da varivel, ela ser tratada no FORTRAN como sendo real ou
inteira, de acordo com a declarao de tipo utilizada. As variveis reais do exemplo
acima, muito comuns em Meteorologia, indicam que todas esto dispostas em grades de
100 x 100 elementos sendo que as variveis vento e geop possuem 15 nveis verticais e
a varivel relhum possui apenas 10. Esta situao muito comum em dados de reanlise
e previses dos modelos globais.
Na seo 6 ser visto como trabalhar com variveis complexas utilizando a
linguagem FORTRAN.

Curso Bsico de Programao em Linguagem FORTRAN.

24

5. Cadeias de Caracteres.

5. Cadeias de Caracteres
5.1. Constantes do tipo Caractere
Um caractere uma letra, digito ou smbolo especial do conjunto de caracteres
da linguagem FORTRAN.
Uma cadeia de caracteres uma seqncia de um ou mais caracteres.
Uma constante caractere uma cadeia de caracteres entre apstrofos.
Ex: nome, CURSO DAGUA, etc.
O comprimento mximo de uma constante caractere depende do tipo de
plataforma utilizada. Como exemplo, para a IBM so permitidos 1316 caracteres. Vale
lembrar que, quando tratamos de caracteres, espaos em branco devem ser
considerados.
5.2. Variveis do tipo Caractere
As variveis do tipo caractere so variveis que armazenam constantes do tipo
caractere.
Uma varivel caractere declarada atravs de especificaes explicitas,
declarao CHARACTER, ou atravs da declarao IMPLICIT.
Ex:
IMPLICIT CHARACTER*28 (X,Y,C)
CHARACTER*36 LINHA
CHARACTER NOME*15, ARQ*12
Nestes exemplos, as variveis X,Y e C tm comprimento 28, LINHA tem
comprimento 36, NOME tem comprimento 15 e ARQ tem comprimento 12. Se nenhum
comprimento declarado, assume-se que cada varivel tem comprimento 1.
5.3. Conjuntos de Caracteres.
Da mesma maneira que nmeros inteiros e reais podem ser parte de conjuntos e
declarados pelas declaraes de tipo REAL ou

INTEIRO e pela declarao

DIMENSION, cadeias de caracteres tambm podem ser representadas por conjuntos tais
como vetores, matrizes, etc.
Na declarao de conjuntos do tipo caractere, a especificao de comprimento,
quando associada a uma varivel da lista, deve vir aps a especificao das dimenses
do conjunto.
Ex:
CHARACTER ARQUIVO(30)*12
Curso Bsico de Programao em Linguagem FORTRAN.

25

5. Cadeias de Caracteres.

No exemplo anterior, a varivel ARQUIVO um conjunto de 30 elementos


tendo cada um deles o comprimento 12.
5.4. Constantes Simblicas do Tipo Caractere.
Para a associao de nomes s constantes do tipo caractere, pode -se usar a
declarao PARAMETER como no caso das constantes numricas.
Ex:
CHARACTER NOME*12
PARAMETER (NOME=12345678.DAT)
Uma outra forma vlida para conseguir o mesmo efeito (somente com a
declarao PARAMETER) :
CHARACTER NOME*(*)
PARAMETER (NOME=12345678.DAT)
Esta forma mais conveniente, principalmente quando no se conhece o
comprimento da constante.
possvel a utilizao de expresses com cadeias de caracteres, ou seja, uma
combinao de operandos atravs de operadores. Expresses do tipo caractere podem
combinar operandos do tipo caractere, atravs do operador de concatenao (//). Devese notar que no se pode misturar, numa nica expresso, dados numricos e caracteres.
Ex:
CHARACTER N*5, B*4,C*7,CURSO*16
PARAMETER (N=CURSO,B= DE ,C=FORTRAN)
CURSO=N//B//C
WRITE(*,*) CURSO
RESULTADO = CURSO DE FORTRAN
No exemplo acima, foi utilizado um comando de atribuio para a varivel
CURSO.
Se o comprimento da varivel maior que o do resultado da expresso, ento o
valor resultante da expresso armazenado na parte mais esquerda da varivel. O
restante do espao preenchido com brancos. Se o comprimento da varivel menor

Curso Bsico de Programao em Linguagem FORTRAN.

26

5. Cadeias de Caracteres.
que o do resultado da expresso, ento somente os caracteres mais esquerda sero
armazenados.
Ex:
CHARACTER NOME*4
NOME=CURSO DE FORTRAN
WRITE(*,*) NOME
RESULTADO = CURS
5.5. Subcadeias de Caracteres.
Uma subcadeia uma seqncia de uma ou mais unidades consecutivas de
armazenamento de caractere, dentro de uma varivel. As unidades dentro da varivel
so numeradas da esquerda para a direita, a partir de 1. O recurso de subcadeia permite
a manipulao de partes de uma determinada cadeia de caracteres. Sua forma geral :
< nome da varivel caractere> (e 1 :e 2)
sendo e 1 e e2 expresses aritmticas inteiras, denominadas expresses de subcadeias. O
ndice 1 especifica a posio do primeiro caractere da subcadeia e o ndice 2 a posio
do ltimo caractere. Se e1 for omitido, considera-se que todos os caracteres at e2 sero
considerados. Se e 2 for omitido, considera-se que todos os caracteres a partir de e1 sero
considerados. Se e1 e e2 forem omitidos, todos os caracteres sero considerados.
Ex:
CHARACTER*5 VAR
VAR=LABEL
VAR(1:2) = LA
VAR(3:4) = BE
VAR(3:) = BEL
VAR(:3) = LAB
VAR(:) = LABEL
5.6. O comando FORMAT para caracteres.
Com os comandos de entrada e sada para caracteres, pode-se utilizar a
Especificao de formato A ou o Formato Livre.
O Formato A tem a forma geral:
aAw
sendo a o fator de repetio e w o nmero de caracteres do campo.
Curso Bsico de Programao em Linguagem FORTRAN.

27

5. Cadeias de Caracteres.

Se w > comprimento da varivel (n), na entrada de dados, somente os caracteres


mais direita so armazenados. Na sada n caracteres so impressos direita no campo
e o restante do espao preenchido com brancos.
Se w < comprimento da varivel (n), na entrada, w caracteres so lidos e
armazenados nas posies mais a esquerda da varivel. O restante do espao
preenchido com brancos. Na sada, os w caracteres mais esquerda da varivel sero
impressos e o resto truncado.
Quando se usar o formato livre com caracteres, deve -se observar que, na entrada,
a lista de variveis pode conter nomes de variveis ou subcadeias. Os dados de entrada
devem vir entre apstrofos
Ex:
CHARACTER NOME*20, CURSO*10
READ(*,*) NOME (11:20), NOME(11:10),CURSO
Dados de entrada:
SILVA MARCOS METEO
Valores armazenados

Nome

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
M A R C O S
S I L V A

Curso

1 2 3 4 5 6 7 8 9 10
M E T E O
Quando o comprimento dos dados diferente do comprimento da varivel, as

regras so as mesmas vlidas para o comando de atribuio. Num mesmo READ,


podem ser lidos valores numricos junto com caracteres. Os tipos de variveis na lista
devem ser correspondentes aos tipos dos dados.
Na sada, a lista de variveis ou de expresses pode conter nomes de variveis,
constantes ou subcadeias.
Todos os operadores relacionais, j vistos, podem ser utilizados com operandos
do tipo caractere. Entretanto, no se podem comparar expresses de caracteres com
expresses numricas.
5.7. Funes int rnsecas para caracteres.
Existem algumas funes intrnsecas especficas para o tratamento de caracteres.
Neste curso sero vistas as funes LEN, INDEX, ICHAR e CHAR.

Curso Bsico de Programao em Linguagem FORTRAN.

28

5. Cadeias de Caracteres.
5.7.1. Funo LEN
Esta funo fornece o comprimento da cadeia de caracteres dada como
argumento. O resultado um nmero inteiro.
Ex:
LEN(CASA) retorna o valor 4.
LEN(DAGUA) retorna o valor 6
CHARACTER C*7
C=CURSO
LEN(C) Embora a cadeia de caracteres atribuda a varivel C tenha cinco
caracteres a funo LEN retornar o valor 7, pois o comprimento da varivel C fixo e
igual a 7.
5.7.2. Funo INDEX.
Esta funo localiza a primeira ocorrncia de uma subcadeia a2 na cadeia a1. O
resultado um valor do tipo inteiro. Se a subcadeia a 2 no for encontrada na cadeia a1, o
valor resultante ser zero. Se houver mais de uma ocorrncia, quela mais a esquerda
ser indicada.
Ex:
INDEX(CURSO,R) retorna o valor 3
INDEX(FORTRAN,R) retorna o valor 3
5.7.3. Funo ICHAR.
Esta funo converte um caractere ASCII em um nmero inteiro. O intervalo
de 0 a 255. O argumento utilizado deve ser composto de apenas um caractere.
Ex:
ICHAR(A) retorna o valor 65
ICHAR(2) retorna o valor 50
Um exemplo de correspondncia entre caracteres ASCII e nmeros inteiros pode
ser visto na tabela a seguir.

Curso Bsico de Programao em Linguagem FORTRAN.

29

5. Cadeias de Caracteres.
Alguns valores inteiros e sua correspondncia na tabela ASCII.
Valor inteiro Car. ASCII Valor inteiro Car. ASCII Valor inteiro Car. ASCII
33
!
48
0
63
?
34

49
1
64
@
35
#
50
2
65
A
36
$
51
3
66
B
37
%
52
4
89
Y
38
&
53
5
90
Z
39

54
6
91
[
40
(
55
7
92
\
41
)
56
8
93
]
42
*
57
9
94
^
43
+
58
:
95
_
44
,
59
;
96
`
45
60
<
97
a
46
.
61
=
98
b
47
/
62
>
122
z
5.7.4. Funo CHAR
Executa o inverso da funo ICHAR, ou seja, converte um nmero inteiro num
caractere ASCII. A tabela mostrada acima foi criada com a utilizao desta funo.
Abaixo, segue o trecho de programa para criar esta tabela.
program int_car
character*1 a
open(10,file='ASCII.dat',status='unknown')
do i=0,255
a=char(i)
write(10,100)i,a
enddo
100 format (i4,1x,a1)
stop
end

Curso Bsico de Programao em Linguagem FORTRAN.

30

6. Estruturas de Controle

6. Estruturas de Controle
As estruturas de controle permitem ao programador a especificao do fluxo de
controle de um programa; em outras palavras, permitem alterar o fluxo de execuo dos
componentes de um programa, atravs de comandos que direcionem a execuo sob
uma determinada condio ou de maneira iterativa.
As estruturas de controle compreendem seqncia, seleo e iterao.
A estrutura de seqncia naturalmente implementada em FORTRAN a medida que
os comandos so organizados seqencialmente em um programa. Os dois outros tipos
de estruturas sero vistos a seguir.
6.1. Estrutura de Seleo.
O comando FORTRAN que implementa a estrutura de seleo o IF-BLOCO,
atravs do uso de operadores relacionais em expresses lgicas.
As expresses lgicas so aquelas expresses que quando avaliadas resultam num
valor lgico: verdadeiro ou falso. So constitudas pela combinao de operandos
lgicos, atravs de operadores lgic os que podem ser: constantes lgicas; variveis
lgicas; funes lgicas; expresses relacionais ou expresses lgicas entre parnteses.
Constantes lgicas especificam um valor lgico: verdadeiro ou falso. Na linguagem
FORTRAN:
.TRUE.
.FALSE.
As expresses relacionais constituem uma forma particular de expresses lgicas e
viabilizam o estabelecimento de relaes entre entidades do programa.
Os operadores relacionais possveis na linguagem FORTRAN so:
.EQ.

.NE.

.GT.

>

.GE.

.LT.

<

.LE.

O valor de uma expresso relacional sempre .TRUE. ou .FALSE.. As expresses


aritmticas comparadas podem ser de tipos diferentes (real ou inteiro).

Curso Bsico de Programao em Linguagem FORTRAN.

31

6. Estruturas de Controle
Operadores lgicos so usados para construir condies lgicas mais complexas que
aquelas descritas simplesmente por uma expresso relacional ou por um nico operando
lgico. Em outras palavras, eles so usados para combinar valores lgicos.
Os operadores lgicos disponveis na linguagem FORTRAN so mostrados abaixo.
Nesta tabela, A e B representam operandos lgicos quaisquer.

Operadores lgicos

significado

Exemplo

.NOT.

negao

.NOT.A

.AND.

E lgico

A.AND.B

.OR.

OU lgico

A.OR.B

.EQV.

Equivalncia lgica

A.EQV.B

.NEQV.

No equivalncia

A.NEQV.B

A tabela abaixo sintetiza o funcionamento dos operadores lgicos. Nesta tabela, A e


B representam operandos lgicos quaisquer e as letras V e F representam,
respectivamente, os valores lgicos verdadeiro e falso.

Tabela verdade dos operadores lgicos.


A

.NOT.A

A.AND.B

A.OR.B

A.EQV.B

A.NEQV.B

Nas figuras a seguir so apresentados alguns exemplos de utilizao de estruturas de


seleo.

Curso Bsico de Programao em Linguagem FORTRAN.

32

6. Estruturas de Controle

Curso Bsico de Programao em Linguagem FORTRAN.

33

6. Estruturas de Controle
6.2. Estrutura de Iterao.
O comando FORTRAN que implementa diretamente uma das formas da estrutura de
iterao o DO.
Existem, basicamente, duas formas gerais para utilizao de estruturas de iterao.
A primeira utiliza o nmero do comando que delimita a abrangncia da iterao do DO.
Ex:

Neste modo, a forma geral para a utilizao do DO, fica :


DO n i = m1 , m2, m3
Comandos
n CONTINUE
onde:
- n o nmero do comando que delimita a abrangncia da iterao;
- i a varivel inteira a qual o DO se refere. Funciona como um ndice.
- m1 o valor inicial de i.
- m2 o valor final de i.
- m3 o incremento dado a i a cada iterao.
No inicio da iterao, i recebe o valor da expresso m1. A ao especificada pelos
comandos executada repetitivamente enquanto:
m1 m2 se m3 > 0
m1 m2 se m3 < 0
A cada iterao, a varivel i atualizada com o valor i + m3.
A execuo do lao para quando:
m1 > m2 se m3 > 0
m1 < m2 se m3 < 0
Quando o incremento m3 omitido, como no exemplo acima, o FORTRAN assume
o valor 1.

Curso Bsico de Programao em Linguagem FORTRAN.

34

6. Estruturas de Controle
O comando que termina o lao do DO pode ser qualquer comando executvel da
linguagem, com exceo aos comandos GOTO, IF, END, RETURN e DO.
Preferencialmente, deve-se utilizar o comando CONTINUE. O CONTINUE um
comando executvel que no realiza qualquer ao. O comando terminal da iterao do
DO dever ser escrito aps o comando DO, na mesma unidade de programa.
A segunda maneira de utilizao do DO sem a utilizao de nmero de comando.
Ex:

O valor da varivel do DO (i) no pode ser alterado por qualquer comando dentro do
lao.
No permitido saltar de um ponto fora do lao do DO para outro dentro dele.
Pode haver aninhamento de laos de DO, mas os laos internos devem estar
contidos no lao mais externo, ou seja, no permitido o cruzamento de laos. Ex:

Curso Bsico de Programao em Linguagem FORTRAN.

35

6. Estruturas de Controle
O uso do DO de grande utilizao na grande maioria dos programas,
principalmente naqueles utilizados na Meteorologia que, geralmente, esto em forma de
grade, conforme ser visto posteriormente. Entretanto, muito comum o fato de no
serem conhecidas as dimenses dos dados com que se trabalha e a utilizao do DO
pode ficar comprometida. Como um exemplo, suponha que se deseja efetuar a leitura de
um arquivo com 10 dados colocados lado a lado (colunas) e que estes dados estejam
disponveis para cada hora, dispostos em linhas diferentes dentro do arquivo, num total
de 100 linhas. Uma maneira para essa leitura seria:

Supondo agora que o nmero de linhas desse arquivo desconhecido, de que


maneira essas 100 linhas poderiam ser lidas? Uma das possibilidades a utilizao de
comandos que realizem saltos incondicionais para o comando cujo nmero n. O
comando GOTO realiza esta tarefa.
Exemplo:

A forma utilizada no exemplo acima conhecida por mtodo fim-de-arquivo.

Curso Bsico de Programao em Linguagem FORTRAN.

36

6. Estruturas de Controle
O comando GOTO pode tambm ser utilizado dentro de laos existentes no
programa, seguindo alguma condio imposta. Como um exemplo, suponha que
desejamos saber quantos nmeros so necessrios para obter o maior valor inferior a
100, atravs da soma dos mesmos. O programa abaixo uma soluo para esta tarefa.

No exemplo acima, o nmero de valores 13 e soma dos mesmos 91. Caso no


fosse imposta nenhuma condio, o lao s terminaria aps a soma de todos os nmeros
de 1 at 100.
6.3. Entrada e sada de conjuntos DO Implcito.
Uma das facilidades existentes na linguagem FORTRAN a possibilidade da leitura
e escrita de arquivos, geralmente na forma matricial, utilizando-se do DO Implcito. O
DO Implcito deve estar sempre associado a um comando de entrada ou sada de dados e
no pode ser utilizado durante clculos. Por exemplo, suponha que seja necessria a
leitura de uma matriz que possui dados de vento dispostos numa grade regular. Uma
maneira simplificada para efetuar esta tarefa apresentada na figura a seguir.
Nesta figura, fica clara a facilidade oferecida pela utilizao do DO Implcito.
Embora os exemplos apresentem apenas leituras, a escrita de matrizes tambm pode ser
feita da mesma maneira.

Curso Bsico de Programao em Linguagem FORTRAN.

37

6. Estruturas de Controle

6.4. Exerccios Prticos.


1)
Faa um programa que determine valores pares e impares entre 1 e 100,
atravs da utilizao de operaes lgicas. Escreva os resultados em dois
arquivos distintos, sendo os dados escritos em uma nica coluna. Ex (par.dat
e impar.dat)
2)

Faa um programa que leia os arquivos criados no exerccio 1. No mesmo


programa, calcule o valor mdio e o desvio padro para os dois arquivos. Em
seguida, determine a varincia para cada valor e escreva os resultados em
arquivos separados de maneira tal que os resultados possam ser plotados
num editor grfico (Origin ou Excel).

3)

Utilizando-se do recurso de DO Implcito, faa um programa que execute a


mesma tarefa do exerccio 1 sem a realizao de qualquer clculo.

Curso Bsico de Programao em Linguagem FORTRAN.

38

7. Subprogramas

7. Subprogramas.
Em muitas ocasies, a construo de um programa simples acaba tornando o mesmo
muito extenso e, s vezes, muito caro computacionalmente. A construo de um
programa mais complexo, embora exija um maior tempo e muito mais raciocnio, de
grande utilidade na programao estruturada. Muitas vezes necessria a criao de
mdulos independentes no programa para a realizao de determinadas tarefas. A
modularizao de um programa realizada atravs da utilizao de subprogramas.
Um subprograma uma unidade de programa independente, relativamente simples,
que realiza funes especficas e que possui um identificador. Uma unidade de
programa uma seqncia de comandos terminada pelo comando END.
Existem dois tipos bsicos de subprogramas utilizados na linguagem FORTRAN: as
funes e as sub-rotinas.
Em qualquer um dos casos, o uso de subprogramas afeta o fluxo de controle de um
programa. Com a chamada ao subprograma, o controle passa aos comandos do
subprograma. Aps a execuo dos comandos deste subprograma, o controle retorna ao
ponto de chamada. Um mesmo subprograma pode ser chamado vrias vezes, reduzindo
o nmero de comandos existentes no programa principal. Esse um dos grandes
atrativos da utilizao de subprogramas.
7.1. Funes.
Existem trs classes de funes na linguagem FORTRAN:
- Funes Intrnsecas (vistas na seo 2.6);
- Funes de Comando;
- Subprogramas FUNCTION.
As funes realizam um processamento especfico com base em parmetros
estabelecidos, retornando s unidades de programa que as utilizam um nico valor que
o resultado deste processamento. Analogamente ao que ocorre com as funes
matemticas, este resultado depende dos valores atribudos aos parmetros.
7.1.1. Funes de Comando.
A funo de Comando um tipo de funo que definida pelo prprio
programador. definida num nico comando, atravs de uma declarao. S pode ser
utilizada na unidade de programa que a define. Internamente a uma unidade de
programa, uma funo de comando deve aparecer aps os comandos de especificao e
Curso Bsico de Programao em Linguagem FORTRAN.

39

7. Subprogramas
antes do primeiro comando executvel na unidade de programa. A referncia a este tipo
de funo feita da mesma forma que para as funes intrnsecas. Sua forma geral :
<nome da funo> (parmetros ou variveis simples envolvidas)=<expresso>
Exemplo:

7.1.2. Subprograma FUNCTION.


Assim como para a funo de comando, esta espcie de funo tambm definida
pelo usurio e pode compreender mais de um comando da linguagem FORTRAN.
Um subprograma funo FUNCTION usado do mesmo modo que uma funo
intrnseca.
O subprograma FUNCTION sempre comea com o comando no-executvel
FUNCTION, seguido por uma seqncia de comandos que realiza um procedimento de
computao e termina com um comando END. O controle de execuo retornado para
a unidade de programa que o chama quando encontrado um comando RETURN ou um
comando END.
Existem algumas regras que devem ser seguidas quando da utilizao de um
subprograma FUNCTION. Os argumentos mudos do subprograma devem concordar em
ordem de apresentao, quantidade e tipo com os argumentos atuais usados na unidade
de programa que o chama. Se um dos argumentos mudos um conjunto, o nmero de
seus elementos deve, geralmente, ser igual ao nmero de elementos do correspondente

Curso Bsico de Programao em Linguagem FORTRAN.

40

7. Subprogramas
conjunto no programa que o chama. O nico valor retornado ao programa que o chama
est armazenado no nome da funo.
Um subprograma FUNCTION , normalmente, colocado aps o programa principal,
porm ele pode ser colocado antes dele. Em qualquer caso, ele compilado como um
programa separado. Havendo mais de um subprograma FUNCTION, a ordem entre eles
pode ser qualquer.
O comando FUNCTION deve aparecer como o primeiro comando num subprograma
FUNCTION. Este comando especifica o nome simblico do subprograma, que usado
como o ponto principal de entrada no subprograma. Especifica tambm a lista de
argumentos mudos.
Sua forma geral :
[tipo] FUNCTION nome ([a[,a]...])
sendo:
- tipo: pode ser INTEGER, REAL, CHARACTER, que esto sendo tratadas nesse
curso, alm de DOUBLE PRECISION, COMPLEX, BOOLEAN e LOGICAL;
- nome: o nome do subprograma FUNCTION, seguindo as mesmas regras de
nome de variveis;
- a: um argumento mudo, que pode ser um nome de varivel, nome de conjunto,
ou nome de procedimento mudo.
Se uma FUNCTION uma funo do tipo CHARACTER, ento o seu comprimento
em nmero de caracteres deve ser o mesmo, tanto no subprograma como no programa
que o utiliza. Esta concordncia de comprimento sempre existe quando utilizado o
comprimento (*) no subprograma para especificar o comprimento da funo.
Argumentos mudos que representam nomes de conjuntos devem ser dimensionados
por um comando DIMENSION ou por um comando de declarao de tipo.
Exemplo:

Curso Bsico de Programao em Linguagem FORTRAN.

41

7. Subprogramas

No exemplo apresentado na figura anterior, a FUNCTION FAT(N) calcula o fatorial de


um nmero N qualquer, neste exemplo de 1 at 10.
7.2. Sub-rotinas
As sub-rotinas constituem o outro tipo fundamental de subprograma permitido na
linguagem FORTRAN. Existem algumas diferenas bsicas entre funes e sub-rotinas.
A primeira delas que a sub-rotina no retorna necessariamente apenas um valor, como
no caso das funes. Nenhum valor associado ao nome da sub-rotina. A sub-rotina
pode retornar nenhum, um ou vrios valores atravs de seus argumentos. A segunda
diferena que a sub-rotina chamada atravs de um comando especfico, o comando
CALL.
A forma geral de uma sob-rotina :
SUBROUTINE <nome> (a 1, a2 ,...., a n)
Declaraes
Comandos Executveis
RETURN
END

Curso Bsico de Programao em Linguagem FORTRAN.

42

7. Subprogramas
Sendo <nome> o nome do subprograma, ai os parmetros (formais), que podem ser
nomes de variveis simples ou de conjuntos. A lista de parmetros pode ser inteiramente
omitida, ou seja, a sub-rotina pode ter nenhum parmetro.
7.2.1. O Comando CALL.
O comando CALL permite referenciar uma sub-rotina a partir de uma outra unidade
de programa. Alm da chamada sub-rotinas, o comando CALL pode ser utilizado para
a chamada de outros programas disponveis no computador, externos ao FORTRAN, e
utilizar os resultados dos mesmos. Esta chamada feita atravs dos comandos CALL
SYSTEM (em ambiente Unix ou Linux) e CALL SYSTEMQQ (em ambiente
windows/DOS) Como um exemplo, possvel utilizar-se de recursos do sistema
operacional, tais como o comando copy (cp), ren (mv), dir (ls), entre outros. Um outro
exemplo, bastante comum, a utilizao de resultados gerados pelo FORTRAN para a
visualizao do software GrADS. Com a utilizao do comando CALL possvel
executar tal visualizao fazendo a chamada do GrADS dentro do programa que esta
gerando o resultado. Posteriormente, sero mostrados vrios exemplos deste tipo de
utilizao bem como algumas caractersticas necessrias na formatao dos dados a
serem utilizados no GrADS.
A forma geral do comando CALL a seguinte:
CALL <nome> (arg1 , arg2 ,..., argn)
sendo <nome> o nome da sub-rotina ou comando de chamada funo externa
(SYSTEM no UNIX e SYSTEMQQ no windows), argi os argumentos da sub-rotina ou
comando externo.
O comando CALL transfere o controle para o subprograma referenciado e substitui
os parmetros pelos argumentos correspondentes. No final da execuo do
subprograma, atravs da utilizao do comando RETURN, o controle devolvido para o
comando imediatamente abaixo ao comando CALL.
Na figuras a seguir, apresentado um exemplo de utilizao do comando CALL para
chamadas de sub-rotinas

Curso Bsico de Programao em Linguagem FORTRAN.

43

7. Subprogramas

No exemplo acima, podemos observar que o nome da varivel TEMP modificado


dentro da sub-rotina ORDEM, ou seja, o nome da varivel dentro da sub-rotina pode ser
qualquer. Entretanto, as dimenses utilizadas, quando necessrio, e a ordem das
variveis e parmetros, devem ser mantidas. Posteriormente, sero apresentados vrios
exemplos de utilizao de sub-rotinas e essas condies ficaro mais claras.

Curso Bsico de Programao em Linguagem FORTRAN.

44

7. Subprogramas
Agora, vamos supor que seja necessria a abertura de vrios arquivos, de formatos
semelhantes, para a realizao de alguma operao. Supondo que, a priori, no se
conhece o nmero de arquivos que sero abertos, como possvel a realizao desta
tarefa? A utilizao dos comandos CALL SYSTEM ou CALL SYSTEMQQ uma das
respostas para o problema.
A figura a seguir um exemplo de soluo para este problema. Deseja -se saber
quais os arquivos disponveis para a operao. Isto pode ser feito atravs do comando
DIR (no ambiente DOS/Windows) ou do comando ls (em ambiente Unix ou Linux).

O resultado do trecho de programa apresentado acima, pode ser visto na figura a


seguir. Note que existem vrias informaes desnecessrias no arquivo TEMP.DAT. A
continuao do programa acima realiza uma limpeza neste arquivo e extrai as
informaes necessrias. Note tambm que o nmero mximo de caracteres em cada
linha 56.

Curso Bsico de Programao em Linguagem FORTRAN.

45

7. Subprogramas

Continuao do programa:

Curso Bsico de Programao em Linguagem FORTRAN.

46

7. Subprogramas
No exemplo acima foram lidas as cinco primeiras linhas como sendo linhas em
branco pois a informao nelas contidas desnecessria. Em seguida, realizou-se a
leitura das outras linhas do arquivo (mximo de 30) cujo identificador da utilidade da
linha o primeiro caractere que deve ser igual a 1. Se isso acontecer, o programa utiliza
os caracteres de 45 a 56 da varivel de entrada AUX, para formar o nome dos arquivos
de interesse e posteriormente escreve -los no arquivo LISTA1.DAT. Caso contrrio, o
programa utiliza o recurso GOTO para sair do lao do DO (indicao de comando 558,
CONTINUE). Em seguida, so fechados os dois arquivos. Como o arquivo TEMP.DAT
no mais necessrio, foi utilizado um comando externo (APG) para apagar este
arquivo aps a extrao das informaes necessrias. Finalmente, foi utilizado o
comando externo MORE para a visualizao do resultado.
7.3. O comando COMMON
Quando se trabalha com vrias unidades de programa, como o caso para as subrotinas, feita uma declarao de variveis em cada uma delas. Este procedimento pode
ocupar uma grande quantidade de memria e, algumas vezes, dependendo da
capacidade do computador em que o programa est sendo rodado, pode haver um
estouro de memria. Para contornar esse problema utilizado o comando COMMON. O
comando COMMON utilizado como uma declarao para fazer o compartilhamento
de memria entre duas ou mais unidades de programa, e para especificar os nomes das
variveis que devem ocupar esta rea comum. Consegue -se assim um meio alternativo
de comunicao entre unidades de programa (atravs da utilizao de variveis globais).
Deve ser lembrado que a nica forma de comunicao entre unidades de programa
utilizada at aqui, foi feita pela cor respondncia argumento-parmetro. Esta forma a
mais adequada e deve ser utilizada preferencialmente.
A rea de COMMON pode ser entendida como uma seqncia de posies na
memria principal. A declarao COMMON permite indicar variveis especficas a
serem mantidas nesta rea de armazenamento comum e especificar a ordem em que so
armazenadas.
Na figura a seguir apresentado um exemplo de utilizao da declarao
COMMON.

Curso Bsico de Programao em Linguagem FORTRAN.

47

7. Subprogramas

No exemplo acima, as variveis pe, mn, z e idum(20) ocupam a mesma posio na


mem ria que as variveis i, j, x, k(20), respectivamente. Vale notar que as variveis
k(20) e idum(20) foram dimensionados com a declarao COMMON. Quando isto
acontece, a declarao DIMENSION no deve ser utilizada. No COMMON no devem
aparecer dimenses ajus tveis. Outra observao que o compartilhamento de memria
para essas duas variveis feito para cada par de elementos: idum(1) com k(1), idum(2)
com k(2), ..., idum(20) com k(20).
Com a utilizao da declarao COMMON no exemplo acima, foi possvel fa zer a
metade da alocao de memria que seria feita sem essa declarao.
Se a declarao COMMON aparecer numa unidade de programa, ela deve aparecer
em pelo menos um outra.
Numa unidade de programa podem aparecer vrios comandos COMMON. Neste
caso, eles t m efeito cumulativo. Veja o exemplo abaixo.

Curso Bsico de Programao em Linguagem FORTRAN.

48

7. Subprogramas
As variveis em COMMON, de diferentes unidades de programa, devem
corresponder em tipo e comprimento. usual que elas tenham o mesmo nome, mas no
obrigatrio. Um bloco comum que contenha variveis ou conjuntos do tipo caractere
s pode conter variveis ou conjuntos deste tipo.
7.4. Tpico adicional - O comando DATA.
O comando DATA permite definir valores iniciais de variveis.
Exemplo:

No exemplo acima, foi utilizado o comando DATA para definir os elementos da


varivel CHECK que possui 11 elementos e do tipo caractere. Este programa faz a
substituio de ponto por virgula na varivel, tambm do tipo caractere, NOME. Este
procedimento bastante til quando utilizamos os dados de um programa que exijam a
virgula em lugar de ponto em nmeros reais.
O comando DATA um comando no executvel e deve vir aps todos os
comandos de declarao e, preferencialmente, antes do primeiro comando executvel.
As constantes devem concordar em tipo com as variveis corresponde ntes da lista. Deve
Curso Bsico de Programao em Linguagem FORTRAN.

49

7. Subprogramas
haver uma correspondncia um a um entre o nmero total de variveis na lista e o
nmero total de constantes em um comando DATA.

7.5. Exerccios prticos

Curso Bsico de Programao em Linguagem FORTRAN.

50

8. Formato de dados utilizados no GrADS.

8. Formato de dados utilizados no GrADS.


O GrADS (the Grid Analysis and Display System) uma ferramenta interativa
utilizado na anlise e exibio de dados em vrios campos da cincia, especialmente em
meteorologia. Pode ser utilizado em vrios tipos de plataforma em diferentes ambientes
(Unix, Linux, Windows e DOS, entre outros.) alm de ser gratuitamente distribudo na
internet (http://grads.iges.org/grads/). O GrADS trabalha com dados de modelos em 4
dimenses, geralmente latitude, longitude, nveis verticais e tempo. Cada conjunto de
dados est localizado dentro de um espao 4-D atravs do uso de um arquivo descritor
de dados. Dados de estaes tambm podem ser descritos. A representao de dados
internos em um arquivo pode ser feita atravs dos formatos binrio e Grib. Apesar da
existncia de um grande conjunto de funes embutidas no GrADS, algumas vezes fazse necessria a utilizao de programas FORTRAN para criao e tratamento dos dados.
Neste caso, o GrADS seria utilizado apenas para visualizao.
A incluso deste tpico no curso, tem como objetivo principal habilitar os usurios
da linguagem FORTRAN na criao e leitura de arquivos em conjunto com o GrADS.
Em algumas disciplinas oferecidas no DCA esse conhecimento de grande importncia
e, certamente, trar muitas facilidades na realizao de problemas onde necessrio o
posicionamento geogrfico de informaes tais como grades regulares e dados de
estaes.
8.1. O arquivo descritor de dados no GrADS.
Para a utilizao do GrADS, necessria, primeiramente, a construo de um
arquivo descritor. Este arquivo descritor (CTL) informa ao GrADS de que forma os
dados esto dispostos no arquivo binrio/GRIB.
Os dados em pontos de grade podem conter qualquer nmero de variveis em
longitude, latitude, nveis verticais e tempo especficos. Latitudes podem variar de norte
para sul ou de sul para norte e os nveis verticais podem variar de cima para baixo ou de
baixo para cima.
O arquivo descritor de dados tem formato livre e pode ser criado em qualquer editor
de textos e, como um dos nossos objetivos, pelo prprio FORTRAN. Podem ser
utilizados comentrios atravs da utilizao do caractere (*) na primeira coluna.
Entretanto, eles no podem aparecer na lista de registros de variveis (vars endvars).
Os registros no podem ser mais longos que 255 caracteres.

Curso Bsico de Programao em Linguagem FORTRAN.

51

8. Formato de dados utilizados no GrADS.


Existe uma ordem que deve ser obedecida na criao ou leitura de um arquivo
binrio. Esta ordem tambm informada pelo arquivo descritor.
A figura abaixo apresenta um exemplo de arquivo descritor.

No exemplo acima apresentado o arquivo curso1.ctl. Descrio:


- dset : indica o nome do arquivo binrio que ser aberto pelo GrADS, neste caso o
arquivo curso1.gra. A utilizao do caractere ^, informa ao GrADS que o
arquivo binrio est no diretrio corrente. Caso contrrio, este caractere deve ser
substitudo pelo caminho do arquivo;
- undef: indica qual o valor utilizado para localizaes onde no existem dados, ou
seja, dados indefinidos;
- options: informa ao GrADS o tipo de plataforma em que o arquivo binrio foi
criado e qual a disposio dos bytes (invertido ou no). Neste caso, a informao
Big_endian, refere-se um arquivo criado numa plataforma de 32 bits (IBM,
SUN, SILICON, etc). Esta informao importante quando utilizada uma
plataforma diferente daquela em que o arquivo foi criado, por exemplo, se o
arquivo acima fosse utilizado no Linux (32 bits little_endian; bytes invertidos).
- title: nome do experimento, simulao, previso, etc., a que se refere o arquivo;
- xdef: informa ao GrADS como os dados esto dispostos em longitude (nmero de
pontos, se a distribuio linear ou no, longitude do ponto SW, espaamento
entre os pontos de grade).
- ydef: informa ao GrADS como os dados esto dispostos em latitude (nmero de
pontos, se a distribuio linear ou no, latitude do ponto SW, espaa mento entre
os pontos de grade);
- zdef: informa ao GrADS como os dados esto dispostos nos nveis verticais
(nmero de nveis, tipo de nveis presso ou altura, especificao de cada nvel);
Curso Bsico de Programao em Linguagem FORTRAN.

52

8. Formato de dados utilizados no GrADS.


- tdef: informa ao GrADS o nmero de tempos existentes no arquivo, se o
espaamento entre tempos linear ou no, data/hora do primeiro tempo do
arquivo, passo no tempo.
- vars: indica o nmero de variveis existentes no arquivo. Tambm funciona como
um delimitador para declarao das variveis existentes. Deste ponto at a
indicao endvars, no possvel fazer nenhum comentrio, como dito
anteriormente.
- endvars: indica o final da declarao de variveis
Cada varivel, possui a indicao do nome, nmero de nveis, unidades, etc. No
exemplo acima, as variveis u, v, tempk e relhum esto dispostas em 6 nveis verticais,
enquanto que a varivel topo, representada pelo valor 0, refere-se a um dado de
superfcie. Algumas vezes, comum o aparecimento de variveis com diferentes
nmeros de nveis, por exemplo, a umidade relativa nos dados de reanlise do NCEP
possuem menor nmero de nveis que vento, temperatura, etc.
O segundo valor aps cada nome de varivel (99) utilizado para dados GRIB
especiais e no sero discutidos neste curso (utilize sempre 99 para arquivos binrios).
8.2. Seqncia dos dados.
Como citado anteriormente, necessrio o conhecimento da seqncia de
distribuio dos dados no GrADS. Principalmente quando um programa FORTRAN
utilizado para a construo ou leitura do arquivo. A disposio dos dados descritos pe lo
arquivo curso1.ctl a seguinte:
-Tempo;
-varivel;
-nveis.
-coordenadas
Esta seqncia utilizada em qualquer arquivo lido pelo GrADS. A figura a seguir
ilustra esta seqncia para a grade do arquivo curso1.gra.

Curso Bsico de Programao em Linguagem FORTRAN.

53

8. Formato de dados utilizados no GrADS.

Neste exemplo, cada varivel representada por uma grade de 45 x 43 pontos. Cada
grade colocada uma aps a outra, obedecendo o esquema a seguir:

Curso Bsico de Programao em Linguagem FORTRAN.

54

8. Formato de dados utilizados no GrADS.

No formato binrio (arquivos de acesso direto) do GrADS, cada varivel definida


utilizando-se records. O tamanho do record deve ser especificado quando da
utilizao de um programa FORTRAN atravs da especificao RECL(tamanho do
record) nos comandos OPEN. Geralmente, cada record ocupa 4 bytes (32 bits).
necessrio portanto, saber como cada plataforma trabalha com o nmero de bytes de
cada record. Por exemplo, nas plataformas SILICON, cada record, por default,
possui 4 bytes. Na IBM, por default, cada record possui 1 byte. O exemplo abaixo d
uma amostra da abertura do arquivo curso1.gra nos dois tipos de plataforma.

Curso Bsico de Programao em Linguagem FORTRAN.

55

8. Formato de dados utilizados no GrADS.

No primeiro exemplo, o tamanho de cada record RECL definido pelo produto


ix (nmero de elementos em longitudes) iy (nmero de elementos em latitude) 4, ou
seja, o nmero total de elementos vezes 4 (por default cada informao assumida
ocupando 1 byte) . No segundo exemplo o fator 4 omitido pois este tipo de plataforma
assume que cada informao (pontos de grade neste caso) ocupa 4 bytes.
Existe uma seqncia para as longitudes e latitudes tambm. Para cada ponto de
latitude, comeando por aquele mais ao sul, feito um lao em todas as longitudes,
comeando por aquela mais a oeste.
Quando da leitura de um arquivo binrio necessrio que todo o arquivo seja lido,
ou, pelo menos, que seja lido at o record de interesse, mesmo quando se deseja
trabalhar com apenas uma varivel. Pode-se fazer a leitura por saltos, desde que sejam
contados os records intermedirios entre cada varivel, entretanto, este procedimento
perigoso e deve ser evitado, principalmente quando no se tem muita prtica no
tratamento desse tipo de dado.
Um ponto de grande importncia e que se deve tomar muito cuidado que, no
exemplo acima, foram lidos para cada tempo, nvel e varivel, todos os pontos de grade
de uma s vez (ix*iy*4). O tamanho do record corresponde ao produto entre o
nmero de pontos em longitudes o nmero de pontos em latitudes e o nmero de bytes
ocupados por cada ponto de grade (na verdade, a informao atribuda a cada ponto).
Poderia ter sido feita a leitura ponto a ponto. Neste caso, o tamanho de cada record
seria de 4 bytes e no seria possvel a utilizao do DO IMPLICITO para a leitura ou
escrita desses dados, devendo existir um DO individual para cada direo. Este aspecto
ficar mais claro com o exemplo a seguir.

Curso Bsico de Programao em Linguagem FORTRAN.

56

8. Formato de dados utilizados no GrADS.

A figura a seguir apresenta a leitura da mesma varivel sendo feito ponto a ponto.

Curso Bsico de Programao em Linguagem FORTRAN.

57

8. Formato de dados utilizados no GrADS.


A figura a seguir apresenta a continuao do programa, sendo a leitura feita atravs
da utilizao do DO IMPLICITO, por ser este o mtodo mais simples. Neste programa,
deseja-se extrair a varivel U para um outro arquivo (curso1.BIN). Note que o nmero
de pontos nas direes X e Y foi diminudo tambm. Deve-se tomar cuidado durante a
criao de arquivos binrios. Diferente dos arquivos ASCII, quando um arquivo binrio
re-escrito, se o novo arquivo for me nor que o arquivo anterior (menor nmero de
records), as informaes contidas nos records seguintes permanecero no novo
arquivo. Sendo assim, por garantia, melhor apagar o arquivo de sada sempre que o
programa for rodado. No exemplo anterior (1 figura) esta tarefa feita
automaticamente pelo prprio programa, atravs da chamada do comando externo DEL
(atravs do comando CALL, visto anteriormente).

8.3. Exerccios Prticos.


1)
Escreva o programa do exemplo dado para a leitura do arquivo curso1.gra.
2)

Crie um arquivo CTL para ler o arquivo binrio curso1.BIN criado pelo
programa do exerccio anterior.

Curso Bsico de Programao em Linguagem FORTRAN.

58

8. Formato de dados utilizados no GrADS.


3)

Refaa o programa do exerccio 1 utilizando uma sub-rotina para leitura e


uma para escrita das variveis U e V, invertendo a ordem de escrita das
latitudes. Crie um arquivo CTL para ver os resultados no GrADS. Veja o que
acontece com a disposio dos dados. Acrescente ao CTL, na linha de
comando options, o comando YREV. Verifique os resultados.

4)

Acrescente ao programa uma sub-rotina que calcule a vorticidade em todos


os nveis disponveis. Faa com que o resultado seja colocado num arquivo
que contenha tambm as variveis U e V. O nome do arquivo deve ser criado
pelo prprio programa utilizando cadeias de caracteres da linguagem
FORTRAN.

5)

Faa o mesmo para calcular a divergncia.

6)

Calcule o valor mdio das variveis U e V entre os nveis de 1000 e 500 hPa.
Calcule tambm a vorticidade e a divergncia para o valor mdio. Coloque os
resultados num nico arquivo.

7)

Utilize o recurso de comandos externos (CALL <comando externo>) para


abrir os resultados no GrADS. Lembre-se de criar, atravs do mesmo
programa, um arquivo CTL.

Curso Bsico de Programao em Linguagem FORTRAN.

59

9. Referncias Bibliogrficas.

9. Referncias Bibliogrficas
Cereda, R. L. D. e Maldonado, J. C., 1987: Introduo ao FORTRAN 77 para
microcomputadores. McGraw-Hill, 211 pp.
Doty, B., 1995: The Grid Analysis and Display System GrADS. Users Guide.
http://www.iges.org/grads.
Hehl, M. E., 1986: Linguagem de programao estruturada FORTRAN 77. McGrawHill, --- pp.
Setzer, V. W., Simon, I., Kowaltowski, T., 1972: Curso de FORTRAN IV bsico.
Editora Edgard Blcher, 102 pp.

Curso Bsico de Programao em Linguagem FORTRAN.

60

Você também pode gostar