Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Apostila Fortran, Notas de estudo de Engenharia Mecânica

- - - - - - -

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 07/11/2008

joao-paulo-de-paula-almeida-3
joao-paulo-de-paula-almeida-3 🇧🇷

5

(2)

6 documentos

1 / 44

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
G
Gu
ui
ia
a
b
bá
ás
si
ic
co
o
d
de
e
p
pr
ro
og
gr
ra
am
ma
aç
çã
ão
o
e
em
m
l
li
in
ng
gu
ua
ag
ge
em
m
F
Fo
or
rt
tr
ra
an
n
7
77
7
e
e
9
90
0
H
He
el
ld
de
er
r
P
Pe
er
re
ei
ir
ra
a
C
Cr
ri
is
st
to
o
B
Be
el
lo
o
H
Ho
or
ri
iz
zo
on
nt
te
e
J
Ju
un
nh
ho
o/
/2
20
00
03
3
P
Pr
ro
og
gr
ra
am
ma
aç
çã
ão
o
e
em
m
L
Li
in
ng
gu
ua
ag
ge
em
m
F
FO
OR
RT
TR
RA
AN
N
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c

Pré-visualização parcial do texto

Baixe Apostila Fortran e outras Notas de estudo em PDF para Engenharia Mecânica, somente na Docsity!

GuGuiiaa bbáássiiccoo ddee

prprooggrraammaaççããoo eemm

lliinngguuaaggeemm

FFoorrttrraann 7^77 7 ee 9^900

HHeellddeerr PPeerreeiirraa CCrriissttoo

BBeelloo HHoorriizzoonnttee

JuJunnhhoo//2 2000033

Pr Prooggrraammaaççããoo

emem LLiinngguuaaggeemm

FOFORRTTRRAANN

ÍNDICE

Capítulo 1: Conceitos da Linguagem

1. Introdução

Em FORTRAN existem basicamente duas formas de se escrever um programa: com formulário fixo (‘ fixed form’ ) ou com formulário livre (‘ free form ’). Sendo este segundo disponível apenas para os compiladores mais novos que suportam a programação em FORTRAN 90. Outro ponto importante é que existem comandos válidos somente para estes novos compiladores (por exemplo Microsoft Developer Studio) que aceitam programas em FORTRAN

  1. Algumas versões dos compliladores baseados em FORTRAN 77 aceitam funções ou comandos criados posteriormente a essa versão, mas não aceitam todas as inovações dos compiladores de FORTRAN 90. Para as explicações ficarem mais claras a seguinte nomenclatura será utilizada:
  • tópicos precedidos da identificação N77 só são validos para compiladores novos, mas que não aceitam a programação em FORTRAN 90;
  • tópicos precedidos de F90 são válidos apenas para os compiladores que aceitam comandos FORTRAN 90. Deve ficar claro que compiladores para FORTRAN 90 aceitam também os outros dois tipos, e os baseados em FORTRAN N77 aceitam todos os comandos dos compiladores mais antigos (FORTRAN 77), e que a recíproca não é verdadeira.

Os programas podem ser escritos em qualquer editor de texto, desde que sejam salvos com as extensões .for ou .f90. Esta segunda forma somente para F90. Os compiladores em N77 e F90 possuem um editor próprio; que deve ser usado, pois possui muitos recursos adicionais, como por exemplo o destaque das palavras chaves e identificações mais claras dos erros de compilação, o que facilita muita a detecção de falhas na criação dos programas.

2. Formatação

A formatação dos códigos em FORTRAN, principalmente em formato fixo deve seguir um estilo diferente dos usados na maioria das linguagens de programação. Estes conceitos iniciais podem não ficar claro para os iniciantes na linguagem, estes leitores podem observar o exemplo no final do item 8 (Leitura e impressão) para ter maior clareza da disposição dos comandos em FORTRAN.

Os seguintes critérios devem ser seguidos para se escrever um programa em FORTRAN no modo de formulário fixo:

  • colunas 1 a 5 : são usadas para escrever os rótulos ‘ label ’ ou números de comando. Estes números devem ser inteiros e estar totalmente contido nestas colunas. Não podem se repetir e não precisam estar em ordem crescente. Serão usados para que outros comandos possam identificar aquela linha;
  • coluna 6 : qualquer caractere diferente de 0 “zero” nesta coluna indica que o que vem a seguir é continuação da linha anterior ou da ultima linha que não seja um comentário (próximo item, conceitos básicos). Um mesmo comando pode estar dividido em até 19 linhas de código. Entre as linhas do comando pode haver linhas em branco ou comentários;
  • colunas 7 a 72 : comandos ou comentários;
  • colunas 73 a 80 : campos de identificação, são usados pelo compilador, portanto não se deve escrever nestas colunas.

F90 – O programa pode ser escrito em qualquer posição, desde que o modo formulário livre esteja ativado. Alguns pontos devem ser observados para este formato:

  • as linhas de continuação são indicadas pelo símbolo ‘&’ no fim da sentença, e a próxima linha abaixo que não seja um comentário será tomada como continuação. Deixe sempre um espaço entre os comandos e o símbolo de continuação. É permitida a inserção de comentários após o ‘&’;
  • os rótulos devem ser os primeiros caracteres da linha, e podem estar em qualquer coluna.

3. Conceitos Básicos

Nesta seção serão apresentados outros conceitos importantes para a construção de programas em FORTRAN.

  • Comentários: não são interpretados pelo computador, um bom programa deve conter muitos para que fique o mais claro possível principalmente para quem vai analisá-lo. Em FORTRAN a letra ‘c’ ou o caractere ‘*’ na primeira coluna indica que toda a linha é um comentário. Alguns compiladores aceitam o uso de qualquer caractere diferente de números para iniciar a linha de comentário. Na linha de comentário é permitido o uso de qualquer caractere, especial ou não.

N77 – o ponto de exclamação ‘!’ indica que o que vem após ele é comentário, ele pode vir em qualquer posição, inclusive após os comandos.

Esta forma de declaração implícita pode ser modificada usando o comando ‘implicit

tipo (a1-a2,b1-b2,...)’ sendo a1, a2, b1, b2 quaisquer letras do alfabeto. A vírgula separa os intervalos de letras e o sinal – determina o intervalo. As letras que não estiverem em nenhum dos intervalos terá o seu tipo dado pela declaração implícita. O comando seguinte indica que as variáveis que começam com as letras a, b, c e de r até z são do tipo TIPO1.

implicit TIPO1 (a, b, c, r-z)

os espaços são usados para dar clareza e são ignorados pelo compilador. Quando não se deseja que nenhuma variável seja declarada implicitamente usa-se o comando ‘implicit none’. Se este comando for usado e uma variável citada no programa não estiver em nenhuma outra declaração o complilador acusará um erro.

Para se declarar variáveis que sejam matrizes e vetores deve-se indicar suas dimensões logo após o nome da variável; entre parênteses, e separadas umas das outras por vírgula. Ex.: a(4,3) indica uma matriz ‘a’ de 4 linhas por 3 colunas.

As variáveis podem receber valores iniciais usando ‘/valor/’, logo após sua declaração. No caso de vetores e matrizes devem ser dados os valores para todos os elementos de cada linha em seqüência.

Tipos de Variáveis

Inteiras (INTEGER)

Podem assumir os seguintes valores:

INTEGER*1 –128 a 127

INTEGER*2 –32,768 a 32,

INTEGER*4 –2,147,483,648 a 2,147,483,

INTEGER*4 pode ser representado somente por: INTEGER

integer d! a variável d é inteira do tipo * integer*1 a, b, c! a, b e c são inteiras do tipo *

integer a/6/, b(2,2)/0,1,2,3/! a = 6

