Escolar Documentos
Profissional Documentos
Cultura Documentos
PROGRAMAÇÃO NA
LINGUAGEM FORTRAN
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
OPERADORES RELACIONAIS
Operador Definição Uso do Operador Significado
.EQ. Igual a a.EQ.b a=b?
.NE. Diferente de a.NE.b ab?
.LT. Menor que a.LT.b a<b?
.LE. Menor ou igual a.LE.b ab?
.GT. Maior que a.GT.b a>b?
.GE. Maior ou igual a.GE.b ab?
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. .
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
Exemplos:
a)- REAL*4 a,b,c,d(10)
b)- REAL*4 FUNCTION FZ(A,B)
REAL*4 A,B
c)- REAL A,Z
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
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
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
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
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
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 É 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 É 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.
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
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.
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
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.
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’
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.
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
FUNÇÕES TRIGONOMÉTRICAS
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
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
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
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.
22
EXEMPLO:
REAL*4 PVAP
EXTERNAL PVAP
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
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
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.
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 ( n1) x ( n ) Tol
EXEMPLO:
(x) ln( x) x 4
1
' ( x ) 1 , com x(1) = 2.0.
x
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.
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)
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.
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:
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
pk
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
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 .
EXEMPLOS
Real*4 a,b,c,n1,n2
Data a,b,c/1.2,3.4,4.12/,n1,n2/5,10/
32
C = 4.12
N1 = 5
N2 = 10
Real*8 Z,X
Integer n,k
Character*20 nome
COMMON /Bloco2/z,x,/bl3/n,k,nome
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’.
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.
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,269922
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