Buscar

Apostila Fortran

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

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. 
 2 
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. 
 3 
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 ? 
 
 4 
OPERADORES LÓGICOS 
Operador Definição Uso do Operador Significado 
.NOT. Negação 
Lógica 
.NOT.a Complemento de a: se a é verdade, então .NOT.a 
é falso, se a é falso então .NOT.a. é verdade. 
.AND. Conjunção 
lógica 
a.AND.b Produto Booleano de a por b: se a e b são 
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 
Inclusivo 
lógica 
a.OR.b Soma Booleana de a com b: se a ou b ou ambos 
são verdade, então a.OR.b é verdade; se a e b são 
falsos, então a.OR.b é falso. 
.EQV. Equivalência 
Lógica 
a.EQV.b Equivalência lógica de a com b: se a e b são 
ambos verdade ou ambos falsos, então a.EQV.b é 
verdade, caso contrário é falso. 
.NEQV. Não 
equivalência 
lógica 
a.NEQV.b Não equivalência lógica de a com b: se a e b são 
ambos verdade ou ambos falsos, então a.EQV.b é 
falso, caso contrário é verdade. 
 
EXEMPLOS 
Se desejarmos testar se o valor da variável A satisfaz a inequação: 
100  A
, 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 
 5 
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) 
 6 
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 
 7 
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 
 
 8 
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 
 9 
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. 
 
 10 
 
[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. 
 
 11 
 
[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 
 12 
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 
Igual a zero 
Positiva 
Desvio o programa para a linha identificada com rótulo 40. 
Desvio o programa para a linha identificada com rótulo 60. 
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. 
 13 
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 
 
 14 
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 : 
)9(x)7(x)5(x)3(x)1(xs 
 
 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 
 
 15 
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 
4200n 
. 
O Bloco 2 é executado se a seguinte expressão (2) for verdadeira 
12000n4201 
. 
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. 
 
 16 
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. 
 17 
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 
 
 
 
 
 
 
 
 
10 
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 
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 
 18 
ASIN (x) Arcseno (radianos). Retorna com 
valor no intervalo [2, 2 ] 
Real, x  1 REAL*4 
ASIND (x) Arcseno (graus) Retorna com 
valor no intervalo [90, 90 ] 
Real, x  1 REAL*4 
DASIN (x) Arcseno (radianos) Retorna com 
valor no intervalo [2, 2 ] 
REAL*8 REAL*8 
DASIND (x) Arcseno (graus) Retorna com 
valor no intervalo [90, 90 ] 
REAL*8 REAL*8 
COS (x) Coseno (radianos). Se x é 
complexo, sua parte real é 
considerada como o valor em 
radianos. 
Real or complex REAL*4 
COSD (x) Coseno (graus). Se x é complexo, 
sua parte real é considerada 
como o valor em radianos. 
Real or complex REAL*4 
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 
com valor no intervalo [ 0,  ] 
Real, x  1 REAL*4 
ACOSD (x) Arco coseno (graus) Retorna com 
valor no intervalo [ 0, 180 ] 
Real, x  1 REAL*4 
DACOS (x) Arco coseno (radianos) Retorna 
com valor no intervalo [ 0,  ] 
REAL*8, x  1 REAL*8 
DACOSD (x) Arco coseno (graus) Retorna com 
valor no intervalo [ 0, 180 ] 
REAL*8, x  1 REAL*8 
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 
0. 
REAL*4 
DCOTAN (x) Cotangente (radianos) REAL*8. x não pode 
ser 0. 
REAL*8 
ATAN (x) Arco tangente (radianos). Retorna 
com valor no intervalo [2, 2 ] 
Real REAL*4 
ATAND (x) Arco tangente (graus). Retorna 
com valor no intervalo [90, 90 ] 
Real REAL*4 
DATAN (x) Arco tangente (radianos). Retorna 
com valor no intervalo [2, 2 ] 
REAL*8 REAL*8 
DATAND (x) Arco tangente (graus). Retorna 
com valor no intervalo [90, 90 ] 
REAL*8 REAL*8 
ATAN2 (y,x) Arco tangente (y / x) em radianos. 
Retorna com valor no intervalo 
[,  ] 
Real. x e y não 
podem ambos ser 0. 
REAL*4 
ATAN2D 
(y,x) 
Arco tangente (y / x) em graus. 
Retorna com valor no intervalo 
Real. x e y não 
podem ambos ser 0. 
REAL*4 
 19 
[180, 180 ] 
DATAN2 
(y,x) 
Arco tangente (y / x) em radianos. 
Retorna com valor no intervalo 
[,  ]) 
REAL*8 x e y não 
podem ambos ser 0. 
REAL*8 
DATAN2D 
(y,x)¤ 
Arco tangente (y / x) em graus. 
Retorna com valor no intervalo 
[180, 180 ] 
REAL*8 x e y não 
podem ambos ser 0. 
REAL*8 
 
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 
base e 
REAL*4 REAL*4 
CDLOG (x) Cálculo da função logarítmica na 
base e 
COMPLEX*16 COMPLEX*16 
CLOG (x) Cálculo da função logarítmica na 
base e 
COMPLEX*8 COMPLEX*8 
DLOG (x) Cálculo da função logarítmica na 
base e 
REAL*8 REAL*8 
LOG (x) Cálculo da função logarítmica na 
base e 
Real or complex Real or 
complex 
ALOG10 (x) Cálculo da função logarítmica na 
base 10 
REAL*4 REAL*4 
DLOG10 (x) Cálculo da função logarítmica na 
base 10 
REAL*8 REAL*8 
LOG10 (x) Cálculo da função logarítmica na 
base 10 
REAL*4 REAL*4 
 
EXEMPLO: Se desejarmos calcular as seguintes expressões matemáticas: 
)xln(y 
, 
alogv 
 e 
xez 
, 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) 
 20 
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 
 21 
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. 
i)- EXEMPLO: Suponha que desejamos resolver a seguinte expressão: 