! b = 

Os números após o * indicam quantos bytes a variável ocupa na memória do computador. Esta observação é válida para todos os tipos de variáveis.

Reais (REAL)

Precisão simples, 6 casas decimais (padrão):

REAL*4 ou REAL `3.402823E+

Incremento mínimo de `1.175494E-

Precisão dupla, 15 casas decimais (padrão):

REAL*8 ou DOBLE PRECISION `1.797693134862316D+

Incremento mínimo de `2.225073858507201D-

A parte exponencial deve ser separada por um ‘d’ ou ’D’ no lugar do ‘e’ ou ‘E’ para real do tipo *8.

N77 – podem ser usados o ‘e’ ou ‘E’ para separar a parte exponencial. Não só isso mas também todas as outras funções (item 6 Funções intrínsecas) podem ser iguais a de um real, não sendo necessário o uso de funções especiais para este tipo de valor.

implict real(a-z)! todas as variáveis são reais integer d! a variável d é inteira mesmo com a ! declaração acima

Complexas (COMPLEX)

Precisão simples, 6 casas decimais:

COMPLEX*8 ou COMPLEX

Precisão dupla, 15 casas decimais:

COMPLEX*

Os valores que um complexo pode assumir são os mesmos que os reais.

complex c/(4.,.3)/! c vale 4,0 reais e 0,3 imaginários

Alfanuméricas (CHARACTER)

CHARACTER NOME*w

Onde w representa o número máximo de caracteres que a variável pode conter dentro do programa.

Ou CHARACTER *wvar1,var

(var1 e var2 possuem o mesmo tamanho w)

Operadores Aritméticos

Executam operações aritméticas comuns. FORTRAN Matemática Tradicional Significado

    • soma
    • Subtração

* × Multiplicação

/ ÷ Divisão

** ap^ Potenciação

Quando uma variável inteira recebe o resultado de uma divisão com resto, este resto é desprezado ou seja o valor é truncado.

C = A2 + B2! c = a^2 + b^2 D = E**(1/2)! d = e1/

Operadores Relacionais

Comparam variáveis, constantes ou expressões e retornam ‘.TRUE.’, ‘T’ ou ‘1’ se a comparação for verdadeira, ‘.FALSE.’, ‘F’ ou ‘0’ se a comparação for falsa.

FORTRAN F90 Matemática Tradicional Significado .LT. < < MENOR QUE

.LE. <= ≤ MENOR OU IGUAL QUE

.EQ. == = IGUAL A

.NE. /= ≠ DIFERENTE DE

.GT. > > MAIOR QUE

.GE. >= ≥ MAIOR OU IGUAL QUE

20 .ne. 30! verdadeiro 1000 .lt. 500! falso

Operadores Lógicos

São usados quando são necessárias mais de uma condição relacional ou quando é preciso inverter seu resultado.

FORTRAN Significado .AND. Junção – verdadeiro se os dois operadoresforem verdadeiros .OR. Disjunção – verdadeiro se um dos doisoperadores forem verdadeiro .NOT. Negação – verdadeiro se o operador for falso .NEQV. ou .XOR. (^) somente um dos operadores for verdadeiroDesigualdade Lógica – verdadeiro se .EQV. Igualdade Lógica – verdadeiro se os doisoperadores forem falsos ou verdadeiros

10.GT.5 .AND. 20.GT.25! .FALSE. ou 0 10.GT.5 .OR. 20.GT.25! .TRUE. ou 1 .NOT. 20.GT.25! .TRUE. ou 1 10 > 5 .XOR. 20 >= 25! .TRUE. ou 1

10.GT.5 .NEQV. 25.GT.20! .FALSE. ou 0 10 < 5 .EQV. 20 <= 25! .TRUE. ou 1 10.LT.5 .EQV. 25.GT.20! .FALSE. ou 0

Prioridade

FORTRAN usa a seguinte relação de prioridades: Operador Prioridade ** 1ª

  • 2ª / 2ª
  • 3ª .EQ. 4ª .NE. 4ª .GT. 4ª .GE. 4ª .LT. 4ª .LE. 4ª .NOT. 5ª .AND. 6ª .OR. 7ª

O uso de parênteses pode ser feito para trocar a ordem de prioridade.

(20.GT.10 .AND. 20.GT.25).OR.(10.LT.20 .AND. 10.LT.(3*10)) ! .TRUE.

6. Funções Intrínsecas

Existem várias funções predefinidas em FORTRAN, que podem ser usadas em qualquer parte do programa.

Funções Trigonométricas

Nome Definição Tipo de Argumento Tipo da Função SIN (x) seno (radianos). Se x for complexo, a parte real é assumida como valor em radianos.

Real ou complexo. REAL* ASIN (x) Arcoseno (radianos). Retorna valores na faixa [- _/2, _/2 ]

Real, |x| .le. 1 REAL* COS (x) Coseno (radianos) Se x for complexo, a parte real é assumida como valor em radianos.

Real ou complexo REAL* ACOS (x) Arcocoseno (radianos) ) Retorna valores na faixa [ 0, _ ]

Real, |x| .le. 1 REAL* TAN (x) Tangente (radianos) Real REAL* ATAN (x) Arcotangente (radianos). Retorna valores na faixa [-_/2, _/2 ]

Real REAL* SINH (x) Seno Hiperbólico (radianos) Real REAL* COSH (x) Coseno Hiperbólico (radianos) Real REAL* TANH (x) Tangente Hiperbólica (radianos) Real REAL*

diferença de que agora é o programador que define o que a função deve gerar como resultado. O tipo da função deve ser declarado no programa principal, como se fosse uma variável comum. Uma função pode utilizar outras funções.

Chamada:

nome_da_função(lista_de_parâmetros)

Definição:

function nome_da_função(lista_de_parâmetros) definição e declaração das variáveis e constantes locais seqüência de comandos return end A palavra chave ‘ return ’ é opcional, pode aparecer em qualquer ponto e mais de uma vez. Ela indica que o comando deve retornar ao programa principal ou à função ou subrotina que a chamou.

A função retornará o valor do ultimo comando do tipo:

nome_da_função = expressão

Exemplo:

volume = gas_ideal(T,P,3)! volume recebe o valor gerado pela ! função gas_ideal

function gas_ideal(temp,press,n_mols) implicit none real temp,press,n_mols,gas_ideal gas_ideal = n_mols8.314temp/press return end

Subrotinas

Não retornam nenhum valor, e também a elas podem ser passados qualquer número de parâmetros inclusive nenhum. As subrotinas podem conter quaisquer tipos de comandos como imprimir resultados, abrir arquivos (estes serão vistos à frente, próximo item Leitura e Impressão) ou executar cálculos. Como ocorrem com as funções, as subrotinas podem ‘chamar’ outras subrotinas ou funções.

Chamada:

call nome_da_subrotina (lista_de_parâmetros)

Definição:

subroutine nome_da_subrotina (lista_de_parâmetros) definição e declaração das variáveis e constantes locais seqüência de comandos return end A palavra chave ‘ return ’ é opcional.

Exemplo:

call converte_unidades! chama a subrotina para converter as ! unidades subroutine converte_unidades implicit none real temp,press,n_mols,gas_ideal T = temp + 273. P = press* volume = gas_ideal(T,P,3)! chama a função com os valores ! corrigidos de T e P end

8. Leitura e Impressão

Na maior parte dos programas é preciso haver uma interação entre o programa e o usuário. Essa interação pode ser feita em FORTRAN pelos comandos de leitura e escrita de dados. Esses comandos na sua forma mais simplificada possuem a seguinte estrutura:

leitura :

read (unidade, formato) lista_de_parâmetros

impressão:

write (unidade, formato) lista_de_parâmetros

ou

print formato, lista_de_parâmetros

Onde ‘ lista_de_parâmetros ’ representa os dados que serão impressos, e devem vir separados por vírgula. Podendo conter variáveis ou expressões alfanuméricas, estas últimas devem vir entre apóstrofos ‘ ‘. ‘ unidade ’ representa a unidade onde os dados serão impressos ou de onde serão lidos; tela, teclado, impressora ou arquivo. ‘ formato ’ pode conter uma lista de formatos de impressão (próximo item, Formatos), um rótulo que indique um comando

O FORTRAN não considera a primeira coluna da unidade de leitura e impressão quando a saída ou entrada é formatada, por isso deve-se incluir uma casa de impressão em branco a mais para dados. Para formato livre não é necessário pois o FORTRAN os posiciona automaticamente.

Quando mais de um dado usar a mesma especificação, ela pode ser feita da seguinte forma: n especificação1, n2 especificação2 ou n (especificação1, especificação2, ...) , onde n e n2 representam o número de vezes que a especificação ou seqüência de especificações deve se repetir.

Caso o número de especificações seja menor que o de variáveis a serem lidas ou impressas, a ultima especificação ou a ultima seqüência, caso seja usado o recurso n(especificação1, especificação2, ...) , será repetida até que se complete o número necessário. Isto não é valido para constantes inclusas nos comandos de leitura e impressão.

Quando o número de especificações é maior que os de dados a serem impressos as ultimas serão desprezadas.

A forma de se declarar os formatos é a seguinte:

r format (especificação1, especificação2, ...)

onde r é um numero inteiro, e representa o rótulo do ‘ format ’. Um mesmo ‘ format ’ pode ser usado por vários comandos de escrita e leitura.

10 format (2x,a,I)! imprime 2 espaços em branco, uma ! string e um valor inteiro

N77 – o formato pode vir entre apóstrofos e parênteses ‘ (esp.1, esp2,..) ’, dentro do próprio comando de impressão ou leitura.

print ‘(esp.)’, var write (, ‘(esp.1,esp.2)’) var1,var read (, ‘(esp.1,esp.2)’) var1,var

As strings devem vir entre apóstrofos duplos (‘’string’’) nesse formato.

Formato Uso Iw[.m] Valores Inteiros Fw.d Valores Reais Ew.d[Ee] Valores Reais com expoente Gw.d[Ee] Mesmo que Iw[.m], Ew.d[Ee], Lw e A[w] Dw.d Valores Reais de Dupla Precisão Lw Valores Lógicos A[w] Seqüência de Caracteres N77 Zw_hexedit Valores Hexadecimais F90 B w [. m ] (^) Valores Binários F90 O w [. m ] Valores Octadecimais F90 EN w.d [E e ] (^) Valores Reais em Notação de Engenharia F90 ES w.d [E e ] Valores Reais em Notação Cientifica ‘w’ representa o tamanho do campo a ser impresso ou lido, ‘m’ representa o número de zeros que virá antes do número, ‘d’ o número de casas decimais e ‘e’ o número de casas para o expoente.

O ponto decimal, o ‘e’ do expoente e o sinal ‘-‘ devem ser contados ao se dar o tamanho do campo (‘w’). Ao ler um dado que não possui ponto decimal e no seu formato é esperado um, o compilador lerá este dado como se lá houvesse um ponto.

12345 read (*,’(f5.3)’) a => a = 12.

Quando o ponto existe mas não está na posição especificada, a sua posição original é mantida.

read (*,’(f5.4)’) a => a = 12.

A notação com zeros ‘m’ só é válida quando m é maior que o número de casas que o número ocuparia no formato livre.

a = 555 print ‘(i5.4)’,a => 0555

Nas notações com expoente (EN w.d [E e ], ES w.d [E e ], ...) não se pode omitir o ‘E’ ou ‘e’. Sempre que houver este termo, a parte exponencial vai existir independente do seu valor.

