Fortran

Propaganda
PROGRAMAÇÃO DE
COMPUTADORES
NOÇÕES DE
FORTRAN
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.
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 sobres 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.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?
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
a.AND.b
lógica
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
a.EQV.b
Lógica
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
a.NEQV.b
Não equivalência lógica de a com b: se a
equivalência
e b são ambos verdade ou ambos falsos,
lógica
então a.EQV.b é falso, caso contrário é
verdade.
EXEMPLO:
0A10
Se desejarmos testar se o valor da variável A satisfaz a inequação: , na linguagem FORTRAN
devemos utilizar:
0.LE.A.AND.A.GT.10
II - COMANDOS PARA DECLARAÇÃO DOS TIPOS DE VARIÁVEIS
2.1 - INTEGER
INTEGER é usado para declarar, explicitamente, um nome de variável, conjunto de
variáveis, constante simbólica, como sendo do tipo inteiro.
Sintaxe:
Exemplo: INTEGER a,b,c,d(10)
2.2 - COMANDO REAL
O comando REAL é usado para declarar, explicitamente, um nome de variável, conjunto de
variáveis, constante simbólica como sendo do tipo real.
Exemplo: REAL a,b,c,d(10)
2.3 - COMANDO CHARACTER
O comando CHARACTER é usado para declarar, explicitamente, um nome de variável,
conjunto de variáveis, constante simbólica, como sendo do tipo alfa-numérica
Sintaxe:
CHARACTER <VARIÁVEL>[*s]
S
Número de caracteres, deve ser um número inteiro positivo.
Exemplo: CHARACTER N1*10, N2*20, C*30
2.4 - 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).
EXEMPLO: LOGICAL 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 e a
variável A é do tipo REAL, 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 devemos
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
FLOAT(var)
INT(var)
10
REAL A
INTEGER C
A = 2.64
C = INT(A)
PRINT 10,C
FORMAT(3X,'VALOR DE C = ',I2)
STOP
END
Integer
Real
Real*4
Integer*4
III - COMANDOS PARA DE ENTRADA SAÍDA
3.1 - COMANDO WRITE
O comando WRITE é usado para transferir dados para 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, 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
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, 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, 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 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. 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
(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:
Conversão de dados inteiros decimais
[a] Iw
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.
[a] Fw.d
a
Conversão de dados reais sem expoentes
É 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
a
Conversão de dados reais com expoente de simples precisão.
É 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
a
Conversão de dados reais com expoente de dupla precisão.
É 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] 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
IV- COMANDOS
4 .1 - COMANDO IF (SELEÇÃO)
O comando IF transfere 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. O comando IF , executa condicionalmente, blocos ou
grupos de comandos executáveis.
If(e1) THEN
Bloco (1)
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 = Raízes distintas'
ELSE
IF(DELTA.EQ.0.) THEN
X1 = -B/(2.0*A)
X2 = X1
AR = Raízes repetidas'
ENDIF
ELSE
AR = Raízes complexas'
END IF
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 <LABEL> <VAR>=nstart, nend[,step]
<COMANDOS>
<LABEL>
END DO
<LABEL>
Valor inteiro contido entre 1 e 9999
<VAR>
É 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 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +10
S=0
DO 400 J=1,10,1
S=S+J
END DO
400
4.3 - COMANDO DO WHILE (ENQUANTO)
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 <LABEL> WHILE (expressão lógica)
<COMANDOS>
END DO
Enquanto a expressão lógica for verdadeira a seqüência de comandos representada pelo
<COMANDOS> é executada.
EXEMPLO: se desejarmos que seja apresentado, todos os valores da variável K, a qual
pode assumir os seguintes 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
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.
Download