n
1i
i
. 
 INTEGER FUNCTION SUM(N) 
INTEGER N 
SUM = 0 
DO I=1, N 
 SUM = SUM + I 
END DO 
RETURN 
END 
 22 
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. 
A equação de ANTOINE para este caso é 








CT
B
AexpP
, os valores das constantes 
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(cm
3
/gmol) , T(K) e R = 82,05 cm
3
 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)
23 
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 
 24 
PROGRAMA PRINCIPAL 
 
 
 
 
10 
 
 
20 
INTEGER NN 
REAL* 4 S 
EXTERNAL SOMA 
WRITE(*,10) 
FORMAT(3X,’Entre com o valor de n = ‘\) 
READ(*,*) N 
CALL SOMA(NN,S) 
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 
SUM 
INTEGER 
REAL*4 
CALL SOMA(NN,S) NN 
S 
INTEGER 
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: 
 25 
















h1
h
T
934,4
h1
1
Z
5,1
r
 , 
r
r
TZ
P0867,0
h 
, 
c
r
T
T
T 
 e
c
r
P
P
P 
. 
 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) 
Tol> Erro Z = Zn 
NÃO 
SIM 
Apresente o 
valor de Z 
 26 
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 
 
 
 
 
10 
 
 
 
20 
REAL*4 FAT 
INTEGER N 
PRINT 10 
FORMAT(3X,’Entre com o valor de n = ‘,\) 
READ(*,*) N 
CALL FATORIAL(N,FAT) 
PRINT 20, N,FAT 
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: 
0)x( 
 
)x('
)x(
xx
)n(
)n(
)n()1n(



 
onde: 
)n(x
 : valor de x na interação (n) 
 27 
)1n(x 
 : 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: 
Tolxx )n()1n( 
 
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: 
4x)xln()x( 
 
1
x
1
)x(' 
, com x
(1)
 = 2.0. 
 
N
o
 de 
iterações 
)n(x
 
)1n(x 
 
)x( )n(
 
)x( )1n( 
 Erro 
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 
matriz 

















n,n
n,2
n,1
3,n
3,2
3,1
2,n
2,2
2,1
1,n
1,2
1,1
nxn
a
a
a
a
a
a
a
a
a
a
a
a
A













, 
ou um vetor X com n elementos: 
 n321 xx,x,xX 
. 
Em ambos os casos é necessário reservar uma área de memória para estas variáveis. 
 28 
 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. 
 29 
 
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. 




















































n
3
2
1
n
3
2
1
n,n
n,3
n,2
n,1
1n,3
1n,2
1n,1
3,3
3,2
3,1
2,2
2,11,1
b
b
b
b
x
x
x
x
a
a
a
a
0
a
a
a
0
a
a
a
0
0
a
a
0
0
0
a






 
 De maneira sintética podemos escrever a seguinte equação: 
BAX 
, onde: 
















 


n,n
n,3
n,2
n,1
1n,3
1n,2
1n,1
3,3
3,2
3,1
2,2
2,11,1
nxn
a
a
a
a
0
a
a
a
0
a
a
a
0
0
a
a
0
0
0
a
A







, 

















n
3
2
1
x
x
x
x
X

 e 

















n
3
2
1
b
b
b
b
B

 
 O problema original consiste em encontrar os valores das variáveis X, tal que 
BAX 
, onde 
A é uma matriz triangular superior. 
Pode-se empregar o seguinte algoritmo para a resolução deste Problema: 
n,nnn a/bx 
 
 30 
Para 
1,1ni 
 temos: 
i,i
1i
nj
j,ijii a/axbx 







 


 
Apresentamos a seguir uma subprograma para a resolução de sistema de equações cuja 
matriz seja triangular superior: 
I 
 
 
C 
C 
C 
C 
C 
C 
C 
C 
C 
Subroutine resol_as(A,X,B,N) 
Integer n 
Real*4 a(n,n), X(n), B(n) 
 
 
 
----- resolucao de uma sistema de equacoes lineares: AX=B ------- 
----- onde a matriz A e triangular superior --------- 
A: Matriz dos coeficientes 
B: Vetor constante 
X: Vetor incógnita 
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: 
i)- Resolva o seguinte sistema de equações:









































