7.1. Introdução
[C] Neste capítulo, aprenderemos a reservar áreas de memória, com os seguintes objetivos:
7.2. Comando DIMENSION
[D] O comando DIMENSION é usado para especificar nomes simbólicos
como nomes de variáveis indexadas, define o número de dimensões
(índices) de cada conjunto de vi´s e especifica os limites
de cada dimensão.
[CF] A forma geral do comando DIMENSION é:
DIMENSION c(d[,d]...)[,c(d[,d]...)]
sendo que:
- "c" é um nome de conjunto;
- "d" é um declarador de dimensão (que podem ser no máximo
7) e especifica os limites para cada índice do conjunto, em uma
das formas: superior ou inferior:superior
- superior: o índice varia de 1 até superior.
- inferior:superior: o índice varia de inferior
até superior.
[E] Exemplos:
dimension a(0:10),b(3,3),c(3,4,5)
7.3. Comando COMMON
[D] O comando COMMON é usado para especificar áreas de
memória que são utilizadas em comum por várias unidades
de programa, tal como o programa principal e subprogramas do tipo FUNCTION
ou SUBROUTINE.
[C] Áreas de memória designadas por uma unidade de programa
não são "enxergadas" pelas outras unidades. Assim, o que
COMMON faz é permitir que diferentes unidades de programa "enxerguem"
uma dada área de memória.
[CF] A forma geral do comando COMMON é:
COMMON[/r/] lista
sendo que:
- "r" é um rótulo do bloco de variáveis que terão
suas áreas de memória especificadas.
- "lista" é uma lista com nomes de variáveis que terão
suas áreas de memória especificadas.
[E] Exemplos:
1) common m,a,x
2) dimension a(10),b(5,20)
common/bloco1/a,b
[C] O mesmo comando COMMON, escrito do mesmo jeito, deve aparecer em cada unidade de programa que pretende ter acesso às variáveis definidas num dado bloco.
7.4. Unidades de programas do tipo MODULE
[C] As unidades de programa do tipo MODULE existem a partir do Fortran 90 e podem substituir todas as ocorrências do comando COMMON, do comando INCLUDE (não apresentado nesta apostila) e funções de comando (Capítulo 11).
[C] Numa unidade de programa do tipo MODULE podem se definir tipos e valores de constantes e variáveis. Ainda é possível incluir subprogramas, mas este tópico não será abordado.
7.5. Comando USE
[CF] O comando USE é utilizado para definir uma unidade de programa do tipo MODULE que deve ser incluída no programa.
[E] Exemplo de utilização das unidades de programa do tipo MODULE e do comando USE:
module modulo01
integer:: a=2,b=3
end module modulo01
module modulo02
integer:: a=4,b=5
end module modulo02
program exmodls
! Objetivo: exemplifica o uso dos subprogramas do tipo MODULE
use modulo01
implicit none
integer c,d
! Nas duas linhas a seguir, serão usados os valores de a e b
declarados
! no módulo modulo01:
c=a+b
d=a*b
print *,a,b,c,d
! Na subrotina abaixo, ainda serão usados os valores de a e
b declarados
! no módulo modulo01, demonstrando a compartilhação
de dados entre o
! programa principal e um subprograma:
call subrotina01
! A subrotina abaixo é idêntica à anterior, com
a única diferença que
! utiliza novos valores para a e b declarados no módulo modulo02:
call subrotina02
stop
end
subroutine subrotina01
use modulo01
implicit none
integer c,d
c=a+b
d=a*b
print *,a,b,c,d
return
end
subroutine subrotina02
use modulo02
implicit none
integer c,d
c=a+b
d=a*b
print *,a,b,c,d
return
end
7.6. Comando PARAMETER
[D] O comando PARAMETER fornece um meio de se representar uma constante
por um símbolo, como na Matemática, em vez de representá-la
por um valor.
[CF] A forma geral do comando PARAMETER é:
PARAMETER(ns=e[,ns=e]...)
sendo que:
- "ns" é um nome simbólico.
- "e" é uma constante ou uma expressão constante.
[C] PARAMETER é um comando de especificação e deve
ser escrito entre os comandos de especificação. Porém
cada constante simbólica deve ser definida antes de qualquer referência
a ela.
[C] Os novos símbolos das constantes definidas dentro de um comando
PARAMETER seguem as mesmas regras para os nomes de variáveis (em
relação ao tipo).
[C] O valor de uma constante definida em PARAMETER jamais é ou
pode ser alterado durante a execução do programa.
[E] Exemplo:
?
real pi
parameter(pi=3.1415927)
?
7.7. Comando PROGRAM
[D] O comando PROGRAM é usado para identificar o programa principal.
[C] Todo programa possui um único programa principal.
[CF] A forma geral de PROGRAM é:
program nome
sendo que:
- "nome" é um nome simbólico definido para o programa
principal.
7.8. Comandos ALLOCATE, DEALLOCATE E ALLOCATABLE
[CF] Os comandos ALLOCATE, DEALLOCATE E ALLOCATABLE têm por função
permitir que uma variável indexada possa ser dimensionada durante
a execução do programa.
[CF] ALLOCATABLE: indica que a variável indexada vai ter os valores mínimos
e máximos para o seu(s) índice(s) determinados em algum ponto
do programa. A área de memória para esta variável
ainda não está reservada.
[CF] ALLOCATE: dimensiona a variável indexada e reserva (aloca)
um espaço de memória para ela.
[CF] DEALLOCATE: desaloca, mas não extingue, a variável
indexada, liberando a memória antes por ela ocupada.
[E] No exemplo a seguir temos vários trechos de um programa sendo
que as variáveis indexadas A, B, C e D estão sendo
dimensionadas, alocadas e desalocadas usando os comandos ALLOCATE,
DEALLOCATE E ALLOCATABLE:
...
integer i,j,k,l,m,n
integer,dimension(:,:),allocatable :: a
real,dimension(:),allocatable :: b,c
real,dimension(:,:,:),allocatable :: d
...
print *,'Digite os minimos e maximos das 2 dimensoes
de A:'
read *,i,j,k,l
allocate(a(i:j,k:l))
...
print *,'Digite o minimo e o maximo da unica dimensao
de B:'
read *,i,j
print *,'Digite o minimo e o maximo da unica dimensao
de C:'
read *,k,l
allocate(b(i:j),c(k:l))
...
print *,'Digite os minimos e maximos das 3 dimensoes
de D:'
read *,i,j,k,l,m,n
allocate(d(i:j,k:l,m:n))
...
deallocate(a,d)
...
deallocate(b)
...
deallocate(c)
...