a = 12. b = 12345.789e write (*,1) a,b 1 format (‘ a=’,e10.4e3, ‘ e b=’,e10.4e3) => a=.1235E+002 e b=.1235E+

Caso as strings sejam maiores que o espaço reservado a elas, serão tomados apenas os w primeiros caracteres. Se forem menores, elas serão alinhadas a direita e os outros espaços deixados em branco.

produz o seguinte resultado:

+.240E+02 +55.800E-

hoje e Segunda-

10. Arquivos

Quando se deseja trabalhar com grandes quantidades de dados, o melhor é armazená- los numa unidade de memória secundária, ou seja em arquivos. Um programa pode gerar tantos dados que todos eles não caberiam na tela de uma só vez, e ainda seriam perdidos ao finalizar o programa. Os dados salvos em arquivos podem ser usados pelo próprio programa ou exportados para serem processados de outra forma. Arquivos de leitura economizam um tempo precioso para o usuário do programa pois ele não vai precisar enviar dados via teclado, e com arquivos milhares de dados podem ser lidos em frações de segundos.

O primeiro passo para se usar arquivos em FORTRAN é indicar ao programa qual é o nome do arquivo e o número da unidade referente a ele.

open (unidade, file= ’nome.ext’)

onde unidade deve ser um inteiro maior ou igual a zero, e é uma referência a este arquivo. O número da unidade deve vir no comando ‘ read ’ ou ‘ write ’ indicando que os dados serão retirados ou armazenados nesta unidade. A disposição dos dados em arquivos é a mesma utilizada nas unidades de entrada e saída padrão (Item 8, Leitura e Impressão), com uma única diferença, as strings devem vir entre apóstrofos ‘ ‘. A abertura do arquivo pode ser feita em qualquer parte do programa (inclusive dentro de funções e subrotinas), desde que venha antes de um comando que o utilize.

F90 – o rótulo ‘unidade’ pode ser uma string.

Outras opções para abertura e fechamento de arquivos podem ser encontradas no Anexo B.

Apesar de se poder usar qualquer extensão de arquivo ou até omiti-la, as extensões .dat para leitura e .out para saída são mais comumente encontradas.

Quando não for utilizado o comando ‘ open ’, alguns compiladores emitirão uma mensagem na tela pedindo um nome, podendo o usuário escolher um nome diferente a cada vez que o programa for executado. Em outros compiladores serão dados nomes padrão como fort.1, fort.2, etc para cada arquivo utilizado que não foi aberto. Todos os arquivos devem estar

ou serão criados no mesmo diretório em que estiver o programa a menos que se dê como nome o caminho para um outro diretório. Os caminhos seguem o mesmo padrão do DOS.

Um arquivo pode também ser fechado, isto fará com que o FORTRAN coloque uma marca de fim de arquivo naquele ponto, esta marca pode ser identificada por outro comando ou função (Anexos A e B).

close (unidade, status= ’estado’)

ou

endfile unidade

onde status=’estado’ é opcional. Estado pode ser ‘ keep ’ que mantém o arquivo na memória (este é padrão esta opção é omitida), ou ‘delete’ que apaga o arquivo da memória.

Arquivos fechados podem ser reabertos em qualquer parte do programa.

Outros Recursos

rewind unidade (volta o controle ao primeiro espaço do arquivo)

backspace unidade (volta o controle um campo no arquivo)

Programa Arquivo ‘arqui.dat’ ' Química' ' Física' ' Engenharia' Arquivo ‘arqui.out’

character 15a,b,c open(20,file='arqui.out') open(30,file='arqui.dat') read (30,) a write(20,) ' este é um ' write(20,) ' arquivo de ' write(20,) ' saída ' read (30,) b rewind 30 read (30,) c write(20,) a write(20,*) b,c end

este é um arquivo de saída Química Engenharia Química