Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso Fortran 2004
Curso Fortran 2004
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.
3.2.2.
3.2.3.
7.1.2.
7.2. Sub-rotinas............................................................................................................42
7.2.1.
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 2: Some 1 a N.
Passo 2: Some 1 a N.
. (ponto)
, (vrgula)
(apstrofo)
(aspas)
&
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.
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
n = parte inteira
.m
M = parte decimal
n.mE S
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....
so
formadas
utilizando
operandos
numricos
+ (adio)
- (subtrao)
* (multiplicao)
/ (diviso)
** (exponenciao)
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
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
10
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.
11
12
13
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
14
15
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
16
17
18
19
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
21
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.
22
23
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
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.
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.
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
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.
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
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.
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
.NOT.A
A.AND.B
A.OR.B
A.EQV.B
A.NEQV.B
32
6. Estruturas de Controle
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:
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:
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:
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.
37
6. Estruturas de Controle
3)
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:
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:
41
7. Subprogramas
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
43
7. Subprogramas
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).
45
7. Subprogramas
Continuao do programa:
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.
47
7. Subprogramas
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:
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.
50
51
52
53
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:
54
55
56
A figura a seguir apresenta a leitura da mesma varivel sendo feito ponto a ponto.
57
Crie um arquivo CTL para ler o arquivo binrio curso1.BIN criado pelo
programa do exerccio anterior.
58
4)
5)
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)
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.
60