Você está na página 1de 38

NOÇÕES BÁSICAS DE

PROGRAMAÇÃO NA

LINGUAGEM FORTRAN

Prof. Edson Antonio da Silva


Departamento de Engenharia Química
Curso: Engenharia Química – junho de 1998.
I - INTRODUÇÃO
A linguagem FORTRAN, a primeira linguagem de programação de alto nível (surgiu em
1956), foi proposta e implementada para auxiliar os programadores na codificação de problemas
técnicos e científicos cuja solução requer a utilização de computadores eletrônicos. O FORTRAN é
uma das linguagens mais popular e difundida no meio técnico e científico, muitas bibliotecas
computacionais na área de matemática estão disponíveis nesta linguagem, destacando-se
principalmente a IMSL.

NOTAÇÃO:
[] Os Colchetes indicam de tratar-se de um item opcional.

{} As chaves encerram uma lista de itens dos quais somente um item pode ser usado.
... As reticências indicam que o item precedente pode aparecer uma ou mais vezes em
sucessão.

EXPRESSÕES
Uma expressão FORTRAN, é definida como uma combinação de itens sintáticos, isto é:
uma expressão pode consistir de uma única constante, de uma única variável, de um único elemento
ou conjunto, ou uma combinação de constantes, variáveis, elementos ou conjuntos, unidos com um
ou mais operadores. Os operadores especificam as computações a serem realizadas sobre os valores
dos elementos básicos. Por exemplo, a expressão:
x + z , consiste de duas variáveis unidas pelo operador +

TIPOS DE EXPRESSÕES:
 Aritméticas: produz somente um valor que é sempre um número cujo tipo é real, inteiro
ou complexo.
 Caracteres: produz somente um valor que é sempre uma cadeia de caracteres.
 Relacionais: produz somente um valor que é sempre uma constante lógica.
 Lógicas: produz somente um valor que é sempre uma constante lógica.
 Booleanas: produz somente um valore que é sempre do tipo Booleano.

2
OPERADORES ARITIMÉTICOS
Operador Definição Uso do Operador Significado
** Potenciação a**b a elevado a potência b
* Multiplicação a*b a multiplicado por b
/ Divisão a/b a dividido por b
+ Adição a+b a mais b
+ Mais unitário +a o mesmo que a
- Subtração a-b a menos b
- Menos unitário -a a com sinal trocado

OPERADOR CARACTERE
Operador Definição Uso do Operador Significado
// Concatenação a//b a encadeado com b

O resultado de uma operação de concatenação é uma cadeia de caracteres encadeando o


primeiro operando imediatamente com o segundo operando, sendo seu comprimento igual à soma
dos comprimentos dos operandos.
Por exemplo o valor de:
‘AB’//’EFG’ , é: ABEFG.

OPERADORES RELACIONAIS
Operador Definição Uso do Operador Significado
.EQ. Igual a a.EQ.b a=b?
.NE. Diferente de a.NE.b ab?
.LT. Menor que a.LT.b a<b?
.LE. Menor ou igual a.LE.b ab?
.GT. Maior que a.GT.b a>b?
.GE. Maior ou igual a.GE.b ab?

3
OPERADORES LÓGICOS
Operador Definição Uso do Operador Significado
.NOT. Negação .NOT.a Complemento de a: se a é verdade, então .NOT.a
Lógica é falso, se a é falso então .NOT.a. é verdade.
.AND. Conjunção a.AND.b Produto Booleano de a por b: se a e b são
lógica verdade, então a.AND.b é verdade; se a ou b ou
ambos são falsos, então a.AND.b é falso.
.OR. Disjunção a.OR.b Soma Booleana de a com b: se a ou b ou ambos
Inclusivo são verdade, então a.OR.b é verdade; se a e b são
lógica falsos, então a.OR.b é falso.
.EQV. Equivalência a.EQV.b Equivalência lógica de a com b: se a e b são
Lógica ambos verdade ou ambos falsos, então a.EQV.b é
verdade, caso contrário é falso.
.NEQV. Não a.NEQV.b Não equivalência lógica de a com b: se a e b são
equivalência ambos verdade ou ambos falsos, então a.EQV.b é
lógica falso, caso contrário é verdade.

EXEMPLOS
Se desejarmos testar se o valor da variável A satisfaz a inequação: 0  A  10 , na linguagem
FORTRAN devemos utilizar o seguinte procedimento:
0.LE.A.AND.A.GT.10
O computador calcula esta expressão lógica, se ambas as expressões relacionais são
verdadeiras então o valor da expressão é .TRUE., caso contrário é .FALSE. .

II - COMANDOS PARA DEFINIÇÃO DOS TIPOS DE VARIÁVEIS E FUNÇÕES


2.1 - COMANDO INTEGER
O comando INTEGER é usado para declarar, explicitamente, um nome de variável, conjunto
de variáveis, constante simbólica, ou de função, como sendo do tipo inteiro.
Sintaxe:
INTEGER [*s], n1[,ns,]..
S Número de bytes, pode ser 1, 2 ou 3.
n1 Variável ou função do tipo inteiro
n2 Variável do função do tipo inteiro

4
Exemplos:
a)- INTEGER*2 a,b,c,d(10)
b)- INTEGER*4 FUNCTION IT(A,B)
REAL*4 A,B
c)- INTEGER K,L,M

2.2 - COMANDO REAL


O comando REAL é usado para declarar, explicitamente, um nome de variável, conjunto de
variáveis, constante simbólica, ou de função, como sendo do tipo real.
Sintaxe:
REAL [*s], a1[,as,]..
S Número de bytes, pode ser 4 ou 8.
a1 Variável ou função do tipo real
a2 Variável do função do tipo real

Exemplos:
a)- REAL*4 a,b,c,d(10)
b)- REAL*4 FUNCTION FZ(A,B)
REAL*4 A,B
c)- REAL A,Z

2.3 - COMANDO COMPLEX


O comando COMPLEX é usado para declarar, explicitamente, um nome de variável,
conjunto de variáveis, constante simbólica, ou de função, como sendo do tipo COMPLEX.
Sintaxe:
COMPLEX [*s], a1[,as,]...
S Número de bytes, pode ser 4, 8. Ou 16.
a1 Variável ou função do tipo complexo
a2 Variável do função do tipo complexo

Exemplos:
a)- COMPLEX*4 a,b,c,d(10)
b)- COMPLEX*8 FUNCTION FZ(A,B)

5
2.4 - COMANDO CHARACTER
O comando CHARACTER é usado para declarar, explicitamente, um nome de variável,
conjunto de variáveis, constante simbólica, ou de função, como sendo do tipo alfa-numérica
Sintaxe:
CHARACTER [*s], a1[,as,]..
S Número de caracteres, deve ser um número inteiro positivo.
a1 Variável ou função do tipo alfa-numérica.
a2 Variável do função do tipo alfa-numérica.

Exemplos:
a)- CHARACTER*10 A
A = ‘TESTE’
b)- CHARACTER NOME
c)- CHARACTER N1*10, N2*20, C*30

2.5 - COMANDO LOGICAL


O comando LOGICAL é usado para declarar, explicitamente, um nome de variável,
conjunto de variáveis, como sendo do tipo lógica. As variáveis lógicas devem ser .TRUE.
(verdadeiro) ou .FALSE. (falso).
Sintaxe:
LOGICAL [*s], a1[,as,]..
S Número de bytes pode ser 1, 2 ou 4.
a1 Variável do tipo lógica
a2 Variável do tipo lógica

EXEMPLO:
a)- LOGICAL*2 B,C