4
4
5
1
x
x
x
x
4
2
4
2
0
1
1
2
0
0
1
2
0
0
0
1
4
3
2
1
 
Resultado:
)1,2,3,1(XT 
 
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 
1n,1k 
 
 31 
n,1ki 
 
k,kk,i a/am 
 
kii bmbb 
 
n,1kj 
 
j,kj,ij,i amaa 
 
Resolução do sistema (matriz triangular superior) 
n,nnn a/bx 
 
Para 
1,1ni 
 temos: 
i,i
1i
nj
j,ijii a/axbx 







 


 
 
 
OBS: Quando o elemento pivô da matriz dos coeficientes (
k,ka
) é nulo, não é possível 
aplicar o método da eliminação de Gauss (divisão por zero 
k,kk,i a/am 
). 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 
k,pa
 das linhas não escalonadas, tal que: 
k,jk,p aa 
.com 
n,kj 
 e trocar as linhas 
pk LL 
. 
EXEMPLO: 


















4
2
4
2
3
1
1
2
9
3
4
2
0
0
0
1
, neste caso 
2k 
. 
Neste caso observamos que 
2,j2,4 aa 
, para 
4,3,2j 
. Portanto deve-se trocar as linhas: 
42 LL 
, obtendo-se a seguinte matriz equivalente. 


















4
2
4
2
1
1
3
2
4
3
9
2
0
0
0
1
 
iii)- Desenvolva uma subrotina para a resolução de sistemas lineares utilizando o método da 
eliminação de Gauss com pivotação parcial. 
 32 
ALGORITMO DA PIVOTAÇÃO PARCIAL. 
ELEMENTO PIVÔ 
k,ka
 
k,kav 
 
kp 
 
n,1kr 
 
se 
k,rav 
, então: 
rp 
 
se 
kp 
, então: 
kbd 
 
pk bb 
 
dbp 
 
n,kj 
 
j,kac 
 
j,pj,k aa 
 
ca j,p 
 
 
Para testar o programa utilize o seguinte exemplo: 
6
2
12
8
x
x
x
x
13
11
30
13
13
41
12
21
4
3
2
1




































 
 4,3,2,1XT 
. 
 
 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 
 33 
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. 
 34 
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) 
 35 
 
 
 
 
 
 
 
10 
20 
30 
 
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) 
format(3x,’x( ‘,i2,’) = ‘,\) 
format(3x,’y( ‘,i2,’) = ‘,\) 
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). 
 
 
 
 
 
 
 
 
 
 
 
 
30 
 
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) 
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 
 36 
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: 
 37 
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.
)bV(b)bV(V
a
bV
RT
P





, onde: 
2
c
2
c
2
P
TR
45724,0a 
 e 
c
c
P
RT
007780,0b 
 
  2rT11 
 e 
226992,054226.137464,0 
 
      0BBABZB3B2AZB1Z 32223 
 
22 TR
aP
A 
 e 
RT
bP
B 
 
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 Tc, 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 (m
3
/Kg) 
NOTAÇÃO: 
Tc - Temperatura crítica. 
T - Temperatura do gás. 
 38 
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)

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando