• Nenhum resultado encontrado

Instituto de Física Armando Dias Tavares Departamento de Física Aplicada e Termodinâmica

N/A
N/A
Protected

Academic year: 2019

Share "Instituto de Física Armando Dias Tavares Departamento de Física Aplicada e Termodinâmica"

Copied!
62
0
0

Texto

(1)

Departamento de Física Aplicada e Termodinâmica

Física Computacional A

DFAT/

FiscompFA

Expressões Numéricas

Professor: Anibal Leonardo Pereira última atualização: março 2011

Estagiários:

2004/1 a 2005/2

Luciana Conceição Iecker Lima

2010/1

Magali dos Santos Leodato

2009/1 a 2010/2

Filipe da Fonseca Cordovil

Monitores:

2001/1

Diego Chagas Garcia

2002/2

Erick Azevedo Meirelles

2003/1 a 2003/2

Luciana Maria dos Santos Azevedo

2003/1 a 2003/2

Tatiana Gonçalves Martins

2003/1 a 2005/2

Renato Nascente Júnior

2004/1 a 2005/2

Públio Martins Romano M. Carreiro

2006/1 a 2007/2

Luiz Fernando Rosalba Telles Souza

2006/1 a 2007/2

Paulo Henrique Pfitzner

2008/1 a 2008/2

Filipe da Fonseca Cordovil

2008/1 a 2009/2

Magali dos Santos Leodato

2011/1 a

Filipe da Fonseca Cordovil

1. Tipos de Dados no Fortran

A especificação de tipo (

tipo de dados

) num programa define:

um conjunto de valores

um meio para representar os valores

as operações que são possíveis de serem realizadas com eles

O Fortran 2003 possui 5

tipos de dados intrínsecos

que são divididos em duas classes: numérica e não

numérica.

Tipo numérico

inteiro

real

complexo

Tipo não numérico

caractere

lógico

intrínseco é o adjetivo que se aplica a tipo de dados, operações, instrução de atribuição e procedimentos (funções e sub-rotinas) que estão definidos no Fortran e podem ser utilizadas sem que se tenha que fazer alguma definição ou especificação adicional

(2)

Os subtipos (

kind

) mais utilizados com dados numéricos são os subtipos

precisão simples

e

precisão dupla

, que

são, essencialmente, caracterizados pelo número de bits que o computador utiliza para representar os números.

Precisão simples e precisão dupla dependem do tamanho da palavra do computador.

Muitos computadores pessoais ainda em uso, foram construídos com CPU's que utilizam palavras de 32 bits, mas a maioria dos computadores novos utilizam palavras de 64 bits. O computador de 64 bits que utiliza um software de 32 bits é considerado como sendo uma máquina de 32 bits.

Para o computador com palavra de 32 bits, a precisão simples usa 32 bits e a precisão dupla 64 bits. Para o computador com palavra de 64 bits, a precisão simples usa 64 bits e a precisão dupla 128 bits. Portanto a precisão é muito dependente do computador (do tamanho da palavra) onde o programa será executado. Por este motivo o Fortran disponibiliza uma forma de trabalhar que permite minimizar (em alguns casos isolar completamente) a influência desta característica. Como isto é feito será abordado posteriormente.

Os tamanhos das palavras utilizadas pelas CPU's dos computadores foram: 6-, 8-, 12-, 16-, 18-, 24-, 32-, 36-, 39-, 48-, 60- e 64-bit. Desde 2008 a CPU utilizada nos microcomputadores pessoais é da família x86-64 portanto capazes de trabalhar com palavras de 64-bits. Entretanto, quando o microcomputador utiliza um software escrito usando bits a CPU acaba sendo utilizada no modo 32-bits, e o microcomputador se comporta como se fosse de 32 bits não de 64 bits.

http://en.wikipedia.org/wiki/Integer_(computer_science) em 08/02/2011

Outro tipo de dado bastante útil (

este não é intrínseco

) que pode ser utilizado no Fortran é o dado

tipo derivado

.

O tipo derivado é um tipo de dado definido pelo usuário. Com o tipo derivado o usuário ficar responsável por

definir o tipo e também as operações que poderão ser utilizadas com o tipo que está definindo.

2. Constante Literal

Constante literal (

muitas vezes chamada somente de constante

) são os totens utilizados para representar os valores

de um tipo particular de dado, isto é, os caracteres que podem ser utilizados na sua representação.

Totem (em inglês: token) é um segmento de texto ou símbolo que é manipulado pelo compilador como uma entidade. É uma entidade (um conjunto de caracteres) que possuí algum tipo de significado.

2.1-Constante Literal Caractere

A constante literal caractere utiliza os caracteres disponíveis no conjunto de caracteres que o Fortran usa para

criar os totens desejados, isto é, as constantes. Exemplo: "Entre com um nome"

2.2-Constante Literal Inteira

A constante literal inteira é usada para representar os valores do tipo inteiro intrínseco. São números inteiros

com sinal. Exemplos:

34 -45 +1000 -976

Para a constante literal inteira o sinal positivo é opcional. O intervalo (

range

) para os inteiros é dependente do

tamanho da palava utilizada no computador:

palavra de 16 bits: – 32768 até +32767

palavra de

32 bits

: – 2147483648 até + 2147483647 (

precisão simples

)

palavra de

32 bits

: −9223372036854775808 até +9223372036854775807 (

precisão dupla

)

(3)

2.3-Constante Literal Real

Constante literal real é usada para representar os valores do tipo real intrínseco. Consiste de uma cadeia de

dígitos com um ponto decimal (

para nós seria a vírgula decimal

). São de dois tipos:

ponto fixo

e

ponto flutuante

.

Ponto fixo

:

podem ser com ou sem sinal.

Exemplos:

0.5 +3.67 –37.0 -0.78

O ponto decimal tem que (

é obrigatório

) aparecer na constante. Por clareza é sempre importante escrever o zero:

escreva

2.0

não

2.

escreva

0.5

não

.5

O sinal positivo é opcional. O intervalo (

range

) é dependente do tamanho da palava do computador.

Ponto flutuante

:

podem ser com ou sem sinal. Neste caso a letra

E

(

ou a letra minúscula

e

) tem que ser

utilizada.

Exemplos:

0.5E2

(= 500.0) →

0.5×10

2

2E2

(= 200.0) →

2

×

10

2

–37E-3

(= –0.037) →

−37×10

−3

O sinal positivo é opcional. Da mesma forma o intervalo (

range

) é dependente do tamanho da palava do

computador.

Não importa como o número real é escrito pelo usuário ou como ele é mostrado na tela do micro ou como ele é

lido ou escrito numa entrada ou saída formatada, na memória do computador ele é sempre guardado como ponto

flutuante (

definida pela IEEE 754 – Standard for Floating-Point Arithmetic, que o Fortran chama de número real

).

O Fortran pode identificar o tipo do número pela forma como ele é escrito. Então, o número

58

é um número

inteiro

enquanto

58.0

é um número

real

.

O intervalo (

range

) e a precisão do número real é definido pelo

parâmetro de subtipo

(

kind parameter

). Isto será

visto com detalhes posteriormente.

Para os computadores com palavra de 32 bits:

32 bits: de

10

38

até

10

38

(

precisão simples

)

32 bits: de

−10

308

até

10

308

(

precisão dupla

)

2.4-Constante Literal lógica

A constante literal lógica pode conter apenas dois valores: .true. e .false.

Assim mesmo, como está escrito. Utilizando-se o ponto inicial e o ponto final em cada uma delas. .true. – significa verdadeiro

.false. – significa falso

O Fortran quando mostra estes valores utiliza apenas as letras T e F

Os valores lógicos serão abordados e trabalhados futuramente.

3. Constante com Nome

A forma como usualmente empregamos o termo constante pode criar uma certa confusão.

(4)

É muito comum utilizar-se apenas o termo constantes para nos referirmos a estes dois tipos de constante. Daí a

confusão.

Constante literal

como o próprio nome diz, constante literal é uma constante que é escrita no programa, literalmente escrita no

programa. Pode ser numérica ou não numérica.

program ex1 implicit none real:: x, y, z x = 2.9

y = 7.0

z = 3*x +0.5/y print*,"z=",z end program ex1

Este programa utiliza quatro constantes literais numéricas:

3 que é uma constante do tipo inteiro

2.9, 7.0 e 0.5 são constantes do tipo real

são constantes literais, porque elas estão literalmente escrita no programa

Se um programa utiliza, por exemplo, a constante literal inteira 3 em muitos lugares diferentes no código fonte,

quando houver a necessidade de trocar o valor da constante, de 3 para 8, é necessário fazer a troca de cada

ocorrência da constante literal 3 pela constante literal 8. Um trabalho imenso e muito sujeito a erros, principalmente

em programas grandes.

Observe que os valores 2.9 e 7.0 estão literalmente escritos no programa, mas estes valores estão associados (sendo guardados) nas variáveis x e y.

Escrito assim, o leitor pode ser enganado e pensar que os valores guardados nas variáveis x e y (2.9 e 7.0) são constantes. Não são. Apesar de (neste caso) estes valores terem sido escritos no programa como constantes literais numéricas.

Não se deixe enganar. Os valores guardados nos objetos de dados (nas entidades) x e y são variáveis, não constantes, apesar desta forma de uso.

Constante com nome

Constante com nome é um valor constante que pode ser tratado por um nome, não pelo seu valor.

Uma constante com nome pode ser numérica ou não numérica.

program ex2 implicit none

real,parameter::pi=3.14 real:: x, y, t

t = 9.7

y = sin(2*pi*t) print*,"y=",y end program ex2

O programa utiliza uma constante com nome chamada pi do tipo real que contém o valor 3.14

utilizamos o nome pi não o valor 3.14 quando necessitamos usar o valor 3.14, ou seja, utilizamos a constante com nome

Se um programa utiliza, por exemplo, a constante com nome

pi

em muitos lugares diferentes do programa,

quando houver a necessidade de trocar o valor da constante de 3.14 para 3.141559 é necessário trocar este valor

apenas na definição da constante com nome (

um único local

) que o novo valor será automaticamente usado no

programa todo. Um trabalho bastante reduzido quando comparado com o uso da constante literal e o mais

importante muito menos sujeito a erros.

4. Nomes e Variáveis

Nome

Um nome, no Fortran 2003, pode ter

até 63 caracteres alfanuméricos, mas tem que, obrigatoriamente,

começar com uma letra

.

Os caracteres alfanuméricos disponíveis para uso nos nomes são definidos pelo conjunto de caracteres do

Fortran (

na prática o código ASCII

). Pode-se utilizar 52 letras, 10 dígitos e o caractere sublinha ( _ ) nos nomes.

(5)

velocidade VELOCIDADE VELOcidade vELocidade veloCIDADE

são nomes que caracterizam o mesmo objeto (

obviamente, evite o uso destas formas esquisitas

).

Um

nome tem que ser único

no programa Fortran.

program var1 implicit none real::var1=4.3 print*,"var1=",var1

end program var1

Este programa não pode ser utilizado pois o nome var1 é ambíguo (não único).

var1 é o nome do programa, mas também é o nome de uma variável real no mesmo programa (esta é a ambiguidade)

Variável

Uma

variável

é uma posição de memória cujo valor guardado nela pode mudar durante a execução do

programa. Uma variável tem tipo, isto é, tem regras que definem como ela guarda os valores, quais valores pode

guardar e quais operações podem ser realizadas com os valores.

Uma variável é definida numa instrução de definição de tipo, por exemplo:

real:: x !define variável x como sendo do tipo real

integer:: i !define variável i como sendo do tipo inteiro

character(len=12):: nome !define variável nome como sendo do tipo caractere com !comprimento igual a 12 caracteres

A variável pode ser

inicializada

na sua declaração, isto é, definida e ao mesmo tempo receber um valor.

real:: x=2.5 !define a variável x como real e a inicializa com o valor 2.5

Variável indefinida:

quando se declara uma variável e não se atribui um valor à ela, diz-se que a variável está indefinida (

existe, mas não tem um valor conhecido guardado nela

).

Variável definida:

quando a variável recebe um valor, diz-se que ela foi (

ou está

) definida (

ela contém um valor conhecido

).

A definição de uma variável pode ser feita pelo processo de inicialização ou então pela atribuição de um valor

em algum ponto dentro do programa

5. Instrução Implicit None

A regra criada na primeira versão do FORTRAN chamada de regra implícita é definida assim:

uma variável cujo nome inicia com a letra

i, j, k, l, m, n

é automaticamente definida como sendo do tipo

inteiro

uma variável cujo nome inicia com qualquer

outra leta

é do tipo

real

.

toda variável que iniciavam com letras diferentes de

i j k l m n

é automaticamente definida como sendo

variável do tipo real

O tempo mostrou que esta regra é uma armadilha, pois esconde (

dificulta a localização

) de erros nos programas.

Ela ainda existe no padrão atual para manter compatibilidade com as versões anteriores, mas o Fortran dispõe da

instrução implicit none (

nenhuma implícita, ou seja, nenhuma regra implícita é utilizada

) que deve ser utilizada em

(6)

program soma x = 4.5 y = 5.5 z = x + y

print*,"soma=",z end program soma

A forma mais adequada de trabalhar é escrever o programa

utilizando a instrução implicit none

program soma implicit none real:: x, y, z x = 4.5

y = 5.5 z = x + y

print*,"soma=",z end program soma

6. Operadores Numéricos Intrínsecos

Os operadores numéricos implícitos do Fortran são:

operador

precedência significado

**

exponenciação

1

2**3 →

2

3

(=8)

*

multiplicação

2

2*3 →

2

×

3

(=6)

/

divisão

2

6/3 →

6

÷

3

(=2)

+

adição

3

2 + 3 →

2

3

(=5)

subtração

3

5 – 3 →

5

3

(=2)

Operador binário

operadores binários são aqueles que operam num par de operandos: exemplo: A * B → (opr)

op

(opr)

Operador unário

são os operadores que operam apenas em um operando: exemplo: – B →

op

(opr)

Uma regra importante é: dois operadores não podem ser escrito adjacentes, isto é, não pode haver dois

operadores um do lado do outro.

Exemplo:

-10 está correto

porque

é um operador unário

*10 está errado

porque

*

é um operador binário

2*5 está correto

operador binário

2*-5 está errado

porque existem dois operadores adjacentes

2*(-5) está correto

porque não há dois operadores adjacentes

Quando uma expressão envolve vários operadores as operações são realizadas da esquerda para a direita

seguindo a ordem de precedência. ( Mnemônico para esta regra →

PEMDAS

)

parêntese

parêntese tem maior prioridade

tudo o que estiver entre parêntese é feito primeiro

exponenciação

a operação de exponenciação tem prioridade

1

multiplicação

e

divisão

tem mesma prioridade:

2

são feitas na ordem em que aparecem, da esquerda para a direita

adição

e

subtração

tem mesma prioridade:

3

são feitas na ordem em que aparecem, da esquerda para a direita

exceção

a exceção da regra da esquerda para a direita é a operação exponenciação

por exemplo: A**B**C é feita da direita para a esquerda ou seja:

A

BC

(7)

Exemplo:

W = V * T - G / 2 * T ** 2

W

=

V

×

T

G

2

×

T

2

neste exemplo :

1) operação

A

=

T

2

2) operação

B

=

V

×

T

3) operação

C

=

G

2

4) operação

D

=

C

×

A

5) operação

W

=

B

D

← resultado final

7. Expressão Numérica

Expressões numéricas representam cálculos numéricos e são formadas com operadores numéricos e operandos

numéricos. A avaliação (

o cálculo

) da expressão leva a um valor número simples (

um valor escalar

).

Exemplos:

E = m * c**2

E

=

m c

2

y = y_0 + v_y0 * t + (1.0/2.0)* g * t**2

y

=

y

0

v

y0

t

1

2

g t

2

Os operadores intrínsecos (** * / + – ) são intrínsecos porque eles são disponibilizados pelo Fortran. Eles

são preexistentes. Existem também os operadores que podem ser construídos pelo usuário que neste caso não são

intrínsecos. Eles serão visto posteriormente.

7.1-Divisão Inteira

Causa de muitos erros nos programas para os programadores desatentos.

A divisão inteira é feita pela divisão de duas entidades inteiras e o seu resultado é um inteiro. Porque um inteiro

não tem a parte fracionária (

decimal

) ela é eliminada na resposta, então:

1

2

→ 1/2

1÷2

esta divisão inteira gera como resposta o número

zero

não o número 0.5 como seria

desejado

por sua vez a divisão real

1.0

2.0

→ 1.0/2.0

1.0÷

2.0

gera o número 0.5 como esperado

ATENÇÃO:

1/2

0

enquanto

1.0/2.0

0.5

É muito importante lembrar que estes dois tipos de dados numérico (

no computador

) são diferentes.

O que faz

com que as operações matemáticas realizadas com os inteiros e os reais no computador gerem valores diferentes.

Para melhorar e reforçar este entendimento, vamos analisar a operação de divisão do número 1 pelo número 4.

Na matemática

esta divisão gera o valor 0.25.

Por outro lado,

no computador

o resultado depende do tipo numérico utilizado:

números tipo real:

1.0

4.0

=0.25000000

números tipo inteiro:

1

4

=0

(8)

Usando números reais a resposta obtida é a esperada (

0.25000000 ou 0.25) enquanto, com números inteiros a

resposta é diferente do que se espera porque como o valor inteiro resultante da divisão não pode conter a parte

decimal (

fracionária

) ela foi descartada, o que faz com que a resposta obtida seja o número zero. Claramente

diferente da matemática.

Você pode pensar que isto é um erro.

É inesperado, mas não um erro

, porque isto ocorre devido a forma como

internamente o computador guarda a e manipula os números.

Ao encontrar o número 1 (não 1.0) e o número 4 (não o 4.0) o Fortran sabe que eles são números inteiros e portanto a divisão que está sendo feita é uma divisão entre números inteiros – ou como usualmente chamamos: divisão inteira. Para fazer a operação de divisão inteira o Fortran procede assim:

• converte o inteiro 1 para o real 1.0

• converte o inteiro 4 para o real 4.0

• implementa a operação de divisão obtendo o resultado 0.25000000

• como a operação de divisão está sendo feita entre dois inteiros o resultado da divisão também será um inteiro, por isto o Fortran transforma o resultado obtido (0.25000000 que é um número real) em um número inteiro. Porque inteiros não tem a parte fracionária, o resultado obtido da divisão inteira será o número zero

• Percebeu? Nada de errado. Estranho apenas para quem não conhece a regra utilizada pelo Fortran para fazer divisão inteira

• por outro lado, por exemplo, dividir 6 por 3 dá a resposta correta tanto na divisão inteira quanto na divisão real: 6/3 = 2 e 6.0/3.0 =2.0

Importante

: não esqueça que divisão inteira e divisão real pode produzir resultados distintos no computador

8. Expressões Modo Misto

O Fortran permite o uso de expressões que utilizam operando de tipos diferentes.

A regra geral é que o “

tipo mais simples

” é convertido para o tipo mais complexo (

coerced – forçada a agir como

).

Isto aplica-se a operação não a expressão como um todo.

Porque o tipo inteiro é um tipo mais simples que o tipo real as operações em uma expressão mista serão

realizadas pela aritmética real não inteira.

Exemplos:

1/2 gera o valor 0 (modo simples: 2 valores inteiros) 1.0/2 gera o valor 0.5 (modo misto)

1/2.0 gera o valor 0.5 (modo misto)

1.0/2.0 gera o valor 0.5 (modo simples: dois valores reais)

7/2 * 4.0 gera o valor 12.0 porque 7/2 é avaliada primeiro gerando o número 3 e

3 * 4.0 → 12.0 (esperado 14.0; obtido 12.0)

RECOMENDAÇÃO:

não deixe expressões mistas tomarem conta do seu programa, pois isto é fonte de

muitos erros difíceis de serem encontrados.

Transforme as expressão mistas em expressão simples.

Exemplo: real(7/2)*4.0 gera o valor 14.0 porque é uma expressão modo simples

real(1)/real(2) gera o valor 0.5 porque é uma divisão modo real simples

(9)

Por exemplo se você deseja obter a parte inteira de um valor pode fazer assim:

7.0/2.0 gera o valor 3.5

int(7.0/2.0) gera o valor 3

9. Comando de Atribuição

A instrução de atribuição (

comando de atribuição

) é a forma utilizada para escrever um valor num objeto (

guardar – escrever na posição de memória reservada para o objeto de dado especificado

).

A forma geral do comando de atribuição é: variável = expr

ATENÇÃO:

o sinal de igual não tem a mesma interpretação que o sinal de igual na matemática.

É necessário entender que a melhor representação seria uma seta: ←

a seta não pode ser utilizada porque os caracteres possíveis de serem utilizados num programa Fortran – NA PRÁTICA – são aqueles contidos na tabela ASCII (posições 32 a 126) e a seta não está disponível

a instrução v = g*t significa calcule a expressão colocada no lado direito do sinal de igual

g

×

t

e

guarde (

escreva na posição de memória

) o valor calculado na variável v. A melhor forma de representar isto seria:

v

g

×

t

mas, infelizmente esta representação não é possível de ser utilizada no Fortran. Por isto utiliza-se o sinal de

igual (=) que está disponível na tabela ASCII (

a seta conforme dito não está disponível

).

Se a expressão utilizada é do tipo mista o resultado é primeiro convertido para o mesmo tipo da variável que vai

receber o valor calculado e depois guardada na (

atribuída à

) variável.

Isto significa que é possível haver perda de

dados.

Portanto muita atenção ao escrever expressões no Fortran.

Por exemplo, com :

integer:: N real : x, y

as expressões:

N = 7.0 / 3 gera o valor 2

x = 7 / 3 gera o valor 2.0

y = 7.0 / 3 gera o valor 2.3333

x = 7 / 3.0 gera o valor 2.3333

Novamente

,

NÃO

deixe expressões mistas tomarem conta do seu programa.

10. Acumulador

Uma expressão muito utilizada em computação é aquela que chamamos de acumulador.

(

porque, neste exemplo, o resultado é um somatório também se usa o termo : somador

).

Uma expressão acumuladora é similar a expressão: n = n + 1 ou n = n + a

A expressão acumuladora é muito utilizada para gerar uma sequência de números.

Por exemplo, quando se deseja criar a sequência 1 2 3 4 5 6 7 . . . .

(10)

n = n + 1

matematicamente isto é inconsistente

porque fazendo-se n = 5 teríamos: 5 = 5 + 1 5 = 6, o que é uma inconsistência matemática→

mas claro que a coisa toda não se passa assim no computador. No computador o processo é assim:

n= 1 a variável n inicia com o valor 1 no passo 1, adiciona-se 1 a variável n

n = 1 + 1 n=2 que então passa a ter o valor 2→

no passo 2, adiciona-se 1 a variável n

n = 2 + 1 n=3 que passa a ter o valor 3. Se forem efetuados apenas 2 passos a variável n→

termina com o valor 3

11. Saída de Dados para a Tela do Computador

O processo de transferência de dados permite que dados possam tanto entrar quanto sair de um programa.

A forma mais simples de saída de dados é aquela que mostrar os dados na tela do computador. A instrução

PRINT*,

é utilizada para isto.

A instrução print*, é chamada de saída com formato livre (

saída usando lista dirigida à

).

A forma geral da instrução é:

print formatos, lista

onde: formatos

especifica os formatos que serão utilizados com as variáveis da lista

o formato permite controlar a aparência dos dados (forma como os dados da lista serão escritos). O mais simples é deixar o compilador usar um formato default. Este formato default é chamado de lista dirigida à. Frequentemente ele é chamado de formato livre. Cada compilador possuí o seu próprio formato default (que são parecidos, mas não são iguais). A instrução PRINT*, é a instrução utilizada para escrever na tela do computador

(11)

Outra forma de enviar dados para a tela do micro é aquela que faz uso da instrução

write.

A instrução write(unit=*, fmt=*) implementa a mesma ação que a instrução print* , isto é, envia a lista que

for utilizada com ela para a tela do micro.

A forma geral da instrução é: write(unit = u, fmt = formatos) lista

onde:

u

formatos

Número inteiro que especifica a unidade . O * significa a tela do micro

os formatos controlam a forma como os dados da lista serão escritos. O * significa lista

dirigida, neste caso à saída (

ou formato livre

)

lista

é uma lista de entidades (

objetos de dados

) separadas por vírgula

LISTA DIRIGIDA À

a lista dirigida à é utilizada quando se escreve um asterisco ( * ) no formato.

A instrução PRINT* é uma instrução que está usando a lista dirigida à como formato para as entidades

declaradas na sua lista. Como a lista foi omitida, ela é considerada uma lista dirigida à saída vazia, portanto a

instrução irá imprimir na tela do micro (

lista dirigida à saída

) uma linha vazia.

Exemplo:

program s_01

!--- !-- Programa exemplo de saída de dados !-- na tela do monitor

!-- AUTOR: Anibal L. Pereira 24/06/2010 !--- implicit none

real::var = 10.5

print*,"O valor de var é igual a:", var

end program s_01

O programa s_01 define uma variável real chamada

var e a inicializa com o valor 10.5.

Depois, utiliza a instrução de saída de dados

print*,"O valor de var é igual a:", var

que ao utilizar um asterisco ( * ) no formato faz uso do

formato

lista dirigida à saída

– que em termos

práticos pode ser entendido como formato livre.

Esta instrução escreve na tela do computador a lista especificada, que neste caso é uma

lista

composta por duas

entidades:

"O valor de var é igual a:"

var

A lista pode conter constantes, variáveis, expressões e strings (

cadeias de caracteres

) separadas por vírgulas.

Neste caso, nossa lista possui duas entidades:

um string

a sentença O valor de var é igual a: delimitada por aspas

[

as aspas ( " ) são utilizadas para marcar o início e o fim do string – seus limites ]

neste caso o string é uma constante literal do tipo caractere ou como usualmente os referimos uma

constante literal caractere

Recorde que o Fortran permite o uso de aspas ( ” ) e de apóstrofo ( ' ).

Entretanto, ao se utilizar um deles (na abertura ou no fechamento) o outro será obrigatoriamente do mesmo tipo, então:

print*, ” O valor de var1 é igual a: ” e

print*, ' O valor de var1 é igual a: ' podem ser utilizadas sem problema algum

uma variável

(12)

Não esqueça: as entidades utilizadas na lista são separadas por vírgula.

Exemplo:

program s_01a

!--- !-- Programa exemplo de saída de dados na tela !-- usando a instrução write

!-- AUTOR: Anibal L. Pereira 03/10/2010

!--- implicit none

real::var = 10.5

write(unit=*,fmt=*)"O valor de var é igual a:", var

end program s_01a

O programa s_01a utiliza a instrução write

para a saída de dados

write(unit=*,fmt=*) . . .

que faz uso do asterisco ( * )

unit=* unidade → (

monitor

)

fmt=* formato → (

lista dirigida à saída

)

Observe que a instrução escreve na tela do computador a lista. Neste caso, duas entidades.

12. Entrada de Dados pelo Teclado

A forma mais simples de entrar dados no computador é a instrução READ*, que permite a entrada de dados

pelo teclado. A forma geral da instrução é:

read formatos, lista-variáveis

onde: formatos

especifica os formatos que serão utilizados com as variáveis lidas

a utilização de um formato na entrada de dado pelo teclado é uma técnica que, muito frequentemente, leva a erros pois o usuário tem que se preocupar com o formato dos dados que está fornecendo ao programa. Por isto é recomendado que não se utilize dados formatados quando os dados devem ser fornecidos pelo teclado. O melhor é utilizar uma lista dirigida à entrada pois isto diminui muito a quantidade de erros. A instrução READ*,

é a instrução de leitura que usualmente é utilizada

lista-variáveis

é uma lista de variáveis separadas por vírgula

Exemplo:

program ent_01

!--- !-- Programa exemplo de entrada de dados !-- pelo teclado

!-- AUTOR: Anibal L. Pereira 24/06/2010 !--- implicit none

real::x, y, z

print*,"Entre com 2 números" read*, x,y

z = x + y

print*,x, "+", y, "=", z

end program ent_01

O programa ent_01 solicita que o usuário entre dados

pelo teclado.

Para isto ele utiliza a instrução de entrada de dados

read*, x,y

quando se utiliza um asterisco ( * ) isto significa lista

dirigida (

que pode ser entendida como formato livre

).

Como a instrução é de entrada então é uma lista

dirigida à entrada

Observe também que este programa está utilizando as instruções:

print*,"Entre com 2 números"

(13)

que utilizam lista dirigida à saída, por isto elas escrevem suas listas (

com formato livre

) na tela do micro.

Exemplo:

program ent_01a

!--- !-- Programa exemplo de entrada de dados !-- pelo teclado, usando a instrução write !-- AUTOR: Anibal L. Pereira 03/10/2010 !--- implicit none

real::x, y, z

print*,"Entre com 2 números" read(unit=*, fmt=*) x,y

z = x + y

write(unit=*, fmt=*) x, "+", y, "=", z

end program ent_01a

O programa ent_01a solicita que o usuário entre dados

pelo teclado, usando a instrução

read(unit=*, fmt=*) x,y

que faz uso do asterisco ( * )

unit=* unidade → (

monitor

)

fmt=* formato → (

lista dirigida à entrada

)

ENTRANDO OS DADOS

A entrada dos dados pode ser feita

na mesma linha separada por espaço em branco ou então separada por vírgula

enquanto não se pressionar a tecla <enter> é possível fazer correções nos dados que estão sendo

escritos

pode-se também pressionar tecla <enter> após a entrada de cada um dos dados

neste caso, depois de pressionar a tecla <enter> não é mais possível fazer qualquer correção no

dado fornecido.

13. Instrução PRINT usando Formato

A instrução print conforme destacado tem a forma:

print formatos, lista

onde: formatos

especifica os formatos que serão utilizados com as entidades na lista

usa-se o formato para controlar a aparência dos dados que serão escritos na tela do computador

lista

Identifica as entidades (

objetos

) que serão escritas

Se for utilizada a instrução

write(unit=*

write(unit=*, fmt=formatos) lista

onde: formatos

especifica os formatos que serão utilizados com as entidades na lista

(14)

DESCRITOR DE EDIÇÃO DE DADOS

Existem vários descritores de edição de dados que podem ser utilizados, mas neste momento vamos destacar os

descritores: A, I, F, E, ES, EN

A[

w

]

Alfanumérico

descritor de edição de dado caractere utilizado para formatar o (

controlar a aparência

) caractere

A

w

w → tamanho do campo , isto é, quantos caracteres serão utilizados

I

w

[

.m

]

Inteiro

descritor de edição de dado inteiro utilizado para formatar números inteiros

I

w.m

w → tamanho do inteiro, isto é, quantos dígitos serão utilizados para mostrar o inteiro

m → garante que pelo menos m dígitos serão mostrados. Zeros anteriores serão usados se necessário

F

w.d

Real

descritor de edição de dado real utilizado para formatar números reais

F

w.d

w → tamanho total do campo do real, isto é, quantas posições serão utilizados para mostrar o real

incluindo o sinal e o ponto decimal

d → número de dígitos depois do ponto decimal

E

w.d

Real

descritor de edição de dado real utilizado para formatar números reais

E

w.d

w → tamanho total do campo do real, isto é, quantas posições serão utilizados para mostrar o real

incluindo o sinal e o ponto decimal

d → número de dígitos depois do ponto decimal

há também a forma

E

w.d

[E

e

]

que não abordaremos neste momento

EN

w.d

Real

descritor de edição de dado real utilizado para formatar números reais

mantissa maior que 1 e menor que 1000

EN

w.d

w → tamanho total do campo do real, isto é, quantas posições serão utilizados para mostrar o real

incluindo o sinal e o ponto decimal

d → número de dígitos depois do ponto decimal

há também a forma

EN

w.d

[E

e

]

que não abordaremos neste momento

ES

w.d

Real

descritor de edição de dado real utilizado para formatar números reais

mantissa maior que 1 e menor que 10

ES

w.d

(15)

d → número de dígitos depois do ponto decimal

há também a forma

ES

w.d

[E

e

]

que não abordaremos neste momento

FATOR DE REPETIÇÃO

Todos estes descritores de edição de dados podem ser multiplicados por um número inteiro que representa a

quantidade de repetições do descritor de edição de dados.

Exemplo:

5A3

→ é o mesmo que

A3, A3, A3, A3, A3

Exemplos:

considere os seguintes valores: n = 678 e x = 35.141592654

A

→ "Entre com um número"

A20

→ "Entre com um número" (

cada acentos aumenta em um a contagem dos caracteres

)

I3

→ 678

I6.4

→ 0678

F6.3

→ 35.142

F6.1

→ 35.1

E9.3

→ 0.351E+02

E9.1

→ 0.4E+02

EN9.2

→ 35.14E+00

EN9.1

→ 35.1E+00

ES9.3

→ 3.514E+01

ES9.1

→ 3.5E+01

program ex3

!--- !-- Programa exemplo de formatação

!-- AUTOR: Anibal L. Pereira 28/06/2010 !--- implicit none

integer:: n=678 real:: x=35.141592654

print*,"Entre com um número" print"(A20)","Entre com um número"

print"(i3)", n print"(i6.4)", n print"(f6.3)", x print"(f6.1)", x print"(E9.3)", x print"(E9.1)", x print"(EN9.2)", x print"(EN9.1)", x print"(ES9.3)", x print"(ES9.1)", x

end program ex3

Na realidade a frase entre com um número, que está sendo escrita duas vezes no programa, não tem nenhum significado para que o usuário entre com um número, pois não há instrução de entrada de dado no programa

A saída deste programa é mostrada abaixo:

Entre com um número Entre com um número 678

(16)

program ex4

!--- !-- Programa exemplo de formatação

!-- AUTOR: Anibal L. Pereira 28/06/2010 !--- implicit none

integer:: n=678 real:: x=35.141592654

print"(a20)","Entre com um número" print"(i3,i6.4)", n, n

print"(f6.3,f6.1)", x, x print"(E9.3,E9.1)", x, x print"(EN9.2,EN9.1)", x, x print"(ES9.3,ES9.1)", x, x

end program ex4

Novamente a frase 'Entre com um número', não significa uma ação que o usuário deva fazer, pois neste programa, também, não há instrução de entrada de dado

A saída deste programa é mostrada abaixo:

Entre com um número 678 0678

35.142 35.1 0.351E+02 0.4E+02 35.14E+00 35.1E+00 3.514E+01 3.5E+01

Quando o descritor de edição de formato do dado numérico não é compatível com o valor a saída é preenchida

com asteriscos ( * )

. Se o descritor for para um dado caractere, o valor será cortado se o dado é maior que a

quantidade de caracteres reservada para a saída

program ex5

!--- !-- Programa exemplo de formatação

!-- AUTOR: Anibal L. Pereira 28/06/2010 !--- implicit none

integer:: n=678 real:: x=35.141592654

print"(a11)","Entre com um número"

print"(i2)", n print"(f5.3)", x print"(E7.3)", x print"(EN8.2)", x print"(ES8.3)", x

end program ex5

Novamente: Não há instrução de entrada de dado

A saída deste programa é mostrada abaixo:

Entre com u **

***** ******* ******** ********

program ex6

!--- !-- Programa exemplo de formatação

!-- AUTOR: Anibal L. Pereira 28/06/2010 !--- implicit none

integer:: n=678 real:: x=35.141592654

print"(i3,i3,i3,i3)", n, n, n, n print"(4i3)", n, n, n, n

print"(i5,i5,i5,i5)", n, n, n, n print"(4i5)", n, n, n, n

print"(2f7.3)",x, x print"(3E12.3)",x, x, x

end program ex6

A saída deste programa é mostrada abaixo:

678678678678 678678678678

678 678 678 678 678 678 678 678 35.142 35.142

(17)

14. Controle de Fluxo

Um programa de computador inicia a sua execução na primeira instrução do programa e vai, sequencialmente,

executando as outras instruções na ordem em que elas aparecem (

em que elas são escritas no código fonte

).

Entretanto, muitas vezes é necessário altera a ordem de execução das instruções existente no programa. Isto pode

ser feito com declarações de controle de fluxo.

14.1. Instrução IF

Uma forma de se fazer o controle de fluxo de um programa é utilizando a instrução IF. A instrução IF é a forma

mais simples de controle de fluxo. Ela tem a seguinte forma:

if(expr) instrução-fortran

A instrução IF avalia a expressão colocada entre parênteses e se o resultado obtido for verdadeiro ela executa a

instrução-fortran especificada. Caso o resultado da avaliação seja falso a instrução-fortran não é executada.

O fluxograma ao lado mostra a instrução IF

Observe que a instrução-fortran não é executada

quando o resultado é falso

Exemplo:

program m_01 implicit none integer::massa character(len=5):: tp="menor" print*,"Entre com uma massa entre 0 e 49 kg ou então entre 51 e 100 kg" read*, massa print* if(massa > 50) tp="maior" print*,"A massa é ",tp," que 50 kg" end program m_01

Observe que o programa m_01 troca a mensagem mostrada na tela do micro conforme o valor numérico

fornecido pelo usuário.

se o valor for menor que 50 a mensagem é: A massa é menor que 50 kg

se o valor for maior que 50 a mensagem é: A massa é maior que 50 kg

(18)

O fluxograma ao lado mostra o programa.

Observe o controle de fluxo está sendo feito pela

instrução IF

a atribuição do valor maior à variável caractere tp será

ou não realizada, conforme o número que o usuário

entra no programa.

Portanto há um controle no fluxo do programa, como

desejado

14.2. Construção IF

Quando há a necessidade de se executar mais de uma instrução Fortran é necessário utilizar a construção IF. A

construção IF tem a seguinte forma:

if(expr) then

bloco A

else

bloco B

end if

agora, quando expr for avaliada como sendo verdadeira a construção if executa o conjunto de instruções colocado

no bloco A (

entre o then e o else

). Por outro lado se a avaliação de expr for falsa o conjunto de instruções colocado

no bloco B (

entre o else e o end if

) será executado em vez do bloco A.

Exemplo:

if(massa_que_levanta > 61.0) then p=(m*g)/10 else p=m*g end if

(19)

Forma simplificada da construção IF:

if(expr) then

bloco A

end if

Exemplo:

if((m/2) = = 50.0) then tempo=10.0 massa=3 end if

esta forma da construção IF (

sem a instrução else

) faz a mesma tarefa da instrução IF, porém permite executar mais

de uma declaração.

No exemplo, além de atribuir o valor 10 à variável tempo, também atribuí o valor 3 à variável massa.

14.3. Construção IF-ELSEIF

A forma geral de uma construção IF é o IF-ESLSEIF-ELSE-ENDIF:

IF–ELSEIF–ELSE–ENDIF

Esta construção tem a forma:

if(expr_1) then bloco 1 elseif(expr_2) then bloco 2 elseif(expr_3) then bloco 3 else bloco_else end if

e funciona assim:

expr 1

se expr 1 for

verdadeira

o bloco 1

é executado

ao termino da execução do bloco 1 o controle do programa passa para a instrução que

segue o IF

se expr 1 seja

falsa

, o fluxo do programa passa para o elseif que segue o IF

expr 2

se expr 2 for

verdadeira

o bloco 2

é executado

e ao término passa para a instrução que segue o IF

se expr 2 for

falsa

, o fluxo segue para o próximo elseif

expr 3

se expr 3 for

verdadeira

o bloco 3

é escutado

ao término segure para a instrução depois do IF

(20)

14.4. Construção CASE

Uma construção

CASE

(

caso

) é bastante útil para lidar com alternativas que são mutuamente exclusivas, onde a

ordem em que elas aparecem não é importante (

levada em conta

).

Uma construção

CASE

(

caso

) tem a forma:

select case (expr_caso) case (lista_valor_caso) bloco_1 case (lista_valor_caso) bloco_2 case default bloco_n end select

A expressão caso que determina a seleção do caso (

expr_caso) pode ser uma expressão inteira, caractere ou

lógica.

Expressão real não pode ser usada

.

Quando uma declaração

select case

é encontrada o valor da expressão

expr_caso

é calculado e o bloco de

declarações que segue a declaração caso apropriada (

se existir

) é executada.

Uma declaração caso tem a forma:

case (lista_valor_caso)

ou

case default

Numa construção caso só pode existir um declaração default. O bloco de declaração referente à declaração

default só é executado se nenhuma declaração caso foi satisfeita.

Exemplos:

select case (x>1 .and. x<4) case (.true.)

print*,"intervalo correto" case (.false.)

print*,"intervalo errado" end select

select case (num) case ( 1 ) x = 5*y case ( 2 ) x = -13*y case default x = y**2 end select

select case (objeto) case ("circulo") area = pi * r**2 case ("retangulo") area = lado * lado case default

print*,"Não é circulo nem & & retângulo"

end select

A lista_valores_caso pode tomar uma das seguintes formas:

Faixa de valores

Condição de ocorrência

valor_caso-1:valor_caso_2

valor_caso:

:valor_caso

valor_caso-1

expr_caso

valor_caso-2

valor_caso

expr_caso

valor_caso

expr_caso

sobreposição de faixas não é permitido

a construção caso é concluída com a execução do bloco selecionado, se existir algum. Não é permitido a

execução de mais de um bloco

se não houver seleção de algum caso e não existir a declaração

default

a construção caso acaba sem a

(21)

select case (expr-caso) case( 1 )

bloco-1 case( 2 ) bloco-2 end select

select case (expr-caso) case( 1 )

bloco-1 case( 2 ) bloco-2 case default bloco-default end select

15. Expressão Relacional

As expressões utilizadas na instrução IF e na construção IF com muita frequência são expressões relacionais.

Uma expressão relacional, estabelece um relacionamento entre duas entidades do programa. Sua forma geral é:

2

exp

1

exp

operador

onde: exp1 = expressão aritmética ou caractere

operador = operador relacional

exp2 = expressão aritmética ou caractere

Os operadores relacionais que pode ser utilizados para escrever as expressões relacionais são:

Operadores relacionais:

operador

significado

= =

igual

/ =

diferente

>

maior que

> =

maior ou igual a

<

menor que

(22)

Por exemplo: a expressão

b

2

4ac

pode ser escrita como: b**2 >= 4*a*c e o resultado desta avaliação

só pode ser

verdadeiro

ou

falso

.

O valor de uma expressão relacional é sempre um valor lógico: verdadeiro ou falso.

Exemplos: operação resultado

7 < 10 .TRUE. 7 < = 10 .TRUE. 7 = = 10 .FALSE. 7 > 10 .FALSE. 7 < = 7 .TRUE.

"A" < "B" .TRUE. ! verdade porque é avaliado na ordem alfabética (7+3) < (6+11) .TRUE.

16. Variáveis Numéricas

A ideia de variável numérica no Fortran é similar àquela utilizada no contexto matemático.

Por exemplo, sabe-se pela matemática que a área de um círculo é calculada pela expressão:

área

=

r

2

onde

r

é o raio do círculo.

Observe que a expressão utilizou o símbolo

(

pi do alfabeto grego

). Este símbolo não pode ser

representado no Fortran 2003. Por este motivo, usa-se o nome pi para representar este símbolo

porque o Fortran foi desenvolvido por quem utiliza a língua inglesas, caractere que não estão na tabela

ASCII não são utilizados no Fortran. A exceção fica para os caracteres utilizados nas constantes literais

caractere. Portanto acentos, cê-cedilha e outros símbolos que não existem na tabela ASCII só podem ser

usados em constante caractere

recorde que o Fortran representa a operação de multiplicação por um asterisco ( * )

e a operação exponenciação por dois asteriscos ( ** )

por isto a expressão

área=

r

2

no Fortran é escrita assim: area = pi*r**2

Atente ao fato de área estar escrito sem o acento. Tem que ser assim, pois área sendo o nome de uma variável no Fortran não pode ter acento

Na equação area = pi*r**2

cada variável que aparece do lado direito do sinal de igual (

pi e r) tem que ter um valor para que a

expressão toda possa ser avaliada

depois que a expressão colocada no lado direito do sinal de igual é calculada o resultado é atribuído à

variável existente no lado esquerdo do sinal de igual

Na matemática é possível escrever a expressão

área

=

r

2 assim

r

2

=

área

.

As duas expressões representa a mesma coisa, portanto podem ser intercambiadas sem problema

No Fortran (e para a grande maioria das linguagens de computação) este tipo de inversão é proibida. Aquilo que se deseja calcular tem que estar colocado no lado direito do sinal de igual na expressão. Exemplos: correto: x = 2 + 5

errado: 2 + 5 = x

Variáveis numéricas no Fortran podem ser de 3 tipos:

inteira, real, complexa

inteira

integer

real

real

(23)

Numa primeira vista o conceito de tipo nos números parece estranho, principalmente quando pensamos em

números inteiros e números reais. Mas, é importante ter uma boa compreensão sobre esta distinção, para que não se

cometa erros grosseiros nos cálculos que serão realizados no computador.

Neste texto a atenção está voltada para os números inteiros e reais, porque números complexos são construídos

utilizando-se dois números reais. Números complexos serão usados posteriormente.

17. Definindo Variáveis Numéricas

A definição de uma variável (

definição de tipo de uma variável

) tem a seguinte forma geral:

TIPO atributos :: lista-variáveis

para as variáveis numéricas tipo inteiro e tipo real, a forma mais simples de uso desta instrução de declaração de

tipo é:

integer:: lista-variáveis

real :: lista-variáveis

Exemplos:

integer:: num, var1, var2

real:: massa, var3, var4

Nestes exemplos nenhum atributo foi utilizado. A lista-variáveis é uma lista de nomes de variáveis

separados por vírgula.

Se as variáveis fossem complexa a instrução ficaria assim:

complex :: z1, z2

18. Construção DO WHILE

Processo de repetição

A repetição de uma instrução ou um conjunto de instruções é algo muito útil. O Fortran dispõe de algumas

formas de fazer a repetição de um bloco. No momento será apresentado a construção DO WHILE.

A construção DO WHILE permite a execução repetitiva de um bloco de instruções enquanto um dada condição

é satisfeita.

A forma de uma construção DO WHILE é:

DO WHILE(expr-lógica) . . . . boco-do-while . . . . END DO

onde:

expr-lógica → é uma expressão lógica que será avaliada em

verdadeira

ou

falsa

(24)

Exemplos:

k = 1

DO WHILE( k < 4) k = k + 1

print*,"k = ", k end do

Imprime:

k = 2 k = 3 k = 4

i = 0 x = -0.1

DO WHILE( sin(x) < cos(x) ) x = x + 0.1

i = i + 1

y = sin(x) + cos(x+0.03) print*,"i = ", i, "y = ", y end do

Imprime:

i = 1 y = 0.99955004 i = 2 y = 1.0913953 i = 3 y = 1.1723357 i = 4 y = 1.2415626 i = 5 y = 1.2983841 i = 6 y = 1.3422326 i = 7 y = 1.3726701 i = 8 y = 1.3893921 i = 9 y = 1.3922318

k = 20

DO WHILE( k < 4) k = k + 1

print*,"k = ", k end do

Esta construção DO WHILE não será executada, pois a condição k<4 com k = 20 sempre será falsa

19. Arquivo

Usualmente os dados fornecidos à um programa e/ou gerados por ele são preservados num arquivo, o que

possibilita que eles sejam reutilizados sempre que forem necessários.

open(unit=20, file="pontos.dados", status="new", action="write") . . .

write(unit=20, fmt=*) i, x . . .

close(unit=20)

As declarações de entrada e saída (

read e write

), quando se referem a um arquivo em particular

(file="<nome-arquivo>"), utilizam o número da unidade (unit=<número>) especificada na declaração open. O

número utilizado usualmente é um número inteiro positivo (

entre 10 e 99

).

Para o Fortran o usual é utilizar o número 6 (unit=6) para conectar o monitor do computador e o

número 5 (unit=5) para conectar o teclado. O fabricante do compilador Fortran pode utilizar

qualquer valor diferente destes para pré-conectar os dispositivos que julguem necessários ao

funcionamento do seu compilador. Usualmente o fabricante utiliza um número entre 0 e 9.

Por

segurança

, ao conectar uma unidade aos seus programas, utilize valores entre 10 e 99, porque

assim você muito provavelmente não sobrescreverá nenhuma unidade pré-conectada pelo

compilador e desta forma manterá o Fortran funcionando corretamente.

A declaração open [ open(unit=20, file="pontos.dados", status="new", action="write") ] escrita da

forma mostrada conecta o arquivo pontos.dados à unidade 20.

Depois de se conectar um arquivo, todas as vezes que a unidade (

no exemplo a unidade 20

) for referida isto

significa que se está utilizando o arquivo indicado na declaração (pontos.dados).

É usual, na declaração open, utilizar o nome do arquivo, a unidade, o estado (

status

="new") e a ação

(

action

="write") que pode ser executada.

Minimamente é possível utilizar a declaração open assim: open(unit=, file="")

então: open(unit=20, file="arq.dados")

Declaração com mais atributos:

(25)

As opções são:

FORM=<exp-caracter>

exp-caracter pode ser um dos seguintes:

formatted

(valor

default – utilizado se não for indicado outro valor)

unformatted

ACCESS=<exp-caracter>

exp-caracter pode ser um dos seguintes:

sequential (

default

)

direct

STATUS =<exp-caracter>

exp-caracter pode ser um dos seguintes:

old

new

scratch

replace

unknown

(

default

)

ACTION=<exp-caracter>

exp-caracter pode ser um dos seguintes:

read

write

readwrite (

default

)

IOSTAT=<int-var>

int-var é uma variável inteira que é igual zero se o comando executou corretamente e um valor

positivo caso contrário

valor igual a

zero

– nenhum erro ocorreu

valor

positivo

– erro (

o valor indicará que tipo de erro ocorreu

)

valor

negativo

– fim de arquivo encontrado não ocorreu erro

ou

fim de registro encontrado não ocorreu erro

Os valores tanto positivos quanto negativos são definidos pelo fabricante do compilador (

particulares do compilador

), isto é, cada fabricante tem a liberdade de utilizar o valor que desejar para indicar

condições diferentes, mas obrigatoriamente os valores serão como indicados: positivos ou

negativos

POSITION=<exp-caracter>

exp-caracter pode ser um dos seguintes:

append (

vai para o final do arquivo

)

rewind

(vai para o início do arquivo

)

Observação:

dados de entrada/saída que serão usados (

escritos e lidos

) com o mesmo compilador pode ser do tipo

não formatado (

unformatted

). Isto economiza espaço em disco e elimina erro de arredondamento decorrente da

conversão dos dados da representação interna do computador para a representação formatada (

externa

).

Atenção:

dados não formatados devem ser usado principalmente quando se deseja guardar os dados

temporariamente (

número muito grande de dados

) para uso posterior pelo mesmo programa utilizando o

mesmo compilador (

geralmente no mesmo tipo de computador

). Tirando esta situação, geralmente, não é

uma boa ideia usar dados não formatados em arquivos.

Evite o uso de arquivos não formatados !

(26)

Exemplos:

program ex_arq1

!--- !-- Exemplo de escrita

!-- AUTOR: Anibal L. Pereira 03/10/2010 !--- implicit none

integer:: n=6 real:: x=5.1

open(unit=20, file="arq.dados", status="new",& action="readwrite")

write(unit=20,fmt=*) n*x

close(unit=20)

end program ex_arq1

program ex_arq2

!--- !-- Exemplo de leitura

!-- AUTOR: Anibal L. Pereira 03/10/2010 !--- implicit none

real:: nx

open(unit=30, file="arq.dados", status="old",& action="readwrite")

read(unit=30,fmt=*) nx

print"(a,f6.1)", "nx = ", nx

close(unit=30)

end program ex_arq2

20. Cabeçalho

O preenchimento do cabeçalho é uma ação fundamental. O cabeçalho faz parte da documentação interna do

programa. Não deixe de escrever no cabeçalho os dados que atualizam sua identificação.

Esta tarefa não é opcional.

É obrigatória

.

Um cabeçalho terá informações significativas, tais como:

nome da instituição

nome do programa

especificação do programa (

propósitos

)

versão do programa

identificação do autor

identificação dos colaboradores

data da criação do programa e suas atualizações

descrição de como usá-lo

Entretanto, nossos programas disponibilizam informações mínimas (

propósito, nome do arquivo, autor, autores das revisões e respectivas datas

), por isto os cabeçalhos que utilizamos são similares a:

!--- ! Propósito: Este programa lê 3 números e calcula a soma e a média deles !--- ! Arquivo: soma_e_media.f03 ! Autor: Anibal L. Pereira 11/06/2010 !Revisões: !---

21. Destacando Conjunto de Instruções

O Fortran não tem nenhum mecanismo para dar destaque a um conjunto de instruções, a não ser os blocos de

instruções utilizados nas construções.

Mas, porque a legibilidade do programa é uma característica muito importante, nosso estilo de programação

utiliza destacar conjuntos de instruções por meio de dois mecanismos,

Imagem

Figura obtida de:  http://pt.wikipedia.org/wiki/Equação_do_pêndulo  acessado em 14/06/2010

Referências

Documentos relacionados

Estes resultados apontam para melhor capacidade de estabelecimento inicial do siratro, apresentando maior velocidade de emergência e percentual de cobertura do solo até os 60

Entendendo, então, como posto acima, propõe-se, com este trabalho, primeiramente estudar a Lei de Busca e Apreensão para dá-la a conhecer da melhor forma, fazendo o mesmo com o

A variação do pH da fase móvel, utilizando uma coluna C8 e o fluxo de 1,2 mL/min, permitiu o ajuste do tempo de retenção do lupeol em aproximadamente 6,2 minutos contribuindo para

Propiciar um panorama geral da área de Física do Estado Sólido, com ênfase nas idéias fundamentais e conceitos gerais, e uma visão moderna da ciência dos materiais. Utilização

É_Realizada n n (0,3) (0,n) Inscrição Nome RG Expedidor UF Data Média Tipo Nota Questões Número Área Sub-Área Avaliação 3 n Esquema ER para o banco de dados CONCURSO..

Marca Vendedor Veículo Ford João Carro Ford João Caminhão Ford Mário Caminhão Fiat Mário Carro Chevrolet Felipe Carro Chevrolet João Carro Chevrolet João

Membro_Faculdade (Matrícula: Inteiro, Nome: string[50], Carga: Inteiro, IniContrato: data, Curso: string[30], professor: booleano, aluno: booleano). Membro

Este presente artigo é o resultado de um estudo de caso que buscou apresentar o surgimento da atividade turística dentro da favela de Paraisópolis, uma