OBS: A maioria dos compiladores da linguagem FORTRAN não permite que sejam feitas
operações entre variáveis de tipo diferentes. Exemplo se a variável J é do tipo INTEGER*2 e a
variável A é do tipo REAL*4, então a soma J + A causa um erro durante a execução do programa,
portanto se desejarmos que o resultado desta soma seja uma variável do tipo REAL*4 devemos

6
converter a variável J (INTEGER) para uma variável (REAL), através do comando FLOAT, neste
caso pode-se realizar a soma destas duas variáveis : FLOAT(J) + A

III - COMANDOS PARA DE ENTRADA SAÍDA


3.1 - COMANDO WRITE
O comando WRITE é usado para transferir dados da lista para um arquivos externos e
internos.
Sintaxe:
WRITE ( unit, fmt ) lista de variáveis
Unit Número que identifica o dispositivo de saída (ARQUIVO, IMPRESSORA, VÍDEO),
o dispositivo padrão é o vídeo e identificado pelo símbolo *.
Fmt Pode ser um número (LABEL) associado ao formato de saída dos dados ou pode ser
utilizado para especificar diretamente o formato da variável a ser transferida, a qual
deve ser escrita utilizando os seguintes delimitadores: ‘(tipo do formato)’. Pode-se
omitir a especificação do formato (utiliza-se o dispositivo padrão), para isto é
necessário utilizar o símbolo *.

Exemplos:
Se a = 2.30 e b = 323,141415, e ambas as variáveis são do tipo REAL*4, então:
a)- WRITE(*,*) a,b
Apresenta os seguintes valores de a e b no vídeo:
2.300000 323.1414

b)- WRITE(8,10) a,b


10 FORMAT(3X,’Valor de a = ’, f5.3, 5X,’Valor de b = ’, f6.2)
Apresenta a seguinte mensagem na unidade 8 (que pode ser vídeo, impressora ou arquivo):
Valor de a = 2.300 Valor de b = 323.14

Se a variável nome = ‘LINGUAGEM FORTRAN’ é do tipo CHARACTER*17, então:


c)- WRITE(*,’(A10)’) NOME
Apresenta o valor da variável nome com os 10 primeiros caracteres no vídeo:
LINGUAGEM

7
3.2 - COMANDO PRINT
O comando PRINT é usado para transferir dados da lista para o vídeo.
Sintaxe:
PRINT fmt, lista de variáveis
Fmt Pode ser um número (LABEL) associado ao formato de saída dos dados ou pode ser
utilizado para especificar diretamente o formato da variável a ser transferida, a qual
deve ser escrita utilizando os seguintes delimitadores: ‘(tipo do formato)’. Pode-se
omitir a especificação do formato (utiliza-se o dispositivo padrão), para isto é
necessário utilizar o símbolo *.

Exemplos:
Se a = 2.30 e b = 323,141415, e ambas as variáveis são do tipo REAL*4, então:
a)- PRINT*, a,b
Apresenta os seguintes valores de a e b no vídeo:
2.300000 323.1414

b)- PRINT 10,a,b


10 FORMAT(3X,’Valor de a = ’, f5.3, 5X,’Valor de b = ’, f6.2)
Apresenta a seguinte mensagem no vídeo:
Valor de a = 2.300 Valor de b = 323.14

Se a variável JI = 2 do tipo INTEGER*2, então:


c)- PRINT ’(I3)’,JI
Apresenta o valor da variável JI no vídeo com os 3 dígitos, neste caso os dois primeiros dígitos não
são preenchidos (brancos).

3.3 - COMANDO READ


O comando READ é usado para adquirir dados de um arquivo ou teclado.
Sintaxe:
READ ( unit, fmt ) lista de variáveis
Unit Número que identifica o dispositivo de entrada (ARQUIVO, TECLADO), o
dispositivo padrão é o teclado e identificado pelo símbolo *.
Fmt Pode ser um número (LABEL) associado a formato de entrada dos dados ou pode ser

8
utilizado para especificar diretamente o formato da variável a ser transferida, a qual
deve ser escrita utilizando os seguintes delimitadores: (‘tipo do formato’). Pode-se
omitir a especificação do formato (utiliza-se o dispositivo padrão), para isto é
necessário utilizar o símbolo *.

Exemplos:
a)- READ(*,*) a
b)- READ(*,10) b,c
10 FORMAT(3X,f8.6, 5X, f7.6)
c)- READ(8,*) A,B

3.4 - COMANDO FORMAT


O comando FORMAT é um comando não executável, usado em conjunção com os
comandos de entrada e saída formatados. Em outras palavras, o comando FORMAT descreve o
formato nos quais os dados devem ser transferidos, especifica o tipo de conversão que os dados
devem sofrer entre a representação interna e a representação externa, e pode especificar requisitos
de edição necessários para esse formato.
Sintaxe:
n FORMAT(ef [,ef [,...,ef ]])
N Número (LABEL) associado a formato de entrada ou saída dos dados.
Ef Especificação do formato.

As especificações do formato de conversão mais usadas no FORTRAN são:


[a] Iw Conversão de dados inteiros decimais

a É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma
especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será
usada somente uma vez.
w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em
caracteres.

9
[a] Fw.d Conversão de dados reais sem expoentes

a É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma
especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será
usada somente uma vez.
w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em
caracteres.
d É uma constante inteira sem sinal, indicando a quantidade de dígitos á direita do ponto
decimal interno ao campo w. Na saída todos os valores são arredondados.

[a] Ew.d Conversão de dados reais com expoente de simples precisão.

a É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma
especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será
usada somente uma vez.
w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em
caracteres.
d É uma constante inteira sem sinal , indicando a Quantidade de dígitos à direita do ponto
decimal interno ao campo w. Na saída todos os dados são arredondados.

[a] Dw.d Conversão de dados reais com expoente de dupla precisão.

a É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma
especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será
usada somente uma vez.
w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em
caracteres.
d É uma constante inteira sem sinal , indicando a Quantidade de dígitos à direita do ponto
decimal interno ao campo w. Na saída todos os dados são arredondados.

10
[a] Aw Conversão de dados caracteres.

a É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma
especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será
usada somente uma vez.
w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em
caracteres.

CARACTERES DE CONTROLE DE FORMATAÇÃO


Símbolo RESULTADO
[a] x Avança na apresentação dos dados um total de a caracteres.
[a] / Avança uma linha.
\ Permite que a apresentação dos dados continue na mesma linha.

EXEMPLOS
Se a = 34.456767 e b = 0.001312, então:
FORMATO A b
F9.4 34.4568 0.0013
E10.4 0.3446E+03 0.1312E-02
E12.5 0.34457E+03 0.13120E-02
D10.4 0.3446D+03 0.1312D-02

Se N = 23, J =356, K=-13, então:


Variável FORMATO
N I2
J I3
K I3

Se NOME = ‘teste de programação, então:


FORMATO RESULTADO
A10 teste de p
A5 teste

11
IV- COMANDOS DE CONTROLE DE FLUXOS

4 .1 - COMANDO IF
Os comandos executáveis IF transferem o controle de fluxo ou executam outro comando (ou
um bloco de comandos) dependendo da condição dada como resultado de uma expressão contida no
particular comando IF. Os três tipos de IF são:
 IF aritmético.
 IF lógico.
 IF bloco.

i)- IF ARITIMÉTICO
O comando IF aritmético, transfere o controle de fluxo par um dos três comandos
numerados, dependendo do valor de uma expressão aritmética contida no IF.
IF (e) n1,n2,n3
E É uma expressão aritmética do tipo inteiro, real ou dupla precisão.
n1,n2,n3 São rótulos (LABEL) que identificam as linhas os quais devem ser desviados de
acordo com o valor do resultado da expressão aritmética e.

e<0 Desvia o controle para a linha identificada por n1.


e=0 Desvia o controle para a linha identificada por n2.
e>0 Desvia o controle para a linha identificada por n3.
EXEMPLO
IF(K**2 – 2*K + 10 ) 40,60,20
EXPRESSÃO: K**2 – 2*K + 10 EFEITO
Negativa Desvio o programa para a linha identificada com rótulo 40.
Igual a zero Desvio o programa para a linha identificada com rótulo 60.
Positiva Desvio o programa para a linha identificada com rótulo 20.

ii)- IF LÓGICO
O comando IF lógico, executa ou ignora um comando executável contido no próprio IF de
acordo com o resultado da expressão lógica.
IF (e) c
E É uma expressão lógica.

12
C É qualquer comando executável FORTRAN, exceto um comando DO ou qualquer
dos comandos IF.

EXEMPLOS
a)- IF(A.GT.1.2) K = K + 1
Efeito: Se após o cálculo da expressão lógica A>1.2 o resultado for .TRUE. (verdadeiro) então
executa-se o seguinte operação matemática: K = K + 1.
b)- IF(J.EQ.1) call soma(n,res)
Efeito: Se após o cálculo da expressão lógica J=1 o resultado for .TRUE. (verdadeiro) então
executa-se o seguinte comando call soma(n,res), isto é a subprograma soma será executado.

iii)- IF BLOCO
O comando IF bloco, executa condicionalmente, blocos ou grupos de comandos executáveis.
If(e1) THEN
Bloco (1)
ELSE IF(e2) THEN
Bloco (2)
ELSE
Bloco (3)
END IF
Se a expressão lógica (e1) for verdadeira o bloco1 é executado.
Se a expressão lógica (e1) for falsa e a expressão (e2) for verdadeira o bloco2 é executado.
Se ambas as expressões lógicas (e1) e (e2) são falsas, então o bloco3 é executado.
EXEMPLO
IF(DELTA.GT.0) THEN
X1 = (-B+DELTA)/(2.0*A)
X2 = (-B+DELTA)/(2.0*A)
AR = ‘Raizes distintas’
ELSE IF(DELTA.EQ.0.) THEN
X1 = -B/(2.0*A)
X2 = X1
AR = ‘Raizes repetidas’
ELSE
Z1 = CMPLX ( B/(2.0*A), (-DELTA) **0.5 /(2.0*A) )
Z2 = CMPLX ( -B/(2.0*A),(-DELTA) **0.5 /(2.0*A) )
AR = ‘Raizes complexas’
END IF

13
4.2 - COMANDO DO
O comando DO é um comando de controle que permite que uma seqüência de comandos
seja repetitivamente executada enquanto o valor da variável de controle estiver entre os limites
especificados.
DO k=nstart, nend[,step]
Bloco (1)
END DO
k É uma variável de controle do tipo inteiro.
nstart É o parâmetro inicial de k.
nend É o parâmetro inicial de k.
nstep É o parâmetro de incremento de k.

EXEMPLO: Desejamos calcular o valor da variável s, a qual é definida pela seguinte expressão :
s  x(1)  x(3)  x(5)  x(7)  x(9)
DO J=1,9,2
S = S + X(J)
END DO

4.3 - COMANDO DO WHILE


O comando DO é um comando de controle que permite que uma seqüência de comandos
seja repetitivamente executada enquanto a expressão lógica permanecer verdadeira .TRUE. .
DO WHILE (expressão lógica)
Bloco (1)
END DO
Enquanto a expressão lógica for verdadeira a seqüência de comandos representada pelo
bloco (1) é executada.
EXEMPLO: se desejarmos que seja apresentado todos os valores da variável K, a qual
pode assumir os seguinte conjunto de valores: 1,2,3,4,5,6,7,8,9,10, podemos utilizar dos
seguintes comandos:
INTEGER K
K=0
DO WHILE (K.LT.10)
K=K+1
PRINT *,K
END DO
END

14
4.4 - COMANDO CASE
O comando CASE é um comando de controle que permite que uma seqüência de comandos
seja executada se o valor da variável de controle estiver entre os limites especificados.
SELECT CASE ( Variável do tipo inteiro)
CASE (Seleção do caso)
Bloco 1
CASE DEFAULT
Bloco 2
END SELECT
O bloco do CASE DEFAULT é opcional. A declaração da seleção do caso pode assumir
uma das quatro formas:
 (valor igual)
 (valor inferior:)
 (:valor superior)
 (valor inferior: valor superior)

EXEMPLO
integer n
character*20 a
read(*,*) n
select case(n)
case(:4200)
a = 'Regime Laminar'
case(4201:12000)
a = 'Regime de Transicao'
case default
a = 'Regime Turbulento'
end select
print *,a
end
O Bloco 1 é executado se a seguinte expressão (1) for verdadeira n  4200 .
O Bloco 2 é executado se a seguinte expressão (2) for verdadeira 4201  n  12000 .
O Bloco 3 é executado se as expressões (1) e (2) forem falsas.

4.5 - COMANDO PAUSE


Suspende temporariamente a execução do programa e permite que seja executado
operações do sistema operacional durante a suspensão.

15
4.6 - COMANDO STOP
O comando executável STOP termina a execução do programa, pode exibir uma
informação no vídeo.
STOP [‘ mensagem’]
EXEMPLO
STOP ‘PROGRAMA ABORTADO’

4.7 - COMANDO END


O comando END indica o final físico de uma unidade de programa para o compilador. Um
programa na linguagem FORTRAN tem dois pontos terminais. O primeiro é um ponto terminal
lógico, indicando o fim da execução do programa. Esse terminal lógico é indicado pelo comando
STOP. O segundo ponto terminal é o ponto terminal físico, indicando o fim do processo de
compilação. Esse ponto terminal físico é indicado pelo comando END, que deve ser o último
comando numa unidade de programa FORTRAN.
A forma geral do comando END é:
END
Cada unidade de programa (isto é, um programa principal, um subprograma FUNCTION,
um subprograma SUBROUTINE) deve conter um e somente um comando END.

V- SUPROGRAMAS
Um subprograma, é uma seqüência de instruções ou comandos que fazem parte de um
programa. Tanto o programa principal como os subprogramas são conhecidos como unidades de
programas. Uma unidade de programa FORTRAN contém uma seqüência de comandos FORTRAN
que define um procedimento computacional. Uma unidade de programa FORTRAN sempre deve
terminar com um comando END. As unidades de programa podem, então ser compiladas
independentemente uma das outras, porém um subprograma não pode ser executado a não ser
através de um programa principal.

5.1 – FUNÇÕES INTRÍNSECAS


As funções intrínsecas são procedimentos que já estão definidos, e seu códigos estão
incluídos numa biblioteca de funções.

16
FUNÇÕES DE CONVERSÃO DE TIPO
Nome Específico Tipo de argumento Resultado
IDINT(var) Real*8 Integer*4
INT(var) Integer, Real ou Complex. Integer*4
INT1(var) Integer, Real ou Complex. Integer*1
INT2(var) Integer, Real ou Complex. Integer*2
INT4(var) Integer, Real ou Complex. Integer*4
EXEMPLO
REAL*4 A
COMPLEX B
INTEGER*2
A = 2.64
B = (4.04,3.4)
C = INT(A)
D =INT(B)
PRINT 10,C,D
10 FORMAT(3X,’VALOR DE C = ‘,I2,3X,’VALOR DE D =’,I2)
END

EFEITO: No vídeo será apresentado os seguintes valores para as variáveis C e D:


VALOR DE C = 2 VALOR DE D = 3

Nome Específico Tipo de argumento Resultado


DFLOAT (var) Integer, Real ou Complex Real*8
FLOAT(var) Integer Real*4
DBLE (var) Integer, Real ou Complex Real*8

Nome Específico Tipo de argumento Resultado


CMPLX (var) Integer, Real ou Complex Complex*8
DCMPLX(var) Integer,Real ou Complex Complex*16

Nome Específico Tipo de argumento Resultado


CHAR (var) Integer, Real ou Complex Inteiro

FUNÇÕES TRIGONOMÉTRICAS

NOME Definição Argumento Resultado


SIN (x) Seno em radianos Real or complex REAL*4
SIND (x) Seno em graus Real or complex REAL*4
CSIN (x) Sine (radianos) COMPLEX*8 COMPLEX*8
CDSIN (x) Seno (radianos) COMPLEX*16 COMPLEX*16
DSIN (x) Seno (radianos) REAL*8 REAL*8
DSIND (x) Seno (graus) REAL*8 REAL*8

17
ASIN (x) Arcseno (radianos). Retorna com Real, x  1 REAL*4
valor no intervalo [2, 2 ]
ASIND (x) Arcseno (graus) Retorna com Real, x  1 REAL*4
valor no intervalo [90, 90 ]
DASIN (x) Arcseno (radianos) Retorna com REAL*8 REAL*8
valor no intervalo [2, 2 ]
DASIND (x) Arcseno (graus) Retorna com REAL*8 REAL*8
valor no intervalo [90, 90 ]
COS (x) Coseno (radianos). Se x é Real or complex REAL*4
complexo, sua parte real é
considerada como o valor em
radianos.
COSD (x) Coseno (graus). Se x é complexo, Real or complex REAL*4
sua parte real é considerada
como o valor em radianos.
CCOS (x) Coseno (radianos) COMPLEX*4 COMPLEX*4
CDCOS (x) Coseno (radianos) COMPLEX*8 COMPLEX*8
DCOS (x) Coseno (radianos) REAL*8 REAL*8
DCOSD (x) Coseno (graus) REAL*8 REAL*8
ACOS (x) Arco coseno (radianos) Retorna Real, x  1 REAL*4
com valor no intervalo [ 0,  ]
ACOSD (x) Arco coseno (graus) Retorna com Real, x  1 REAL*4
valor no intervalo [ 0, 180 ]
DACOS (x) Arco coseno (radianos) Retorna REAL*8, x  1 REAL*8
com valor no intervalo [ 0,  ]
DACOSD (x) Arco coseno (graus) Retorna com REAL*8, x  1 REAL*8
valor no intervalo [ 0, 180 ]
TAN (x) Tangente (radianos) Real REAL*4
TAND (x) Tangente (graus) Real REAL*4
DTAN (x) Tangente (radianos) REAL*8 REAL*8
DTAND (x) Tangente (graus) REAL*8 REAL*8
COTAN (x) Cotangente (radianos) Real. x não pode ser REAL*4
0.
DCOTAN (x) Cotangente (radianos) REAL*8. x não pode REAL*8
ser 0.
ATAN (x) Arco tangente (radianos). Retorna Real REAL*4
com valor no intervalo [2, 2 ]
ATAND (x) Arco tangente (graus). Retorna Real REAL*4
com valor no intervalo [90, 90 ]
DATAN (x) Arco tangente (radianos). Retorna REAL*8 REAL*8
com valor no intervalo [2, 2 ]
DATAND (x) Arco tangente (graus). Retorna REAL*8 REAL*8
com valor no intervalo [90, 90 ]
ATAN2 (y,x) Arco tangente (y / x) em radianos. Real. x e y não REAL*4
Retorna com valor no intervalo podem ambos ser 0.
[,  ]
ATAN2D Arco tangente (y / x) em graus. Real. x e y não REAL*4
(y,x) Retorna com valor no intervalo podem ambos ser 0.

18
[180, 180 ]
DATAN2 Arco tangente (y / x) em radianos. REAL*8 x e y não REAL*8
(y,x) Retorna com valor no intervalo podem ambos ser 0.
[,  ])
DATAN2D Arco tangente (y / x) em graus. REAL*8 x e y não REAL*8
(y,x)¤ Retorna com valor no intervalo podem ambos ser 0.
[180, 180 ]

FUNÇÕES HIPERBÓLICAS

NOME Definição Argumento Resultado


SINH (x) Hipérbolico seno (radianos) Real REAL*4
DSINH (x) Hipérbolico seno (radianos) REAL*8 REAL*8
COSH (x) Hipérbolico coseno (radianos) Real REAL*4
DCOSH (x) Hipérbolico coseno (radianos) REAL*8 REAL*8
TANH (x) Hipérbolico tangente (radianos) Real REAL*4
DTANH (x) Hipérbolico tangente (radianos) REAL*8 REAL*8

FUNÇÕES EXPONENCIAL E LOGARTIMICA

NOME Definição Argumento Resultado


CEXP (x) Cálculo da função exponencial COMPLEX*8 COMPLEX*8
DEXP (x) Cálculo da função exponencial REAL*8 REAL*8
EXP (x) Cálculo da função exponencial REAL*4 REAL*4
ALOG (x) Cálculo da função logarítmica na REAL*4 REAL*4
base e
CDLOG (x) Cálculo da função logarítmica na COMPLEX*16 COMPLEX*16
base e
CLOG (x) Cálculo da função logarítmica na COMPLEX*8 COMPLEX*8
base e
DLOG (x) Cálculo da função logarítmica na REAL*8 REAL*8
base e
LOG (x) Cálculo da função logarítmica na Real or complex Real or
base e complex
ALOG10 (x) Cálculo da função logarítmica na REAL*4 REAL*4
base 10
DLOG10 (x) Cálculo da função logarítmica na REAL*8 REAL*8
base 10
LOG10 (x) Cálculo da função logarítmica na REAL*4 REAL*4
base 10

EXEMPLO: Se desejarmos calcular as seguintes expressões matemáticas: y  ln( x ) ,


v  log a e z  e x , onde: y,v e z são do tipo REAL*4, então devemos utilizar das
seguintes funções:
y = LOG(x)
v = LOG10(a)

19
z = EXP(x)
FUNÇÕES MÁXIMO E MÍNIMO

Funções de mínimo
Retorna com o menor valor a partir de um conjunto de variáveis
Função Argumento Resultado
AMIN0 ( a1, a2 [ , a3,...] ) INTEGER*4 REAL*4
AMIN1 ( a1, a2 [ , a3,...] ) REAL*4 REAL*4
DMIN1 ( a1, a2 [ , a3,..] ) REAL*8 REAL*8
MIN ( a1, a2 [ , a3,...] ) INTEGER OR REAL INTEGER OR REAL
MIN0 ( a1, a2 [ , a3,...] ) INTEGER*4 INTEGER*4
MIN1 ( a1, a2 [ , a3,...] ) REAL*4 INTEGER*4
EXEMPLOS:
MIN(3,5) = 3
MIN(2.1,3.5)=2.1
MIN1(3.1,4.1,-2.1) = -2

Funções de máximo
Retorna com o maior valor a partir de um conjunto de variáveis
Função Argumento Resultado
AMAX0 (a1, a2 [ , a3,...] INTEGER*4 REAL*4
AMAX1 (a1, a2 [ , a3,...] REAL*4 REAL*4
DMAX1 (a1, a2 [ , a3,...] REAL*8 REAL*8
MAX (a1, a2 [ , a3,...] INTEGER OR REAL INTEGER OR REAL
MAX0 (a1, a2 [ , a3,...] INTEGER*4 INTEGER*4
MAX1 (a1, a2 [ , a3,...] REAL*4 INTEGER*4

EXEMPLOS:
MAX(2,5) = 5
MAX(7.1,3.5)=7.1
MAX1(6.1,8.5,-2.1) = 8

OUTRAS FUNÇÕES INTRINSÍNSECAS


i)- CALL TIME (string)
A subrotina TIME retorna com uma com a hora no seguinte formato: hh:mm:sss, onde hh é
a hora, mm são os minutos e sss são os centésimos de segundos.
EXEMPLO:
character*15 horas
call time(horas)
print *,horas
Efeito: É apresentado no vídeo a seguinte mensagem: 20:01:003

20
ii)- CALL DATE(string)
A subrotina DATE retorna com uma com a data no seguinte formato: :dd-mmm-yy, onde hh
é o dia (número inteiro com dois dígitos), mmm a abreviação do mês correspondente (Três
caracteres),. yy é o ano correspondente com dois dígitos.
EXEMPLO:
character*15 tempo
call date(tempo)
print *,tempo
Efeito: É apresentado no vídeo a seguinte mensagem: 29-jun-98

5.2 – FUNÇÕES EXTERNAS


Desde que as funções intrínsecas estão contidas numa biblioteca do compilador FORTRAN,
pode acontecer do usuário necessitar de utilizar de uma função que não esteja disponível na
biblioteca, neste caso é necessário escrever sua própria função. Um subprograma função
FUNCTION é usado do mesmo modo da função intrínseca. A diferença é que o usuário é quem
deve escrever o subprograma FUNCTION.

5.2.1 - COMANDO FUNCTION


O comando FUNCTION deve aparecer como o primeiro comando num subprograma
FUNCTION.
Tipo FUNCTION nome (argumento)
Tipo INTEGER*2, INTEGER*4, REAL*4, REAL*8, COMPLEX*8,
COMPLEX*16, CHARACTER[*comprimento]
Nome É o nome do subprograma FUNCTION
Argumento É um argumento que pode ser o nome de uma variável, o nome de um
conjunto de variáveis, ou mudo.

Todo subprograma FUNCTION deve terminar com os comandos: RETURN e


END.
n
i)- EXEMPLO: Suponha que desejamos resolver a seguinte expressão: i.
i 1

INTEGER FUNCTION SUM(N)


INTEGER N
SUM = 0
DO I=1, N
SUM = SUM + I
END DO
RETURN
END
21
ii)- EXEMPLO: Suponha que temos um problema termodinâmico na qual seja necessário
calcular muitas vezes a pressão de vapor do álcool etílico em diversas temperaturas utilizando a
equação de Antoine, neste caso é conveniente construir uma função que permita fazer este cálculo.
 B 
A equação de ANTOINE para este caso é P  exp  A   , os valores das constantes
 T C
são: A = 18.3036, B = 3816.44 e C = -46.13. Onde a pressão em (mmHg) e a Temperatura em (K).
DEFINIÇÃO DA FUNÇÃO
REAL*4 FUNCTION PVAP(T)
REAL*4 T
REAL* 4 A,B,C
A = 18.3036
B = 3816.44
C = -46.13
PVAP = EXP( A - B / (T + C ) )
RETURN
END
CHAMADA DA FUNÇÃO NO PROGRAMA PRINCIPAL
REAL*4 T1,T2,P1,P2
REAL*4 PVAP
EXTERNAL PVAP
T1 = 300.0
P1 = PVAP(T1) ! Calcula a pressão de vapor na temperatura de 300 K !
T2 = 350.0
P2 = PVAP(T2) ! Calcula a pressão de vapor na temperatura de 350 K !
END

ATIVIDADES:
i)- Desenvolva uma função que permite o cálculo do fatorial. (n!)
ii)- Desenvolva uma função para o cálculo da pressão, volume específico e temperatura
utilizando a equação dos gases ideais. P V = R T.
onde: P(atm), V(cm3/gmol) , T(K) e R = 82,05 cm3 atm / mol K.

5.2.2 - COMANDO EXTERNAL


EXTERNAL [LISTA DE NOMES]
Identifica uma subrotina ou função escrita pelo próprio usuário em vez de uma função
intrínseca. O comando EXTERNAL somente pode aparecer em unidades de programa que enviam
argumentos representando por nomes de subprogramas (FUNCTION ou SUBROUTINE)

22
EXEMPLO:
REAL*4 PVAP
EXTERNAL PVAP

END

REAL*4 FUNCTION PVAP(T)


REAL*4 T

RETURN
END
5.2.3 - COMANDO SUBROUTINE
O comando SUBROUTINE deve aparecer como o primeiro comando num subprograma
SUBROUTINE. Este comando contém o nome simbólico que é o ponto principal de entrada do
subprograma. A forma geral deste comando é:
SUBROUTINE NOME (argumento)
Nome É o nome do subprograma SUBROUTINE
Argumento É um argumento que pode ser o nome de uma variável, o nome de um
conjunto de variáveis, ou mudo.
Todo subprograma SUBROUTINE deve terminar com os comandos: RETURN e
END. O comando SUBROUTINE é essencial para o desenvolvimento de programas
estruturados, pois este comando permite que o programa principal seja desmembrado em vários
subprogramas, ficando mais fácil de se trabalhar na montagem do programa principal.
Usualmente somos deparados com problemas matemáticos aplicados a engenharia na qual
uma das etapas é a resolução do sistema de equações lineares. Então é conveniente construir um
subprograma utilizando o comando SUBROUTINE para a resolução de sistemas de equações,
portanto se necessitarmos de tal ferramenta podemos simplesmente dentro do programa principal
chamar este subprograma, para isto utilizaremos um outro comando denominado de CALL. O tipo
dos argumentos utilizados na chamada do subprograma deve ser idêntica ao utilizado na definição
da subroutine.
SUBPROGRAMA
SUBROUTINE SOMA(N,SUM)
INTEGER N
REAL*4 SUM
SUM = 0.0
DO I=1,N
SUM = SUM + FLOAT(I)
END DO
RETURN
END

23
PROGRAMA PRINCIPAL
INTEGER NN
REAL* 4 S
EXTERNAL SOMA
WRITE(*,10)
10 FORMAT(3X,’Entre com o valor de n = ‘\)
READ(*,*) N
CALL SOMA(NN,S)
20 WRITE(*,20) S
END

Uma dúvida muito comum quando inicia-se a programação na linguagem


FORTRAN é se existe a necessidade de que os nomes dos argumentos na chamada do subprograma
(comando CALL) sejam idênticos ao da definição (SUBROUTINE). Como podemos observar do
exemplo anterior não existe esta necessidade, por exemplo: quando definirmos a variável NN=5.no
programa principal, ao utilizar o comando CALL SOMA(NN,S), será atribuído o valor 5 para a
variável NN, valor este que será armazenado na variável N na SUBROUTINE SOMA, portanto
quando chamamos um subprograma com o comando CALL serão transferidos os valores das
variáveis.
SUBROUTINE SOMA(N,SUM)
CALL SOMA(NN,S)
É importante observar que o tipo e a seqüência das variáveis nos comandos SUBROUTINE
e CALL deverão ser obrigatoriamente os mesmos, como podemos observar na tabela abaixo.
COMANDO VARIÁVEL TIPO
SUBROUTINE SOMA(N,SUM) N INTEGER
SUM REAL*4
CALL SOMA(NN,S) NN INTEGER
S REAL*4
Caso não seja respeitado o tipo e a seqüência das variáveis, ocorrerá um erro de lógica, que
é mais difícil de se encontrar. Para ilustrarmos, tomemos o seguinte exemplo: se no programa
principal definirmos a variável S como do tipo REAL*8, sendo que no SUBPROGRAMA SOMA,
a variável SUM é do tipo REAL*4, ao compilar o programa não detectado nenhum tipo de erro,
contudo ao executar este programa poderemos observar que valor retornado na variável S não está
correto em função dos tipos das variáveis serem diferentes (REAL*4 SUM, REAL*8 S),
ocasionando então um erro de lógica.
ii)- Desenvolva uma função que permite o cálculo do fator de compressibilidade utilizando a
equação de Redlich-Kwong:

24
1  4,934   h  0,0867Pr T P
Z   1,5    , h , Tr  e Pr  .
1  h  Tr   1  h  Z Tr Tc Pc

Dados para o teste da subrotina:


substância: n-butano: T = 460 K , P = 15 atm, Tc = 425,2 K , Pc = 37,5 atm e tolerância = 1,0x10 -4.
Valor de Z encontrado: 0,884214.
FLUXOGRAMA DE REDLICH-KWONG

Entre com T, P , Tc, Pc


e TOL

Calcule Tr, Pr

Z=1, ERRO=1

Cálculo de h

Cálculo de Zn

Erro= abs(Z-Zn)

NÃO
Z = Zn Tol> Erro

SIM

Apresente o
valor de Z

25
5.2.4 - COMANDO CALL
O comando CALL é chamado para executar um subprograma SUBROUTINE. A forma
geral deste comando é:
CALL NOME (argumento)
Nome É o nome do subprograma SUBROUTINE
Argumento É um argumento que pode ser o nome de uma variável, o nome de um
conjunto de variáveis, ou mudo.

EXEMPLO: Construção de uma subrotina para o cálculo de fatorial.


SUBROUTINE FATORIAL(N,RES)
INTEGER N
REAL*4 RES
IF(N.EQ.0) THEN
FAT = 1.0
IF ELSE(N.GE.1) THEN
FAT = 1.0
DO I=1,N
FAT = FAT*FLOAT(I)
END DO
ELSE
STOP(‘NÃO EXISTE FATORIAL DE NUMERO NEGATIVO’)
END IF
RETURN
END

REAL*4 FAT
INTEGER N
PRINT 10
10 FORMAT(3X,’Entre com o valor de n = ‘,\)
READ(*,*) N
CALL FATORIAL(N,FAT)
PRINT 20, N,FAT
20 FORMAT(3X,I4,’! = ‘,F9.6
END

ATIVIDADES:
Desenvolva uma subprograma utilizando o comando SUBROUTINE para encontrar a raiz de uma
equação utilizando o método de NEWTON-RAPHSON.
Objetivo: Encontrar o valor de x, tal que: ( x )  0

( x ( n ) )
x ( n 1)  x ( n ) 
' ( x ( n ) )
onde:
x (n) : valor de x na interação (n)

26
x ( n 1) : valor de x calculado na interação (n+1)
( x ) : Função na qual deseja-se encontrar a raiz da equação.
' ( x ) : Derivada da função na qual deseja-se encontrar a raiz da equação.
Critério de parada: x ( n1)  x ( n )  Tol

Os seguintes argumentos devem ser utilizados na construção desta subrotina:


XI Estimativa inicial para o cálculo da raiz.
XF Valor da raiz encontrada pelo método de Newton-Raphson.
TOL Tolerância
FUN Função na qual deseja-se encontrar a raiz.
DFUN Derivada da função na qual deseja-se encontrar a raiz.

EXEMPLO:
(x)   ln( x)  x  4
1
' ( x )    1 , com x(1) = 2.0.
x

No de x (n) x ( n 1) ( x ( n ) ) ( x ( n1) ) Erro


iterações
1 2.000000 2.871235 1.306853 -1.348282 8.712351E-01
2 2.871235 2.926136 7.402257E-02 -1.341748 5.490136E-02
3 2.926136 2.926271 1.805562E-04 -1.341732 1.344681E-04
4 2.926271 2.926271 1.350883E-07 -1.341732 0.000000E+00

6 – COMANDOS DE ESPECIFICAÇÃO: DESIGNAÇÃO DE ÁREAS DE MEMÓRIA


6.1 – COMANDO DIMENSION
Quando se trabalha com um conjunto de variáveis, por exemplo: os elementos de uma
 a 1,1 a 1, 2 a 1,3  a 1,n 
 
a 2,1 a 2, 2 a 2,3  a 2 ,n 
matriz A nxn       ,
 
      
a a a  a n ,n 
 n ,1 n , 2 n ,3

ou um vetor X com n elementos: X  x1 , x 2 , x 3  x n . 
Em ambos os casos é necessário reservar uma área de memória para estas variáveis.

27
O comando DIMENSION especifica nomes simbólicos como nomes de conjuntos, define o
número de dimensões em cada conjunto, e especifica os limites de cada dimensão. A forma geral
deste comando é:
DIMENSION c1(d1[,d2],...]) [, c2(d3[,d4],...])]...
c1 e c2 Nome do conjunto de variáveis
d1 e d2 Números inteiros que indicam a dimensão do conjunto de variáveis c1, cada.
d3 e d4 Números inteiros que indicam a dimensão do conjunto de variáveis c2.

A especificação dos limites de cada índice do conjunto, pode ocorrer em duas


formas:
Superior
ou
Inferior : superior

Superior: Especifica o limite superior da dimensão e deve ser sempre especificado.


Inferior: Especifica o limite inferior da dimensão, sendo opcional. Se o valor da dimensão for
omitido (em conjunto com :), seu valor é considerado igual a 1.

O comando DIMENSION designa uma área de memória a cada elemento em cada dimensão
de um conjunto. O número total de áreas designadas a um conjunto é igual ao produto dos valores
dos declaradores de dimensão para esse conjunto.
EXEMPLOS
DIMENSION A(10,10),X(5)
DIMENSION Y(-4:5,4:20),Z(2:5,4:7,6)
Uma forma equivalente de declarar um conjunto de variáveis sem utilizar o comando
DIMENSION, consiste em declarar a dimensão junto com os comandos de especificação dos tipos
de variáveis .
EXEMPLOS
Real*4 A(10,10),X(5),Y(-4:5,4:20)
Integer Z(2:5,4:7,6)

6.2 – COMANDO PARAMETER


O comando PARAMETER representa uma constante através de um símbolo e declara seu
valor. O comando PARAMTER é um comando não executável, e deve ser escrito entre os
comandos de especificação.
PARAMETER ( n1=v1 [ , n2=v2 ] ...)
n1 e n2 Nomes das variáveis
v1 e v2 Valores atribuídos as variáveis n1 e n2 respectivamente.

28
EXEMPLOS
real*4 gc, densidade
integer n
parameter ( gc = 32.2, densidade = 1.3 , n = 10)

Uma vez que o nome simbólico de uma constante tenha sido definido através de um
comando PARAMETER, ele pode ser usado em qualquer unidade do programa, exceto como parte
da especificação de um formato. Uma questão importante a ser analisada é qual a diferença entre
uma constante simbólica, definida por um comando de atribuição e a definida por um comando
PARAMETER. A diferença é que uma vez definido o valor de uma constante simbólica, não é
possível redefini-la, além disto a especificação da dimensão de um conjunto variáveis somente é
permitido através da utilização de constantes simbólicas utilizando o comando PARAMETER.
EXEMPLOS
i)- integer n, w
parameter (n =10, w = 20)
real*4 a(n,n),x(n)
character*15 nome(w)

ii)- Resolução de sistemas de equações cuja a matriz dos coeficientes é triangular superior, isto é, os
elementos abaixo da diagonal são todos nulos, como apresentado no exemplo abaixo.

 a 1,1 a 1, 2 a 1,3  a 1,n 1 a 1,n   x 1   b1 


     
 0 a 2, 2 a 2,3  a 2,n 1 a 2,n   x 2   b2 
  x   b 
 0 0 a 3,3  a 3,n 1 a 3,n 
 3  3
             
  x  b 
 0 0 0  0 a n ,n   n  n

De maneira sintética podemos escrever a seguinte equação: AX  B , onde:


a 1,1 a 1, 2 a 1,3  a 1,n 1 a 1,n   x1   b1 
     
 0 a 2, 2 a 2,3  a 2,n 1 a 2,n   x2   b2 
A nxn   0 0 a 3,3  a 3,n 1 a 3,n  , X   x 3  e B   b 3 
     
             
0 0 0  0 a n ,n    b 
 xn   n

O problema original consiste em encontrar os valores das variáveis X, tal que AX  B , onde
A é uma matriz triangular superior.
Pode-se empregar o seguinte algoritmo para a resolução deste Problema:
x n  b n / a n ,n

29
Para i  n  1, 1 temos:
 i 1

x i   b i   x ja i , j  / a i,i

 j n 
Apresentamos a seguir uma subprograma para a resolução de sistema de equações cuja
matriz seja triangular superior:
I Subroutine resol_as(A,X,B,N)
Integer n
Real*4 a(n,n), X(n), B(n)
C
C
C
C ----- resolucao de uma sistema de equacoes lineares: AX=B -------
C ----- onde a matriz A e triangular superior ---------
C A: Matriz dos coeficientes
C B: Vetor constante
C X: Vetor incógnita
C N: Número de incognitas
x(n) = b(n)/a(n,n)
do i=n-1,1,-1
soma = 0.0
do j=n,i+1,-1
soma = soma + x(j)*a(i,j)
end do
x(i) = (b(i) –soma)/a(i,i)
end do
return
end

ATIVIDADES:

1  2 2 2  x1   1 
     
0 1  1 4  x2   5
i)- Resolva o seguinte sistema de equações:    x   4
0 0 1 2
 3   
0 0 0 4   x4  4

Resultado: X T  (1, 3, 2, 1)

ii)- Desenvolva uma subrotina para a resolução de sistemas lineares utilizando o método da
eliminação de Gauss. O método da eliminação de Gauss consiste em transformar a matriz dos
coeficientes Anxn em uma matriz equivalente triangular superior (matriz escalonada) e encontrar a
solução, a matriz equivalente tem a mesma solução da matriz original.
Método da eliminação de Gauss
k  1, n  1

30
i  k  1, n
m  a i ,k / a k ,k
bi  bi  m b k
j  k  1, n
a i, j  a i, j  m a k, j
Resolução do sistema (matriz triangular superior)
x n  b n / a n ,n
Para i  n  1, 1 temos:
 i 1

x i   b i   x ja i , j  / a i,i
 j n 

OBS: Quando o elemento pivô da matriz dos coeficientes ( a k ,k ) é nulo, não é possível

aplicar o método da eliminação de Gauss (divisão por zero m  a i,k / a k ,k ). Além disso, quando o

elemento pivô tem um valor muito pequeno quando comparado com os demais elementos da coluna
k das linhas não escalonadas da matriz A, podem ocorrer problemas de instabilidade numérica que
afetam os valores das incógnitas (vetor X) encontrados. pelo método da eliminação de Gauss. Para
contornar este problema é conveniente realizar a estratégia de pivotação parcial na matriz A. Esta
técnica consiste em encontrar o elemento a p,k das linhas não escalonadas, tal que: a p,k  a j,k .com

j  k, n e trocar as linhas L k  L p .

EXEMPLO:

1  2 2 2
 
0 4  1 4
  , neste caso k  2 .
0  3 1 2
0  9 3 4 

Neste caso observamos que a 4, 2  a j, 2 , para j  2,3,4 . Portanto deve-se trocar as linhas:

L2  L4 , obtendo-se a seguinte matriz equivalente.

1  2 2 2
 
0  9 3 4
 
0  3 1 2
0 4  1 4 

iii)- Desenvolva uma subrotina para a resolução de sistemas lineares utilizando o método da
eliminação de Gauss com pivotação parcial.

31
ALGORITMO DA PIVOTAÇÃO PARCIAL.
ELEMENTO PIVÔ a k ,k
v  a k ,k
pk
r  k  1, n
se v  a r ,k , então: p  r
se p  k , então: d  bk
bk  bp
bp  d
j  k, n
c  a k, j
a k , j  a p, j
a p, j  c

Para testar o programa utilize o seguinte exemplo:

 1 2 3  1  x 1    8
   
 2  1 0 3  x 2   12
 1 4 1  1  x 3   2
   
 3 1 3 1  x 4    6

X T  1, 2, 3, 4 .

6.3 – COMANDO DATA


O comando DATA inicializa uma variável, cujo valor pode ser alterado durante a execução
do pro1grama. O comando DATA é um comando não executável, e deve ser escrito entre os
comandos de especificação.
DATA n1list/ v1list/ [ , n2list/ v2list/...]
n1list e n2list Lista de variáveis a ser inicializadas.
v1list e v2list Valores a serem atribuídos a conjunto de variáveis n1list e n2list
respectivamente.

EXEMPLOS
Real*4 a,b,c,n1,n2
Data a,b,c/1.2,3.4,4.12/,n1,n2/5,10/

Tem o mesmo efeito a atribuição:


A = .12
B = 3.4

32
C = 4.12
N1 = 5
N2 = 10

6.4 – COMANDO COMMON


O comando COMMON está diretamente ligado a utilização de subprogramas FUNCTION e
SUBROUTINE, que são unidades de programas independentes no sentido do processo de
compilação, isto é, são compilados separadamente do .programa principal. Isto significa que uma
variável X pode ser usada para uma finalidade no programa principal e pode ter uma finalidade
diferente do subprograma. A forma de transferência de valores das variáveis dos subprogramas
FUNCTION e SUBROUTINE ocorrem mediante a lista de argumentos destes comandos, contudo
existe uma outra forma de transferir informações entre os subprogramas, através do comando
COMMON, que define um bloco de memória comum.
COMMON /n1/ l1/ [ ,/n2/ l2...]
n1 e n2 Nomes simbólicos, chamado rótulo ou bloco comum.
l1 e l2 Lista das variáveis a serem incluídas no bloco comum.
EXEMPLOS
Real*4 a,b,c,n1,n2
COMMON /Bloco1/a,b,c,n1,n2

Real*8 Z,X
Integer n,k
Character*20 nome
COMMON /Bloco2/z,x,/bl3/n,k,nome

7– ABERTURA, LEITURA E GRAVAÇÃO DE ARQUIVOS EXTERNOS


7.1 – COMANDO OPEN
Inicializa um arquivo de forma que as operações de entrada e saída podem ser executadas. O
comando OPEN pode ser usado para:
1. Associar um arquivo existente com um número de entrada e saída.
2. Criar um arquivo novo e associa-lo com um número de entrada e saída.
O comando OPEN permite a utilização de uma série parâmetros, apresentaremos na sua
forma mais comum e simplificada de utilização. Sua forma geral é:
OPEN ( UNIT = u, ACCESS= a ,FILE = f, STATUS=s)
u Número inteiro maior ou igual a zero, este parâmetro associa um número a um dispositivo
de entrada e saída.

33
a ‘APPEND’ Especifica que o arquivo está sendo aberto para acesso seqüencial, caso exista
um arquivo com o mesmo valor do parâmetro FILE, as informações contidas neste arquivo
não são perdidas quando acrescenta-se novos dados a este arquivo.
‘SEQUENTIAL’ Especifica que o arquivo está sendo aberto para acesso seqüencial. Valor
padrão do parâmetro ACESS.
‘DIRECT’ Especifica que o arquivo está sendo aberto para acesso direto..
f Parâmetro especificador do nome do dispositivo de saída
File = ‘COM’ vídeo
Qualquer outro nome é associado a um arquivo .
s ‘OLD’ O arquivo já deve existir. Se o arquivo existe, ele é aberto. Se o arquivo não existe,
ocorre um erro de entrada/saída.
‘NEW’ O arquivo não deve existir. Se o arquivo não existe, ele é criado. Se o arquivo
existe, ocorre um erro de entrada/saída.
‘SCRATCH’ Se for omitido o parâmetro FILE quando é aberto um arquivo, o valor padrão
do parâmetro STATUS é ‘SCRATCH’. Arquivos Scratch são temporários e são apagados
após a execução do programa.
‘REPLACE’ O arquivo aberto substitui um com o mesmo nome. Caso não exista nenhum
arquivo com o mesmo nome, um novo arquivo é criado.
‘UNKNOWN’ O valor do padrão do parâmetro STATUS é UNKNOWN. Inicialmente é
observado se o arquivo aberto já existe, isto é, status=‘OLD’, caso contrário cria-se um
novo arquivo status=’NEW’. Em síntese, se o arquivo existe ele é aberto, se não existe ele é
criado.

EXEMPLOS
i)- Criação de um novo arquivo para armazenar dados dos vetores X e Y.
Character*12 nome
Integer n
Parameter (n=10)
Real*4 x(n),y(n)
Print '(3x,A\)','Entre com o nome do arquivo = '
read(*,*) nome
print '(3x,A\)','Entre com o numero de dados = '
read(*,*) n
do i=1,n
print 10, i
read(*,*) x(i)
print 20, i
read(*,*) y(i)
34
end do
open(unit=5,file=nome,status=’NEW’)
write(5,’(i3)’) n
do i=1,n
write(5,30) x(i),y(i)
end do
close(5)
10 format(3x,’x( ‘,i2,’) = ‘,\)
20 format(3x,’y( ‘,i2,’) = ‘,\)
30 format(3x,e10.4,3x,e10.4)
end

OBS: Como no exemplo (i) foi criado um novo arquivo, o valor do parâmetro STATUS
referente ao comando OPEN é igual a ‘NEW’.

ii)- Leitura dos valores dos vetores X e Y armazenados no arquivo do exemplo (i).
Character*12 nome
Integer n
Parameter (n=10)
Real*4 x(n),y(n)
Print '(3x,A\)','Entre com o nome do arquivo = '
read(*,*) nome
open(unit=4,file=nome,status=’OLD’)
read(4,’(i3)’) n
do i=1,n
read(4,30) x(i),y(i)
end do
close(4)
30 format(3x,e10.4,3x,e10.4)
end
OBS: Como no exemplo (ii) o arquivo já existia, o valor do parâmetro STATUS referente ao
comando OPEN é igual a ‘OLD’.

iii)- Armazenamento dos valores dos vetores X e Y em um arquivo já existente.


Desejamos armazenar novos valores das variáveis X e Y no arquivo DADOS.DAD já
existente, neste caso a sintaxe do comando OPEN é a seguinte:
open(unit=8,access='append',file=’dados.dad’, status='old')
OBS: Se o arquivo DADOS.DAD já existe, para que as informações contidas neste arquivo
não sejam perdidas, é necessário que o valor do parâmetro ACCESS no comando OPEN seja igual
a ‘APPEND’.

7-2 COMANDO CLOSE

35
O comando CLOSE desconecta uma unidade específica, especificando se o arquivo é para
ser guardado ou liberado. A forma simplificada deste comando é a seguinte:
CLOSE (UNIT=u,[status = s])
u Número inteiro maior ou igual a zero, este parâmetro deve estar associado a um arquivo
utilizado anteriormente com o comando OPEN.
S ‘KEEP’ Valor padrão do parâmetro STATUS, especifica que o arquivo deve ser mantido
após a execução do comando CLOSE.
‘DELETE’ Especifica que o arquivo deve ser apagado após a execução do comando
CLOSE.

EXEMPLOS
i)- CLOSE(9)
ii)- CLOSE(4,STATUS=’DELETE’)

ATIVIDADES
i)- Desenvolva um programa computacional que obtenha as seguintes informações: nome da
substância, peso molecular, temperatura crítica, pressão crítica e fator acêntrico., a partir de um
arquivo externo
DADOS PARA A MONTAGEM DO BANCO DE DADOS:
Substância Peso molecular Tc(K) Pc(Mpa) Fator acêntrico
Amônia 17,031 405,5 11,35 0,250
Argônio 39,948 150,8 4,87 0,001
Bromo 159,808 588,0 10,30 0,108
Nitrogênio 28,013 126,2 3,39 0,039
Água 18,015 647,3 22,12 0,344
Tetracloreto de carbono 153,823 556,4 4,56 0,193
Etano 30,070 305,4 4,88 0,099
Álcool Etílico 46,069 513,9 6,14 0,644
Dióxido de carbono 44,010 304,1 7,38 0,239

8 - COMANDO INCLUDE
O comando INCLUDE insere o conteúdo de um arquivo texto específico na posição em que
estiver escrito o comando INCLUDE.
INCLUDE ‘nome do arquivo’
Nome do arquivo O conteúdo deste arquivo deve apresentar apenas declarações na linguagem
FORTRAN, pode-se acrescentar a descrição da localização do arquivo (path).
EXEMPLO:
36
Se o arquivo FILE01.INC, contêm as seguintes informações:
Real*8 Z,X
Integer n,k
Character*20 nome
COMMON /Bloco2/z,x,/bl3/n,k,nome
Então no programa principal, ou em subprograma podemos utilizar o comando INCLUDE.
Real*4 a
Include ‘file01.inc’
Resultado: neste exemplo o conteúdo (seqüência de comandos FORTRAN) do arquivo
FILE01.INC é acrescentado ao programa principal ou subprograma. Utiliza-se o comando
INCLUDE principalmente quando existe uma série de comandos que se repetem nos subprogramas.

PROJETO FINAL DO CURSO


Desenvolver um programa computacional para o cálculo do fator de compressibilidade e do volume
específico utilizando a equação de Peng-Robinson.
RT a
P  , onde:
V  b V( V  b)  b( V  b)

R 2 Tc2 RT
a  0,45724 2
e b  0,007780 c
Pc Pc

 
  1   1  Tr  2
e   0,37464  1.54226  0,269922

Z3  1  BZ2  A  2B  3B2 Z  AB  B2  B3   0


aP bP
A 2 2
e B
R T RT
DADOS DE ENTRADA:
- M, Tc, Pc e  devem ser lidos através de um banco de dados, na qual o usuário seleciona a
substância e então são obtidos os valores correspondentes de T c, Pc e  .
- Temperatura e pressão.
CÁLCULO DE Z
- No cálculo do fator de compressibilidade utilize o método de Newton-Raphson.

DADOS DE SAÍDA
- Nome da substância, Tc, Pc ,  , temperatura, pressão, fator de compressibilidade e volume
específico (m3/Kg)
NOTAÇÃO:
Tc - Temperatura crítica.
T - Temperatura do gás.

37
Pc - Pressão crítica.
P - Pressão.
 - Fator acêntrico.
Z - Fator de compressibilidade.
V - Volume específico.
R - Constante do gases ideais
Tr - Temperatura reduzida: (T/Tc)

38

Você também pode gostar