Вы находитесь на странице: 1из 62

Instituto de Fsica Armando Dias Tavares

Departamento de Fsica Aplicada e Termodinmica


Fsica Computacional A
DFAT/ FiscompFA
Expresses Numricas
Professor: Anibal Leonardo Pereira ltima atualizao: maro 2011
Estagirios:
2004/1 a 2005/2 Luciana Conceio 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 Gonalves Martins
2003/1 a 2005/2 Renato Nascente Jnior
2004/1 a 2005/2 Pblio 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 especificao de tipo (tipo de dados) num programa define:
um conjunto de valores
um meio para representar os valores
as operaes que so possveis de serem realizadas com eles
O Fortran 2003 possui 5 tipos de dados intrnsecos que so divididos em duas classes: numrica e no
numrica.
Tipo numrico
inteiro
real
complexo
Tipo no numrico
caractere
lgico
intrnseco o adjetivo que se aplica a tipo de dados, operaes, instruo de atribuio e
procedimentos (funes e sub-rotinas) que esto definidos no Fortran e podem ser
utilizadas sem que se tenha que fazer alguma definio ou especificao adicional
Cada um destes tipos de dados possui ainda subtipos (em ingls: kind muito frequente utilizar-se a palavra inglesa
kind em vez de subtipo. Kind usado como um termo tcnico e pode ser traduzido como espcie ou tipo. Em nosso contexto
uma espcie dentro do tipo, ou seja, um subtipo).
2 DFAT/Folha Atividades/FiscompFA Expresses Numricas
Os subtipos (kind) mais utilizados com dados numricos so os subtipos preciso simples e preciso dupla, que
so, essencialmente, caracterizados pelo nmero de bits que o computador utiliza para representar os nmeros.
Preciso simples e preciso dupla dependem do tamanho da palavra do computador.
Muitos computadores pessoais ainda em uso, foram construdos 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 mquina de 32 bits.
Para o computador com palavra de 32 bits, a preciso simples usa 32 bits e a preciso dupla 64 bits.
Para o computador com palavra de 64 bits, a preciso simples usa 64 bits e a preciso dupla 128 bits.
Portanto a preciso 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 influncia desta caracterstica. 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
famlia x86-64 portanto capazes de trabalhar com palavras de 64-bits. Entretanto, quando o
microcomputador utiliza um software escrito usando 32-bits a CPU acaba sendo utilizada no modo 32-
bits, e o microcomputador se comporta como se fosse de 32 bits no de 64 bits.
http://en.wikipedia.org/wiki/Integer_(computer_science) em 08/02/2011
Outro tipo de dado bastante til (este no intrnseco) que pode ser utilizado no Fortran o dado tipo derivado.
O tipo derivado um tipo de dado definido pelo usurio. Com o tipo derivado o usurio ficar responsvel por
definir o tipo e tambm as operaes que podero ser utilizadas com o tipo que est definindo.
2. Constante Literal
Constante literal (muitas vezes chamada somente de constante) so os totens utilizados para representar os valores
de um tipo particular de dado, isto , os caracteres que podem ser utilizados na sua representao.
Totem (em ingls: token) um segmento de texto ou smbolo 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 disponveis 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 intrnseco. So nmeros 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 (preciso simples)
palavra de 32 bits: 9223372036854775808 at +9223372036854775807 (preciso dupla)
Para uma palavra de 64-bits o intervalo marcado como preciso dupla em 32-bits passa a ser a
preciso simples do computador e a preciso dupla, obviamente, ser muito maior
DFAT/Folha Atividades/FiscompFA Expresses Numricas 3
2.3-Constante Literal Real
Constante literal real usada para representar os valores do tipo real intrnseco. Consiste de uma cadeia de
dgitos com um ponto decimal (para ns seria a vrgula decimal). So 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 ( obrigatrio) aparecer na constante. Por clareza sempre importante escrever o zero:
escreva 2.0 no 2.
escreva 0.5 no .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 minscula e) tem que ser
utilizada.
Exemplos: 0.5E2 (= 500.0)
0.510
2
2E2 (= 200.0)
210
2
37E-3 (= 0.037)
3710
3
O sinal positivo opcional. Da mesma forma o intervalo (range) dependente do tamanho da palava do
computador.
No importa como o nmero real escrito pelo usurio ou como ele mostrado na tela do micro ou como ele
lido ou escrito numa entrada ou sada formatada, na memria do computador ele sempre guardado como ponto
flutuante (definida pela IEEE 754 Standard for Floating-Point Arithmetic, que o Fortran chama de nmero real).
O Fortran pode identificar o tipo do nmero pela forma como ele escrito. Ento, o nmero 58 um nmero
inteiro enquanto 58.0 um nmero real.
O intervalo (range) e a preciso do nmero real definido pelo parmetro 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
(preciso simples)
32 bits: de
10
308
at
+10
308
(preciso dupla)
2.4-Constante Literal lgica
A constante literal lgica 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 lgicos sero abordados e trabalhados futuramente.
3. Constante com Nome
A forma como usualmente empregamos o termo constante pode criar uma certa confuso.
O Fortran pode trabalhar com dois tipos diferentes de constantes: constante literal e constante com nome.
4 DFAT/Folha Atividades/FiscompFA Expresses Numricas
muito comum utilizar-se apenas o termo constantes para nos referirmos a estes dois tipos de constante. Da a
confuso.
Constante literal
como o prprio nome diz, constante literal uma constante que escrita no programa, literalmente escrita no
programa. Pode ser numrica ou no numrica.
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 numricas:
3 que uma constante do tipo inteiro
2.9, 7.0 e 0.5 so constantes do tipo real
so constantes literais, porque elas esto literalmente escrita no
programa
Se um programa utiliza, por exemplo, a constante literal inteira 3 em muitos lugares diferentes no cdigo fonte,
quando houver a necessidade de trocar o valor da constante, de 3 para 8, necessrio fazer a troca de cada
ocorrncia 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 esto literalmente escritos no programa, mas estes valores esto
associados (sendo guardados) nas variveis x e y.
Escrito assim, o leitor pode ser enganado e pensar que os valores guardados nas variveis x e y (2.9 e
7.0) so constantes. No so. Apesar de (neste caso) estes valores terem sido escritos no programa
como constantes literais numricas.
No se deixe enganar. Os valores guardados nos objetos de dados (nas entidades) x e y so variveis,
no constantes, apesar desta forma de uso.
Constante com nome
Constante com nome um valor constante que pode ser tratado por um nome, no pelo seu valor.
Uma constante com nome pode ser numrica ou no numrica.
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
contm o valor 3.14
utilizamos o nome pi no 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 necessrio trocar este valor
apenas na definio 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 Variveis
Nome
Um nome, no Fortran 2003, pode ter at 63 caracteres alfanumricos, mas tem que, obrigatoriamente,
comear com uma letra.
Os caracteres alfanumricos disponveis para uso nos nomes so definidos pelo conjunto de caracteres do
Fortran (na prtica o cdigo ASCII). Pode-se utilizar 52 letras, 10 dgitos e o caractere sublinha ( _ ) nos nomes.
O Fortran no distingue letra maiscula de letra minscula (exceto nas cadeias de caracteres strings ou seja,
constantes literais caractere e variveis caractere). Ento,
DFAT/Folha Atividades/FiscompFA Expresses Numricas 5

velocidade VELOCIDADE VELOcidade vELocidade veloCIDADE
so 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 no pode ser utilizado pois o nome var1 ambguo
(no nico).
var1 o nome do programa, mas tambm o nome de uma varivel
real no mesmo programa (esta a ambiguidade)
Varivel
Uma varivel uma posio de memria cujo valor guardado nela pode mudar durante a execuo do
programa. Uma varivel tem tipo, isto , tem regras que definem como ela guarda os valores, quais valores pode
guardar e quais operaes podem ser realizadas com os valores.
Uma varivel definida numa instruo de definio de tipo, por exemplo:
real:: x !define varivel x como sendo do tipo real
integer:: i !define varivel i como sendo do tipo inteiro
character(len=12):: nome !define varivel nome como sendo do tipo caractere com
!comprimento igual a 12 caracteres
A varivel pode ser inicializada na sua declarao, isto , definida e ao mesmo tempo receber um valor.
real:: x=2.5 !define a varivel x como real e a inicializa com o valor 2.5
Varivel indefinida:
quando se declara uma varivel e no se atribui um valor ela, diz-se que a varivel est indefinida (existe, mas
no tem um valor conhecido guardado nela).
Varivel definida:
quando a varivel recebe um valor, diz-se que ela foi (ou est) definida (ela contm um valor conhecido).
A definio de uma varivel pode ser feita pelo processo de inicializao ou ento pela atribuio de um valor
em algum ponto dentro do programa
5. Instruo Implicit None
A regra criada na primeira verso do FORTRAN chamada de regra implcita definida assim:
uma varivel cujo nome inicia com a letra
i, j, k, l, m, n
automaticamente definida como sendo do tipo inteiro
uma varivel cujo nome inicia com qualquer
outra leta
do tipo real.
toda varivel que iniciavam com letras diferentes de i j k l m n automaticamente definida como sendo
varivel do tipo real
O tempo mostrou que esta regra uma armadilha, pois esconde (dificulta a localizao) de erros nos programas.
Ela ainda existe no padro atual para manter compatibilidade com as verses anteriores, mas o Fortran dispe da
instruo implicit none (nenhuma implcita, ou seja, nenhuma regra implcita utilizada) que deve ser utilizada em
todos os programa, para anular esta regra implcita de definio de variveis.
6 DFAT/Folha Atividades/FiscompFA Expresses Numricas
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 instruo 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 Numricos Intrnsecos
Os operadores numricos implcitos do Fortran so:
operador precedncia significado
** exponenciao 1
2**3
2
3
(=8)
* multiplicao 2 2*3 23 (=6)
/ diviso 2 6/3 6-3 (=2)
+ adio 3 2 + 3 2+3 (=5)
subtrao 3 5 3 53 (=2)
Operador binrio
operadores binrios so aqueles que operam num par de operandos: exemplo: A * B (opr) op (opr)
Operador unrio
so os operadores que operam apenas em um operando: exemplo: B op (opr)
Uma regra importante : dois operadores no podem ser escrito adjacentes, isto , no pode haver dois
operadores um do lado do outro.
Exemplo: -10 est correto porque um operador unrio
*10 est errado porque * um operador binrio
2*5 est correto operador binrio
2*-5 est errado porque existem dois operadores adjacentes
2*(-5) est correto porque no h dois operadores adjacentes
Quando uma expresso envolve vrios operadores as operaes so realizadas da esquerda para a direita
seguindo a ordem de precedncia. ( Mnemnico para esta regra PEMDAS )
parntese
parntese tem maior prioridade
tudo o que estiver entre parntese feito primeiro
exponenciao
a operao de exponenciao tem prioridade 1
multiplicao e diviso
tem mesma prioridade: 2
so feitas na ordem em que aparecem, da esquerda para a direita
adio e subtrao
tem mesma prioridade: 3
so feitas na ordem em que aparecem, da esquerda para a direita
exceo
a exceo da regra da esquerda para a direita a operao exponenciao
por exemplo: A**B**C feita da direita para a esquerda ou seja:
A
B
C
onde B**C calculada
primeiro A expresso fica mais clara se escrita assim: A**(B**C)
DFAT/Folha Atividades/FiscompFA Expresses Numricas 7
Exemplo: W = V * T - G / 2 * T ** 2 W=V T
G
2
T
2

neste exemplo : 1) operao
A=T
2
2) operao B=VT
3) operao C=
G
2
4) operao D=CA
5) operao W=BD resultado final
7. Expresso Numrica
Expresses numricas representam clculos numricos e so formadas com operadores numricos e operandos
numricos. A avaliao (o clculo) da expresso leva a um valor nmero simples (um valor escalar).
Exemplos: E = m * c**2
E=mc
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 intrnsecos (** * / + ) so intrnsecos porque eles so disponibilizados pelo Fortran. Eles
so preexistentes. Existem tambm os operadores que podem ser construdos pelo usurio que neste caso no so
intrnsecos. Eles sero visto posteriormente.
7.1-Diviso Inteira
Causa de muitos erros nos programas para os programadores desatentos.
A diviso inteira feita pela diviso de duas entidades inteiras e o seu resultado um inteiro. Porque um inteiro
no tem a parte fracionria (decimal) ela eliminada na resposta, ento:
1
2
1/2 (1-2) esta diviso inteira gera como resposta o nmero zero no o nmero 0.5 como seria
desejado
por sua vez a diviso real
1.0
2.0
1.0/2.0 (1.0-2.0) gera o nmero 0.5 como esperado
ATENO: 1/2 0 enquanto 1.0/2.0 0.5
muito importante lembrar que estes dois tipos de dados numrico (no computador) so diferentes. O que faz
com que as operaes matemticas realizadas com os inteiros e os reais no computador gerem valores diferentes.
Para melhorar e reforar este entendimento, vamos analisar a operao de diviso do nmero 1 pelo nmero 4.
Na matemtica esta diviso gera o valor 0.25.
Por outro lado, no computador o resultado depende do tipo numrico utilizado:
nmeros tipo real:
1.0
4.0
=0.25000000
nmeros tipo inteiro:
1
4
=0

8 DFAT/Folha Atividades/FiscompFA Expresses Numricas
Usando nmeros reais a resposta obtida a esperada (0.25000000 ou 0.25) enquanto, com nmeros inteiros a
resposta diferente do que se espera porque como o valor inteiro resultante da diviso no pode conter a parte
decimal (fracionria) ela foi descartada, o que faz com que a resposta obtida seja o nmero zero. Claramente
diferente da matemtica.
Voc pode pensar que isto um erro. inesperado, mas no um erro, porque isto ocorre devido a forma como
internamente o computador guarda a e manipula os nmeros.
Ao encontrar o nmero 1 (no 1.0) e o nmero 4 (no o 4.0) o Fortran sabe que eles so nmeros inteiros e
portanto a diviso que est sendo feita uma diviso entre nmeros inteiros ou como usualmente
chamamos: diviso inteira. Para fazer a operao de diviso 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 operao de diviso obtendo o resultado 0.25000000
como a operao de diviso est sendo feita entre dois inteiros o resultado da diviso tambm ser
um inteiro, por isto o Fortran transforma o resultado obtido (0.25000000 que um nmero real) em
um nmero inteiro. Porque inteiros no tem a parte fracionria, o resultado obtido da diviso inteira
ser o nmero zero
Percebeu? Nada de errado. Estranho apenas para quem no conhece a regra utilizada pelo Fortran
para fazer diviso inteira
por outro lado, por exemplo, dividir 6 por 3 d a resposta correta tanto na diviso inteira quanto na
diviso real: 6/3 = 2 e 6.0/3.0 =2.0
Importante: no esquea que diviso inteira e diviso real pode produzir resultados distintos no computador
8. Expresses Modo Misto
O Fortran permite o uso de expresses que utilizam operando de tipos diferentes.
A regra geral que o tipo mais simples convertido para o tipo mais complexo (coerced forada a agir como).
Isto aplica-se a operao no a expresso como um todo.
Porque o tipo inteiro um tipo mais simples que o tipo real as operaes em uma expresso mista sero
realizadas pela aritmtica real no 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 nmero 3 e
3 * 4.0 12.0 (esperado 14.0; obtido 12.0)
RECOMENDAO: no deixe expresses mistas tomarem conta do seu programa, pois isto fonte de
muitos erros difceis de serem encontrados.
Transforme as expresso mistas em expresso simples.
Exemplo: real(7/2)*4.0 gera o valor 14.0 porque uma expresso modo simples
real(1)/real(2) gera o valor 0.5 porque uma diviso modo real simples
real(1/2) gera o valor 0.5 mesmo que a anterior, porm escrita mais simples
DFAT/Folha Atividades/FiscompFA Expresses Numricas 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 Atribuio
A instruo de atribuio (comando de atribuio) a forma utilizada para escrever um valor num objeto (guardar
escrever na posio de memria reservada para o objeto de dado especificado).
A forma geral do comando de atribuio : varivel = expr
ATENO: o sinal de igual no tem a mesma interpretao que o sinal de igual na matemtica.

necessrio entender que a melhor representao seria uma seta:
a seta no pode ser utilizada porque os caracteres possveis de serem utilizados num programa Fortran
NA PRTICA so aqueles contidos na tabela ASCII (posies 32 a 126) e a seta no est disponvel
a instruo v = g*t significa calcule a expresso colocada no lado direito do sinal de igual gt e
guarde (escreva na posio de memria) o valor calculado na varivel v. A melhor forma de representar isto seria:

v -gt
mas, infelizmente esta representao no possvel de ser utilizada no Fortran. Por isto utiliza-se o sinal de
igual (=) que est disponvel na tabela ASCII (a seta conforme dito no est disponvel).
Se a expresso utilizada do tipo mista o resultado primeiro convertido para o mesmo tipo da varivel que vai
receber o valor calculado e depois guardada na (atribuda ) varivel. Isto significa que possvel haver perda de
dados. Portanto muita ateno ao escrever expresses no Fortran.
Por exemplo, com : integer:: N
real : x, y
as expresses: 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, NO deixe expresses mistas tomarem conta do seu programa.
10. Acumulador
Uma expresso muito utilizada em computao aquela que chamamos de acumulador.
(porque, neste exemplo, o resultado um somatrio tambm se usa o termo : somador).
Uma expresso acumuladora similar a expresso: n = n + 1 ou n = n + a
A expresso acumuladora muito utilizada para gerar uma sequncia de nmeros.
Por exemplo, quando se deseja criar a sequncia 1 2 3 4 5 6 7 . . . .
esta sequncia pode facilmente ser implementado no computador usando-se a expresso acumuladora:
10 DFAT/Folha Atividades/FiscompFA Expresses Numricas
n = n + 1
matematicamente isto inconsistente
porque fazendo-se n = 5 teramos: 5 = 5 + 1 5 = 6, o que uma inconsistncia matemtica
mas claro que a coisa toda no se passa assim no computador.
No computador o processo assim:
n= 1 a varivel n inicia com o valor 1
no passo 1, adiciona-se 1 a varivel n
n = 1 + 1 n=2 que ento passa a ter o valor 2
no passo 2, adiciona-se 1 a varivel n
n = 2 + 1 n=3 que passa a ter o valor 3. Se forem efetuados apenas 2 passos a varivel n
termina com o valor 3
11. Sada de Dados para a Tela do Computador
O processo de transferncia de dados permite que dados possam tanto entrar quanto sair de um programa.
A forma mais simples de sada de dados aquela que mostrar os dados na tela do computador. A instruo
PRINT*, utilizada para isto.
A instruo print*, chamada de sada com formato livre (sada usando lista dirigida ).
A forma geral da instruo : print formatos, lista
onde: formatos especifica os formatos que sero utilizados com as variveis da lista
o formato permite controlar a aparncia dos dados (forma como os dados da lista sero
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 prprio formato default (que so parecidos, mas no so
iguais). A instruo PRINT*, a instruo utilizada para escrever na tela do computador
lista
uma lista de entidades (objetos) separadas por vrgula
DFAT/Folha Atividades/FiscompFA Expresses Numricas 11
Outra forma de enviar dados para a tela do micro aquela que faz uso da instruo write.
A instruo write(unit=*, fmt=*) implementa a mesma ao que a instruo print* , isto , envia a lista que
for utilizada com ela para a tela do micro.
A forma geral da instruo : write(unit = u, fmt = formatos) lista
onde:
u
formatos
Nmero inteiro que especifica a unidade . O * significa a tela do micro
os formatos controlam a forma como os dados da lista sero escritos. O * significa lista
dirigida, neste caso sada (ou formato livre)
lista
uma lista de entidades (objetos de dados) separadas por vrgula
LISTA DIRIGIDA
a lista dirigida utilizada quando se escreve um asterisco ( * ) no formato.
A instruo PRINT* uma instruo 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 sada vazia, portanto a
instruo ir imprimir na tela do micro (lista dirigida sada) uma linha vazia.
Exemplo:
program s_01
!-------------------------------------------
!-- Programa exemplo de sada 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 varivel real chamada
var e a inicializa com o valor 10.5.
Depois, utiliza a instruo de sada de dados
print*,"O valor de var igual a:", var
que ao utilizar um asterisco ( * ) no formato faz uso do
formato lista dirigida sada que em termos
prticos pode ser entendido como formato livre.

Esta instruo 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, variveis, expresses e strings (cadeias de caracteres) separadas por vrgulas.
Neste caso, nossa lista possui duas entidades:
um string
a sentena O valor de var igual a: delimitada por aspas
[as aspas ( " ) so utilizadas para marcar o incio 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 apstrofo ( ' ).
Entretanto, ao se utilizar um deles (na abertura ou no fechamento) o outro ser
obrigatoriamente do mesmo tipo, ento:
print*, O valor de var1 igual a: e
print*, ' O valor de var1 igual a: ' podem ser utilizadas sem problema algum
uma varivel
uma varivel do tipo real chamada var
12 DFAT/Folha Atividades/FiscompFA Expresses Numricas
No esquea: as entidades utilizadas na lista so separadas por vrgula.
Exemplo:
program s_01a
!----------------------------------------------
!-- Programa exemplo de sada de dados na tela
!-- usando a instruo 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 instruo write
para a sada de dados
write(unit=*,fmt=*) . . . . .
que faz uso do asterisco ( * )
unit=* unidade (monitor)
fmt=* formato (lista dirigida sada)

Observe que a instruo 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 instruo READ*, que permite a entrada de dados
pelo teclado. A forma geral da instruo : read formatos, lista-variveis
onde: formatos especifica os formatos que sero utilizados com as variveis lidas
a utilizao de um formato na entrada de dado pelo teclado uma tcnica que,
muito frequentemente, leva a erros pois o usurio tem que se preocupar com o
formato dos dados que est fornecendo ao programa. Por isto recomendado
que no 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 instruo READ*,
a instruo de leitura que usualmente utilizada
lista-variveis
uma lista de variveis separadas por vrgula
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 nmeros"
read*, x,y
z = x + y
print*,x, "+", y, "=", z
end program ent_01
O programa ent_01 solicita que o usurio entre dados
pelo teclado.
Para isto ele utiliza a instruo 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 instruo de entrada ento uma lista
dirigida entrada

Observe tambm que este programa est utilizando as instrues:
print*,"Entre com 2 nmeros"
print*,x, "+", y, "=", z
DFAT/Folha Atividades/FiscompFA Expresses Numricas 13
que utilizam lista dirigida sada, 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 instruo write
!-- AUTOR: Anibal L. Pereira 03/10/2010
!-------------------------------------------
implicit none
real::x, y, z
print*,"Entre com 2 nmeros"
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 usurio entre dados
pelo teclado, usando a instruo
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 espao em branco ou ento separada por vrgula
enquanto no se pressionar a tecla <enter> possvel fazer correes nos dados que esto sendo
escritos
pode-se tambm pressionar tecla <enter> aps a entrada de cada um dos dados
neste caso, depois de pressionar a tecla <enter> no mais possvel fazer qualquer correo no
dado fornecido.
13. Instruo PRINT usando Formato
A instruo print conforme destacado tem a forma:
print formatos, lista
onde: formatos especifica os formatos que sero utilizados com as entidades na lista
usa-se o formato para controlar a aparncia dos dados que sero escritos na tela do
computador
lista
Identifica as entidades (objetos) que sero escritas
Se for utilizada a instruo write(unit=*
write(unit=*, fmt=formatos) lista
onde: formatos especifica os formatos que sero utilizados com as entidades na lista
lista
Identifica as entidades (objetos) que sero escritas
14 DFAT/Folha Atividades/FiscompFA Expresses Numricas
DESCRITOR DE EDIO DE DADOS
Existem vrios descritores de edio de dados que podem ser utilizados, mas neste momento vamos destacar os
descritores: A, I, F, E, ES, EN
A[w]
Alfanumrico
descritor de edio de dado caractere utilizado para formatar o (controlar a aparncia) caractere
Aw
w tamanho do campo , isto , quantos caracteres sero utilizados
Iw[.m]
Inteiro
descritor de edio de dado inteiro utilizado para formatar nmeros inteiros
Iw.m
w tamanho do inteiro, isto , quantos dgitos sero utilizados para mostrar o inteiro
m garante que pelo menos m dgitos sero mostrados. Zeros anteriores sero usados se necessrio
Fw.d
Real
descritor de edio de dado real utilizado para formatar nmeros reais
Fw.d
w tamanho total do campo do real, isto , quantas posies sero utilizados para mostrar o real
incluindo o sinal e o ponto decimal
d nmero de dgitos depois do ponto decimal
Ew.d
Real
descritor de edio de dado real utilizado para formatar nmeros reais
Ew.d
w tamanho total do campo do real, isto , quantas posies sero utilizados para mostrar o real
incluindo o sinal e o ponto decimal
d nmero de dgitos depois do ponto decimal
h tambm a forma Ew.d[Ee] que no abordaremos neste momento
ENw.d
Real
descritor de edio de dado real utilizado para formatar nmeros reais
mantissa maior que 1 e menor que 1000
ENw.d
w tamanho total do campo do real, isto , quantas posies sero utilizados para mostrar o real
incluindo o sinal e o ponto decimal
d nmero de dgitos depois do ponto decimal
h tambm a forma ENw.d[Ee] que no abordaremos neste momento
ESw.d
Real
descritor de edio de dado real utilizado para formatar nmeros reais
mantissa maior que 1 e menor que 10
ESw.d
w tamanho total do campo do real, isto , quantas posies sero utilizados para mostrar o real
incluindo o sinal e o ponto decimal
DFAT/Folha Atividades/FiscompFA Expresses Numricas 15
d nmero de dgitos depois do ponto decimal
h tambm a forma ESw.d[Ee] que no abordaremos neste momento
FATOR DE REPETIO
Todos estes descritores de edio de dados podem ser multiplicados por um nmero inteiro que representa a
quantidade de repeties do descritor de edio 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 nmero"
A20 "Entre com um nmero" (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 formatao
!-- AUTOR: Anibal L. Pereira 28/06/2010
!---------------------------------------------
implicit none
integer:: n=678
real:: x=35.141592654
print*,"Entre com um nmero"
print"(A20)","Entre com um nmero"
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 nmero, que
est sendo escrita duas vezes no programa, no
tem nenhum significado para que o usurio
entre com um nmero, pois no h instruo de
entrada de dado no programa
A sada deste programa mostrada abaixo:
Entre com um nmero
Entre com um nmero
678
0678
35.142
35.1
0.351E+02
0.4E+02
35.14E+00
35.1E+00
3.514E+01
3.5E+01
16 DFAT/Folha Atividades/FiscompFA Expresses Numricas
program ex4
!---------------------------------------------
!-- Programa exemplo de formatao
!-- AUTOR: Anibal L. Pereira 28/06/2010
!---------------------------------------------
implicit none
integer:: n=678
real:: x=35.141592654
print"(a20)","Entre com um nmero"
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 nmero', no
significa uma ao que o usurio deva fazer,
pois neste programa, tambm, no h instruo
de entrada de dado
A sada deste programa mostrada abaixo:
Entre com um nmero
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 edio de formato do dado numrico no compatvel com o valor a sada 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 sada
program ex5
!---------------------------------------------
!-- Programa exemplo de formatao
!-- AUTOR: Anibal L. Pereira 28/06/2010
!---------------------------------------------
implicit none
integer:: n=678
real:: x=35.141592654
print"(a11)","Entre com um nmero"
print"(i2)", n
print"(f5.3)", x
print"(E7.3)", x
print"(EN8.2)", x
print"(ES8.3)", x
end program ex5
Novamente: No h instruo de entrada de dado
A sada deste programa mostrada abaixo:
Entre com u
**
*****
*******
********
********
program ex6
!---------------------------------------------
!-- Programa exemplo de formatao
!-- 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 sada deste programa mostrada abaixo:
678678678678
678678678678
678 678 678 678
678 678 678 678
35.142 35.142
0.351E+02 0.351E+02 0.351E+02
DFAT/Folha Atividades/FiscompFA Expresses Numricas 17
14. Controle de Fluxo
Um programa de computador inicia a sua execuo na primeira instruo do programa e vai, sequencialmente,
executando as outras instrues na ordem em que elas aparecem (em que elas so escritas no cdigo fonte).
Entretanto, muitas vezes necessrio altera a ordem de execuo das instrues existente no programa. Isto pode
ser feito com declaraes de controle de fluxo.
14.1. Instruo IF
Uma forma de se fazer o controle de fluxo de um programa utilizando a instruo IF. A instruo IF a forma
mais simples de controle de fluxo. Ela tem a seguinte forma:
if(expr) instruo-fortran
A instruo IF avalia a expresso colocada entre parnteses e se o resultado obtido for verdadeiro ela executa a
instruo-fortran especificada. Caso o resultado da avaliao seja falso a instruo-fortran no executada.
O fluxograma ao lado mostra a instruo IF
Observe que a instruo-fortran no 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 ento 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 numrico
fornecido pelo usurio.
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
a instruo de atribuio tp="maior" executada ou no, conforme o resultado da avaliao da expresso
entre parnteses na instruo IF.
18 DFAT/Folha Atividades/FiscompFA Expresses Numricas
O fluxograma ao lado mostra o programa.
Observe o controle de fluxo est sendo feito pela
instruo IF
a atribuio do valor maior varivel caractere tp ser
ou no realizada, conforme o nmero que o usurio
entra no programa.
Portanto h um controle no fluxo do programa, como
desejado
14.2. Construo IF
Quando h a necessidade de se executar mais de uma instruo Fortran necessrio utilizar a construo IF. A
construo IF tem a seguinte forma:
if(expr) then
bloco A
else
bloco B
end if
agora, quando expr for avaliada como sendo verdadeira a construo if executa o conjunto de instrues colocado
no bloco A (entre o then e o else). Por outro lado se a avaliao de expr for falsa o conjunto de instrues 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
quando massa_que_levanta for maior que 61 a varivel p
calculada pela expresso
mg
10
. Caso ela seja menor ou igual a 61
ser calculada por mg
DFAT/Folha Atividades/FiscompFA Expresses Numricas 19
Forma simplificada da construo 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 construo IF (sem a instruo else) faz a mesma tarefa da instruo IF, porm permite executar mais
de uma declarao.
No exemplo, alm de atribuir o valor 10 varivel tempo, tambm atribu o valor 3 varivel massa.
14.3. Construo IF-ELSEIF
A forma geral de uma construo IF o IF-ESLSEIF-ELSE-ENDIF:
IFELSEIFELSEENDIF
Esta construo 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 execuo do bloco 1 o controle do programa passa para a instruo 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 trmino passa para a instruo que segue o IF
se expr 2 for falsa, o fluxo segue para o prximo elseif
expr 3
se expr 3 for verdadeira
o bloco 3 escutado
ao trmino segure para a instruo depois do IF
se expr 3 for falsa, o bloco_else ser executado e o programa, ento, segue adiante
20 DFAT/Folha Atividades/FiscompFA Expresses Numricas
14.4. Construo CASE
Uma construo CASE (caso) bastante til para lidar com alternativas que so mutuamente exclusivas, onde a
ordem em que elas aparecem no importante (levada em conta).
Uma construo 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 expresso caso que determina a seleo do caso (expr_caso) pode ser uma expresso inteira, caractere ou
lgica. Expresso real no pode ser usada.
Quando uma declarao select case encontrada o valor da expresso expr_caso calculado e o bloco de
declaraes que segue a declarao caso apropriada (se existir) executada.
Uma declarao caso tem a forma:
case (lista_valor_caso)
ou
case default
Numa construo caso s pode existir um declarao default. O bloco de declarao referente declarao
default s executado se nenhuma declarao 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*,"No circulo nem &
& retngulo"
end select
A lista_valores_caso pode tomar uma das seguintes formas:
Faixa de valores Condio de ocorrncia
valor_caso-1:valor_caso_2
valor_caso:
:valor_caso
valor_caso-1<expr_caso<valor_caso-2
valor_caso<expr_caso
valor_casoexpr_caso
sobreposio de faixas no permitido
a construo caso concluda com a execuo do bloco selecionado, se existir algum. No permitido a
execuo de mais de um bloco
se no houver seleo de algum caso e no existir a declarao default a construo caso acaba sem a
execuo de qualquer bloco
DFAT/Folha Atividades/FiscompFA Expresses Numricas 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. Expresso Relacional
As expresses utilizadas na instruo IF e na construo IF com muita frequncia so expresses relacionais.
Uma expresso relacional, estabelece um relacionamento entre duas entidades do programa. Sua forma geral :
2 exp 1 exp operador
onde: exp1 = expresso aritmtica ou caractere
operador = operador relacional
exp2 = expresso aritmtica ou caractere
Os operadores relacionais que pode ser utilizados para escrever as expresses relacionais so:
Operadores relacionais:
operador significado
= = igual
/ = diferente
> maior que
> = maior ou igual a
< menor que
< = menor ou igual a
22 DFAT/Folha Atividades/FiscompFA Expresses Numricas
Por exemplo: a expresso b
2
4ac pode ser escrita como: b**2 >= 4*a*c e o resultado desta avaliao
s pode ser verdadeiro ou falso.
O valor de uma expresso relacional sempre um valor lgico: verdadeiro ou falso.
Exemplos: operao resultado
7 < 10 .TRUE.
7 < = 10 .TRUE.
7 = = 10 .FALSE.
7 > 10 .FALSE.
7 < = 7 .TRUE.
"A" < "B" .TRUE. ! verdade porque avaliado na ordem alfabtica
(7+3) < (6+11) .TRUE.
16. Variveis Numricas
A ideia de varivel numrica no Fortran similar quela utilizada no contexto matemtico.
Por exemplo, sabe-se pela matemtica que a rea de um crculo calculada pela expresso: rea=nr
2
onde
r o raio do crculo.
Observe que a expresso utilizou o smbolo n (pi do alfabeto grego). Este smbolo no pode ser
representado no Fortran 2003. Por este motivo, usa-se o nome pi para representar este smbolo
porque o Fortran foi desenvolvido por quem utiliza a lngua inglesas, caractere que no esto na tabela
ASCII no so utilizados no Fortran. A exceo fica para os caracteres utilizados nas constantes literais
caractere. Portanto acentos, c-cedilha e outros smbolos que no existem na tabela ASCII s podem ser
usados em constante caractere
recorde que o Fortran representa a operao de multiplicao por um asterisco ( * )
e a operao exponenciao por dois asteriscos ( ** )
por isto a expresso rea=nr
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
varivel no Fortran no pode ter acento
Na equao area = pi*r**2
cada varivel que aparece do lado direito do sinal de igual (pi e r) tem que ter um valor para que a
expresso toda possa ser avaliada
depois que a expresso colocada no lado direito do sinal de igual calculada o resultado atribudo
varivel existente no lado esquerdo do sinal de igual
Na matemtica possvel escrever a expresso
rea=nr
2
assim
nr
2
=rea
.
As duas expresses representa a mesma coisa, portanto podem ser intercambiadas sem problema
No Fortran (e para a grande maioria das linguagens de computao) este tipo de inverso proibida.
Aquilo que se deseja calcular tem que estar colocado no lado direito do sinal de igual na expresso.
Exemplos: correto: x = 2 + 5
errado: 2 + 5 = x
Variveis numricas no Fortran podem ser de 3 tipos: inteira, real, complexa
inteira integer
real real
complexa complex
DFAT/Folha Atividades/FiscompFA Expresses Numricas 23
Numa primeira vista o conceito de tipo nos nmeros parece estranho, principalmente quando pensamos em
nmeros inteiros e nmeros reais. Mas, importante ter uma boa compreenso sobre esta distino, para que no se
cometa erros grosseiros nos clculos que sero realizados no computador.
Neste texto a ateno est voltada para os nmeros inteiros e reais, porque nmeros complexos so construdos
utilizando-se dois nmeros reais. Nmeros complexos sero usados posteriormente.
17. Definindo Variveis Numricas
A definio de uma varivel (definio de tipo de uma varivel) tem a seguinte forma geral:
TIPO atributos :: lista-variveis
para as variveis numricas tipo inteiro e tipo real, a forma mais simples de uso desta instruo de declarao de
tipo :
integer:: lista-variveis
real :: lista-variveis
Exemplos: integer:: num, var1, var2
real:: massa, var3, var4
Nestes exemplos nenhum atributo foi utilizado. A lista-variveis uma lista de nomes de variveis
separados por vrgula.
Se as variveis fossem complexa a instruo ficaria assim: complex :: z1, z2
18. Construo DO WHILE
Processo de repetio
A repetio de uma instruo ou um conjunto de instrues algo muito til. O Fortran dispe de algumas
formas de fazer a repetio de um bloco. No momento ser apresentado a construo DO WHILE.
A construo DO WHILE permite a execuo repetitiva de um bloco de instrues enquanto um dada condio
satisfeita.
A forma de uma construo DO WHILE :
DO WHILE(expr-lgica)
. . . .
boco-do-while
. . . .
END DO
onde:
expr-lgica uma expresso lgica que ser avaliada em verdadeira ou falsa
A construo DO WHILE (while = enquanto) especifica que o bloco-do-while ser repetido enquanto a condio
especificada permanecer verdadeira.
24 DFAT/Folha Atividades/FiscompFA Expresses Numricas
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 construo DO WHILE no ser executada,
pois a condio k<4 com k = 20 sempre ser falsa
19. Arquivo
Usualmente os dados fornecidos um programa e/ou gerados por ele so preservados num arquivo, o que
possibilita que eles sejam reutilizados sempre que forem necessrios.
open(unit=20, file="pontos.dados", status="new", action="write")
. . .
write(unit=20, fmt=*) i, x
. . .
close(unit=20)
As declaraes de entrada e sada (read e write), quando se referem a um arquivo em particular
(file="<nome-arquivo>"), utilizam o nmero da unidade (unit=<nmero>) especificada na declarao open. O
nmero utilizado usualmente um nmero inteiro positivo (entre 10 e 99).
Para o Fortran o usual utilizar o nmero 6 (unit=6) para conectar o monitor do computador e o
nmero 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 necessrios ao
funcionamento do seu compilador. Usualmente o fabricante utiliza um nmero entre 0 e 9. Por
segurana, ao conectar uma unidade aos seus programas, utilize valores entre 10 e 99, porque
assim voc muito provavelmente no sobrescrever nenhuma unidade pr-conectada pelo
compilador e desta forma manter o Fortran funcionando corretamente.
A declarao 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 declarao (pontos.dados).
usual, na declarao open, utilizar o nome do arquivo, a unidade, o estado (status="new") e a ao
(action="write") que pode ser executada.
Minimamente possvel utilizar a declarao open assim: open(unit=, file="")
ento: open(unit=20, file="arq.dados")
Declarao com mais atributos:
open(unit=20, file="arq.dados", status="old", action="readwrite", form="formatted", &
access="sequential", iostat=ios, position="rewind")
DFAT/Folha Atividades/FiscompFA Expresses Numricas 25
As opes so:
FORM=<exp-caracter>
exp-caracter pode ser um dos seguintes:
formatted (valor default utilizado se no 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 varivel inteira que igual zero se o comando executou corretamente e um valor
positivo caso contrrio
valor igual a zero nenhum erro ocorreu
valor positivo erro (o valor indicar que tipo de erro ocorreu)
valor negativo fim de arquivo encontrado no ocorreu erro ou
fim de registro encontrado no ocorreu erro
Os valores tanto positivos quanto negativos so definidos pelo fabricante do compilador (particulares
do compilador), isto , cada fabricante tem a liberdade de utilizar o valor que desejar para indicar
condies diferentes, mas obrigatoriamente os valores sero 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 incio do arquivo)
Observao: dados de entrada/sada que sero usados (escritos e lidos) com o mesmo compilador pode ser do tipo
no formatado (unformatted). Isto economiza espao em disco e elimina erro de arredondamento decorrente da
converso dos dados da representao interna do computador para a representao formatada (externa).
Ateno: dados no formatados devem ser usado principalmente quando se deseja guardar os dados
temporariamente (nmero muito grande de dados) para uso posterior pelo mesmo programa utilizando o
mesmo compilador (geralmente no mesmo tipo de computador). Tirando esta situao, geralmente, no
uma boa ideia usar dados no formatados em arquivos. Evite o uso de arquivos no formatados !
Para gerar arquivos no formatados (unformatted) tem-se que explicitamente declarar isto no comando open,
porque por default os arquivos so abertos como formatados.
26 DFAT/Folha Atividades/FiscompFA Expresses Numricas
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. Cabealho
O preenchimento do cabealho uma ao fundamental. O cabealho faz parte da documentao interna do
programa. No deixe de escrever no cabealho os dados que atualizam sua identificao.
Esta tarefa no opcional. obrigatria.
Um cabealho ter informaes significativas, tais como:
nome da instituio
nome do programa
especificao do programa (propsitos)
verso do programa
identificao do autor
identificao dos colaboradores
data da criao do programa e suas atualizaes
descrio de como us-lo
Entretanto, nossos programas disponibilizam informaes mnimas (propsito, nome do arquivo, autor, autores
das revises e respectivas datas), por isto os cabealhos que utilizamos so similares a:
!------------------------------------------------------------------------------
! Propsito: Este programa l 3 nmeros e calcula a soma e a mdia deles
!------------------------------------------------------------------------------
! Arquivo: soma_e_media.f03
! Autor: Anibal L. Pereira 11/06/2010
!Revises:
!------------------------------------------------------------------------------
21. Destacando Conjunto de Instrues
O Fortran no tem nenhum mecanismo para dar destaque a um conjunto de instrues, a no ser os blocos de
instrues utilizados nas construes.
Mas, porque a legibilidade do programa uma caracterstica muito importante, nosso estilo de programao
utiliza destacar conjuntos de instrues por meio de dois mecanismos,
comentrios
paragrafao
DFAT/Folha Atividades/FiscompFA Expresses Numricas 27
COMENTRIOS
o seguimento de cdigos (tirados do programa soma_e_media) mostra claramente o procedimento a ser adotado.
!----------------------------------------------------
!--- solicita entrada de dados pelo usurio
!----------------------------------------------------
print*
print*, "Entre com 3 nmeros separados por espao ou vrgula"
read*, num1, num2, num3

!----------------------------------------------------
!--- realiza os clculos
!----------------------------------------------------
soma = num1 + num2 + num3
media = soma/quantidade_num
Observe que os comentrios utilizados (que so chamados de documentao interna) marcam claramente as
instrues que possuem uma "unidade lgica comum". Por isto elas foram destacados, conforme manda a boa
tcnica de programao.
Releia o programa soma_e_media e veja como, mesmo num programa simples, a identificao dos blocos
facilita a leitura e o entendimento do programa fonte.
Destacar conjuntos de instrues que esto ligadas por alguma lgica no uma tarefa opcional.
ao obrigatria quando se escreve os cdigos fontes de um programa.
O procedimento de dar destaque nos cdigos fontes do programa chamado de documentao interna.
PARAGRAFAO
A paragrafao a outra forma de dar destaque ao conjunto de instrues. Na realidade ela quase sempre
usada junto com a documentao interna.
A regra adotada em nossa disciplina usar de 2 a 4 espaos em branco para paragrafar o texto quando for
necessrio.
paragrafao: ato ou efeito de paragrafar
(usado para dar destaque a uma sentena ou conjunto de sentenas)
paragrafar: dividir em pargrafos
indentation: (traduo =>) denteao; entalhado; recorte
indent : (traduo =>) entalhe; pargrafo; recuar; dentar
22. Dicionrio
Observe as seguintes caractersticas no programa fonte calculo_imc listado a seguir:
program calculo_imc
!
!------------------------------------------------------------------------------
! Propsito: Calcula o ndice de massa corporal (IMC)
!------------------------------------------------------------------------------
! Arquivo: calculo_imc.f03
! Autor: Anibal L. Pereira 11/06/2010
!Revises: Anibal L. Pereira 15/02/2011
!
!------------------------------------------------------------------------------
implicit none
real:: altura, & ! altura do indivduo
peso, & ! peso do indivduo
imc ! ndice de massa corporal IMC

!-------------------------------------------
!--- entrada de dados pelo usurio
!-------------------------------------------
28 DFAT/Folha Atividades/FiscompFA Expresses Numricas
print*
print*, "Entre com sua altura em metros: exemplo 1.67 "
read*, altura
print*
print*, "Entre com seu peso em kg"
read*, peso

!-------------------------------------------
!--- clculo do IMC
!-------------------------------------------
imc = peso / (altura*altura)

!-------------------------------------------
!--- sada dos dados
!-------------------------------------------
print*
print"(a,f5.1,a,f8.5,a)","Seu IMC igual a ", imc," (", imc,")"
print*
print*, "Faa a sua avaliao"
print*
print*,"-------------------------------------------------------"
print*,"Clculo do IMC Situao "
print*,"-------------------------------------------------------"
print*,"abaixo de 18.5 voc est abaixo do seu peso ideal"
print*,"entre 18.5 e 24.9 Parabns - voc est no peso normal"
print*,"entre 25.0 e 29.9 voc est acima de seu peso ideal (com sobrepeso)"
print*,"entre 30.0 e 34.9 obesidade grau I"
print*,"entre 35.0 e 39.9 obesidade grau II"
print*,"40.0 e acima obesidade grau III"
print*

end program calculo_imc
Observe como as declaraes a seguir (copiadas do programa) evidenciam a construo de um dicionrio.
implicit none
real:: altura, & ! altura do indivduo
peso, & ! peso do indivduo
imc ! ndice de massa corporal IMC
O dicionrio foi construdo junto com as declaraes de definio de tipo das variveis.
O dicionrio um componente indispensvel da documentao interna de um programa. Na construo do
dicionrio utilizou-se linhas de continuao. O smbolo e-comercial " & " (ampersand em ingls) usado para
indicar que a linha tem continuao.
Ento as trs linhas do cdigo fonte
real:: altura, & ! altura do indivduo
peso, & ! peso do indivduo
imc ! ndice de massa corporal IMC
para o compilador Fortran 2003, depois de retirado os comentrios e de usar adequadamente o smbolo de
continuao, so vistas como uma linha nica
real:: altura, peso, imc
O objetivo do dicionrio identificar com clareza e exatido as variveis que esto sendo usadas no programa,
esclarecendo seu significado, da o nome dicionrio.
Observe que por se ter usado nomes significativos nas definies das variveis o dicionrio
ficou redundante, mas mesmo assim importante que ele seja escrito no programa.
O dicionrio, como dito, no opcional, obrigatrio em todos os programas.
DFAT/Folha Atividades/FiscompFA Expresses Numricas 29
23. Sequncia
Virtualmente todas as funes encontradas na matemtica aplicada podem ser representadas por sries infinitas.
Por exemplo, uma integral no elementar pode ser descritas por uma srie de potncias e ento esta srie de
potncia (por ser mais simples de ser trabalhada) utilizada para a obteno da soluo da integral.
Porque sequncia o passo inicial no entendimento de srie, iniciamos por ela.
Sequncia
Chama-se ao conjunto ordenado de nmeros: a
1,
a
2,
a
3,
a
4,
., a
n
,. , representado por
a
n
de sequncia.
Ento: 1, 3,5, 7, 9,., 2n1,. uma sequncia representada por 2 n1
Quando o nmero de termos numa sequncia ilimitado, a sequncia chamada de sequncia infinita. Caso
contrrio uma sequncia finita.
O smbolo . que aparece no final da sequncia indica que ele uma sequncia infinita.
24. Sries
Dada uma sequncia de nmeros, por exemplo: a
1,
a
2,
a
3,
a
4,
., a
n
possvel escrever a expresso
a
1
+a
2
+a
3
+a
4,
.+a
n
. Esta expresso chamada de srie de n termos.
Uma srie infinita uma expresso do tipo : a
1
+a
2
+a
3
+a
4
+.+a
n
+. que, obviamente, tem infinitos
termos.
Dada uma srie, a obteno da soma da srie, por exemplo, da srie: 1+3+5 obtida pela adio de seus
termos. Ento, para a srie mostrada temos uma soma de 9. Porque a srie finita e tem somente 3 termos usual
representar esta soma por S
3
=9
De uma forma geral pode-se escrever: S
n
=a
1
+a
2
+a
3
+a
4,
.+a
n
Agora, considere a srie infinita
1
12
+
1
23
+
1
34
+
1
45
++
1
n(n+1)
+ .
possvel escrever as seguintes somas parciais :
S
1
=
1
2
, S
2
=
1
2
+
1
6
=
2
3
, S
3
=
1
2
+
1
6
+
1
12
=
3
4
, ...
que nos leva a seguinte expresso geral para a soma de n termo da srie: S
n
=
n
( n+1)
Esta srie chamada de srie telescpica. Usando a expresso geral (mostrada aqui sem deduo) pode-se calcular
a soma parcial para qualquer nmero de termos, ento:
n=9 S
9
=
9
10
=0.9
n=99 S
99
=
99
100
=0.99
n=999 S
999
=
999
1000
=0.999
30 DFAT/Folha Atividades/FiscompFA Expresses Numricas
n=9999 S
9999
=
9999
10000
=0.9999 e assim por diante.
fcil verificar que a soma parcial S
n
desta srie vai se tornando cada vez mais prxima de 1 quando o
nmero de termos adicionados vai crescendo. Para um valor muito grande de termos, podemos escrever:
lim
n-
S
n
=1
. Por este motivo, o valor numrico atribudo a esta srie 1.
Usando este raciocnio, pode-se generaliz-lo e estabelecer que se a soma parcial S
n
de uma srie satisfaz a
equao
lim
n-
S
n
=S
a srie dita convergir para a soma S e podemos escrever:
S=a
1
+a
2
+a
3
++a
n
+
Se este limite S no existe, a srie dita divergir e nenhum valor numrico pode ser atribudo srie.
Existe um rea da matemtica dedicada ao estudo de sries infinitas. Neste estudo aparece a questo sries
convergentes e divergentes. As sries que convergem nos levam a muitos conceitos teis entre os quais o de
integral.
Notao Sigma:
Sries infinitas so frequentemente escritas numa notao condensada:

k =1

a
k
=a
1
+a
2
+a
3
++a
n
+
O ndice k chamado de ndice mudo, porque pode ser substitudo por qualquer outro ndice com o mesmo
efeito (isto , ouso de qualquer ndice faz o mesmo efeito), ento:

k =m
n
a
k
=

j=m
n
a
j
=

p=m
n
a
p
O operador

. um operador linear, isto :

(oa
n
+b
n
)=o

a
n
+

b
n
se as sries

a
n
e

b
n
so convergentes e o e so constantes.
Grficos:
O estudo de sries fica muito mais fcil de ser apreciado (estudado, entendido e apreciado) se a srie puder ser
mostrada como um grfico. Nem sempre isto conveniente, mas se for possvel muda completamente a percepo
do que se est estudando e/ou trabalhando.
Por exemplo, a srie 0.035+0.125+0.100+0.007+0.090+0.012+0.037+0.045+0.002+
quando visualizada na forma grfica:
DFAT/Folha Atividades/FiscompFA Expresses Numricas 31
fica muito mais amigvel, no?
Nem sempre a forma grfica a melhor forma para se trabalhar, mas certamente bastante informativa
(e visualmente mais agradvel) que a srie na sua forma numrica:
0.035+0.125+0.100+0.007+0.090+0.012+0.037+0.045+0.002+
Sries de Potncia e Sries de Taylor:
Porque o comportamento daquilo que nos interessa estudar e/ou conhecer pode ser representado
(caracterizado) por uma srie (geralmente por uma srie infinita) fica bastante evidente que sries infinitas (ou como
usualmente preferimos dizer, que funes) muito importante para nossos estudos e trabalho.
Como dito anteriormente, virtualmente todas as funes encontradas na matemtica aplicada (as descries do
comportamento daquilo que recebe nossa ateno) podem ser representadas por sries infinitas. Por este motivo, um
tipo de srie a srie de potncia muito importante e til em nossos estudos e trabalho.
Uma srie de potncia pode ser escrita assim: a
0
+a
1
x+a
2
x
2
++a
n
x
n
+
Escrita desta forma, ela destaca o fato dos termos serem dispostos em ordem crescente da potncia da varivel
x. Esta srie tambm pode ser escrita na sua forma compacta:

a
n
x
n
Porque a srie definida pela soma dos termos (das potncias) pode-se (por exemplo) diferenciar e integrar cada
termo individualmente e o resultado final (da srie) ser obtido pela soma total (e cada termo em si fcil de ser
diferenciado ou integrado. Muito mais fcil do que a funo total).
Por exemplo:
a integral cosseno de Fresnel

0
x
cos(t )dt , que aparece no estudo da difrao, pode ser facilmente calculada
se utilizarmos a srie cos(t )=1
t
4
2!
+
t
8
4!
++
(1)
n
t
4n
(2n)!
+ e ento integrarmos termo por termo:

0
x
cos(t )dt =

0
x
(
1
t
4
2!
+
t
8
4!
++
(1)
n
t
4n
( 2n) !
+
)
dx

0
x
cos(t )dt =

0
x
dx

0
x
t
4
2
dx+

0
x
t
8
24
dx++

0
x
(1)
n
t
4n
( 2n) !
dx+

0
x
cos(t )dt =x
x
5
10
+
x
9
216
++
(1)
n
x
4n+1
( 4n+1)(2n) !
+
Srie de Taylor
Se uma funo f ( x) possu uma srie convergente de Taylor, a soma parcial desta srie pode aproximar a
funo. Em outras palavras, clculos com uma funo complexa pode ser reduzida a clculos envolvendo
polinmios (e como vimos no exemplo, estes clculos so mais fcil de serem realizados).
Seja uma funo f ( x) diferencivel infinitamente no ponto x=a e na sua vizinhana (este tipo de funo
dita ser analtica em a) ento a frmula de Taylor (srie de Taylor) da funo pode ser escrita em potncias de
h=xa :
f ( x)= f (a)+
h
1!
f
'
(a)+
h
2
2!
f
' '
(a)+
h
3
3!
f
' ' '
(a)++
h
m
m!
f
(m)
(a)+
32 DFAT/Folha Atividades/FiscompFA Expresses Numricas
Exemplo:
Por exemplo, a funo f ( x)=sin ( x) diferencivel infinitamente (tem derivadas de todas as ordens). Ento,
no ponto a=1 a frmula de Taylor desta funo escrita assim:
f ( x)= f (a)+
h
1!
f
'
(a)+
h
2
2!
f
' '
(a)+
h
3
3!
f
' ' '
(a)++
h
m
m!
f
(m)
(a)+
sin( x)=sin(1)+hcos(1)
h
2
2
sen(1)
h
3
6
cos(1)+
h
4
24
sen(1)+ onde h=x1
A srie de Taylor nica, isto , no existe outra srie de potncia em h=xa que represente f ( x) .
Srie de Maclaurin
A srie de Taylor para uma funo onde a=0 chamada de srie de Maclaurin. Por exemplo, a srie de
Maclaurin de sin( x) :
h=xa=x
sin( x)=sin(0)+xcos(0)
x
2
2
sen(0)
x
3
6
cos(0)+
x
4
24
sen(0)+
sin( x)=x
x
3
3!
+
x
5
5!

x
7
7!
+=

n=0

(1)
n
(2n+1) !
x
2n+1
Mais detalhes sobre sries veja: http://en.wikipedia.org/wiki/Taylor_series (acessado em 10/02/2011)
25. Gnuplot
Detalhes em: http://www.gnuplot.info/ (acessado em 10/02/2011)
Um programa que possibilite a visualizao de funes, a construo de grficos a partir de dados fornecidos e o
ajuste de curvas pontos experimentais um programa bastante til e muito importante para quem trabalha na rea
cientfica. O Gnuplot um software que permite realizar estas tarefas de maneira bastante simples, por isto
utilizado na nossa disciplina.
Iniciando o gnuplot:
abra um terminal
digite gnuplot e pressione a tecla <enter>
O sistema iniciar a execuo do gnuplot
DFAT/Folha Atividades/FiscompFA Expresses Numricas 33
A sada no terminal do computador ser similar a:
anibal@anibaldsk:~$ gnuplot
G N U P L O T
Version 4.4 patchlevel 0
last modified March 2010
System: Linux 2.6.35-23-generic
Copyright (C) 1986-1993, 1998, 2004, 2007-2010
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help seeking-assistance"
immediate help: type "help"
plot window: hit 'h'
Terminal type set to 'wxt'
gnuplot>
Criando um grfico de uma funo:
no prompt do gnuplot
digite plot exp(-0.2*x) * sin(x) e pressione a tecla <enter>
No terminal:
Gnuplot> plot exp(-0.2*x) sin(x)
O resultado ser a abertura de uma nova janela onde ser mostrado o grfico da funo f ( x)=e
0.2x
sin( x)
Criando um grfico de pontos guardados num arquivo de dados:
dispondo-se de um arquivo de dados (chamado de pontos_01.dados) que contm dados (pontos) de uma dada
funo pode-se gerar o seu grfico assim:
no prompt do gnuplot
digite plot pontos_01.dados with lines e pressione a tecla <enter>
34 DFAT/Folha Atividades/FiscompFA Expresses Numricas
No terminal:
Gnuplot> plot "pontos_01.dados" with lines
O resultado obtido ser a figura mostrada ao
lado, admitindo que o arquivo
pontos_01.dados contenha os seguintes
valores:
0.0 0.000
1.0 0.054
2.0 -0.083
3.0 -0.300
4.0 0.260
5.0 0.14
6.0 0.58
Para sair do Gnuplot:
no prompt do gnuplot
digite quit e pressione a tecla <enter>
Para mais detalhes, leia a Nota interna Fiscomp-02 Visualizador de Grficos Gnuplot 4.4
Esta Folha contm
18 Atividades
05 atividades exemplos
04 atividades exemplos com ajustes e/ou acrscimos
07 atividades para serem feitas
02 atividades para serem ajustadas e/ou acrescidas
Seu professor de laboratrio (e/ou teoria) poder alterar esta relao !
Atividade 01
Entregar em meio magntico:
1. programa: soma_e_media soma_e_media.f03
2. arquivos: soma_e_media.dados
Exemplo/Acrscimo/Ajuste:
O programa define 5 variveis numricas do tipo real e 1 varivel do tipo inteira e faz clculos com elas
FAZER:
acrescente os cdigos fontes necessrios para salvar no arquivo soma_e_media.dados os dados que foram
fornecidos ao programa e o valor da mdia calculada pelo programa
Releia:
se necessrio, releia o item 19 Arquivo desta folha de atividades, que mostra os principias detalhes sobre arquivos
DFAT/Folha Atividades/FiscompFA Expresses Numricas 35
Escreva o programa soma_e_media, salvando-o no arquivo soma_e_media.f03.
Compile e execute o programa.
________________________________________________________________________________________
arquivo: soma_e_media.f03

program soma_e_media
!
!------------------------------------------------------------------------------
! Propsito: Este programa l 3 nmeros e calcula a soma e a mdia deles
!------------------------------------------------------------------------------
! Arquivo: soma_e_media.f03
! Autor: Anibal L. Pereira 11/06/2010
!Revises: Anibal L. Pereira 09/02/2011
!
!------------------------------------------------------------------------------
implicit none
real:: num1, num2, num3, soma=0.0, media=0.0
integer:: quantidade_num = 3
!----------------------------------------------------
!--- solicita entrada de dados pelo usurio
!----------------------------------------------------
print*
print*, "Execute o programa algumas vezes:"
print*, "Entre com nmeros pequenos, depois grande e depois muito grande"
print*, "e veja a sada produzida"
print*
print*, "Entre com 3 nmeros separados por espao ou vrgula"
read*, num1, num2, num3
!----------------------------------------------------
!--- realiza os clculos
!----------------------------------------------------
soma = num1 + num2 + num3
media = soma/quantidade_num
!----------------------------------------------------
!--- sada dos clculos para o vdeo do computador
!----------------------------------------------------
print*
print*,"Foram lidos", quantidade_num, "nmeros"
print*,"cuja soma igual a ", soma
print*,"e valor mdio igual a ", media
!------------------------------------------------------------
!--- sada Formatada dos clculos para o vdeo do computador
!------------------------------------------------------------
print*
print*,"---------------------------------"
print*, "mesma sada, mas agora formatada"
print*,"---------------------------------"
print*
print"(a,i1,a)","Foram lidos ", quantidade_num, " nmeros"
print"(a,f10.2)","cuja soma igual a :", soma
print"(a,f10.2)","e valor mdio igual a :", media
print*
print"(a,i1,a)","Foram lidos ", quantidade_num, " nmeros"
print"(a,ES10.2)","cuja soma igual a :", soma
print"(a,ES10.2)","e valor mdio igual a :", media
print*
print"(a,i1,a)","Foram lidos ", quantidade_num, " nmeros"
print"(a,EN10.2)","cuja soma igual a :", soma
print"(a,EN10.2)","e valor mdio igual a :", media
print*
!----------------------------------------------------
!--- salvando os dados e o clculo num arquivo
!----------------------------------------------------
< --fazer-- >
end program soma_e_media
36 DFAT/Folha Atividades/FiscompFA Expresses Numricas
Observe as seguintes caractersticas no programa:
nome do programa
o programa tem seu nome definido na instruo: program soma_e_media
cabealho
o programa possui um cabealho, que disponibiliza informaes sobre o propsito do programa e outras
informaes relevantes
INPLICIT NONE
o programa usa a declarao implicit none para anular a declarao implcita de tipo
declarao das variveis do tipo numrico
real:: num1, num2, num3, soma=0.0, media=0.0
integer:: quantidade_num = 3
a instruo real declara, neste exemplo, 5 variveis numricas do tipo real
a lista de variveis reais contm as variveis separadas por vrgula
a varivel soma e a varivel media foram inicializadas, isto , declaradas e definidas com o valor 0.0
a instruo integer declara uma nica varivel do tipo inteiro chamada quantidade_num e inicializa a
varivel com o valor 3
observe o uso do ponto decimal no zero (para ns seria a vrgula decimal) 0.0
por sua vez a varivel inteira no utiliza o ponto decimal 3
instruo PRINT
escreve mensagens na tela do computador (s pode escrever na tela do computador)
instruo READ
read* l valores fornecido pelo teclado, pelo usurio
o asterisco indica que o formato livre
por no ter a unidade especificada, isto significa que o dado ser lido do teclado
listas
reforando: as entidades nas listas so separadas por vrgula ou espao em branco
expresses numricas
soma = num1 + num2 + num3
media = soma/quantidade_num
as duas expresses numricas mostradas utilizam a instruo de atribuio ( o sinal = )
isto significa que o lado direito da expresso deve ser calculado (avaliado) para que o resultado da
avaliao ser escrita na entidade (varivel) colocada no lado esquerdo do sinal de igual
lembre-se: resultado do lado direito atribudo ao lado esquerdo (no pode ser na ordem inversa)
fechamento do programa
end program soma_e_media
DFAT/Folha Atividades/FiscompFA Expresses Numricas 37
Atividade 02
Entregar em meio magntico:
1. programa: calculo_imc calculo_imc.f03
2. arquivos: calculo_imc.dados
Exemplo/Acrscimo/Ajuste:
O programa calcula o ndice de massa corporal de uma pessoa
O ndice de Massa Corporal (IMC) pode fornecer o grau de obesidade de uma pessoa. Atravs do clculo de IMC possvel
saber se algum est acima ou abaixo dos parmetros ideais de peso para sua estatura.
Para fazer o clculo do IMC basta dividir seu peso em quilogramas pela sua altura (em metros) ao quadrado .
O nmero que ser gerado deve ser comparado aos valores da tabela IMC fornecida para se saber se a pessoa para quem
foi calculado o IMC est na faixa de peso adequado, abaixo ou acima do peso ideal.
Exemplo de clculo do IMC:
Uma pessoa que pese 60Kg e tenha uma altura de 1,67m ter IMC=
60
1.67
2
=21.51385921.5
FAZER:
escreva os cdigos necessrios para que a mesma sada escrita na tela do micro seja escrita no arquivo de dados
calculo_imc.dados
Escreva o programa calculo_imc, salvando-o no arquivo calculo_imc.f03.
Compile e execute o programa.
________________________________________________________________________________________
arquivo: calculo_imc.f03

program calculo_imc
!
!------------------------------------------------------------------------------
! Propsito: Calcula o ndice de massa corporal (IMC)
!------------------------------------------------------------------------------
! Arquivo: calculo_imc.f03
! Autor: Anibal L. Pereira 11/06/2010
!Revises: Anibal L. Pereira 09/02/2011
!
!------------------------------------------------------------------------------
implicit none
real:: altura, & ! altura do indivduo
peso, & ! peso do indivduo
imc ! ndice de massa corporal IMC
!-------------------------------------------
!--- entrada de dados pelo usurio
!-------------------------------------------
print*
print*, "Entre com sua altura em metros: exemplo 1.67 "
read*, altura
print*
print*, "Entre com seu peso em kg"
read*, peso
!-------------------------------------------
!--- clculo do IMC
!-------------------------------------------
imc = peso / (altura*altura)
!-------------------------------------------
!--- sada dos dados
!-------------------------------------------
print*
print"(a,f5.1,a,f8.5,a)","Seu IMC igual a ", imc," (", imc,")"
38 DFAT/Folha Atividades/FiscompFA Expresses Numricas
print*
print*, "Faa a sua avaliao"
print*
print*,"-------------------------------------------------------"
print*,"Clculo do IMC Situao "
print*,"-------------------------------------------------------"
print*,"abaixo de 18.5 voc est abaixo do seu peso ideal"
print*,"entre 18.5 e 24.9 Parabns - voc est no peso normal"
print*,"entre 25.0 e 29.9 voc est acima de seu peso ideal (com sobrepeso)"
print*,"entre 30.0 e 34.9 obesidade grau I"
print*,"entre 35.0 e 39.9 obesidade grau II"
print*,"40.0 e acima obesidade grau III"
print*
!---------------------------------------------
!--- sada dos dados para o arquivo de dados
!---------------------------------------------
< --fazer--
<
< o contedo que ser escrito no arquivo deve ser igual ao que
< mostrado na tela do microcomputador
end program calculo_imc
Atividade 03
Entregar em meio magntico:
1. programa: altura_e_alcance altura_e_alcance.f03
2. arquivos: altura_e_alcance_entrada.dados
altura_e_alcance_sada.dados
Fazer:
Altura mxima e alcance de um projtil
Um projtil lanado do solo com um ngulo 0
i
e velocidade v
i
atinge uma altura mxima ( h ) de
h=
v
i
2
sen
2
(0
i
)
2 g
e atinge o solo (alcance) em
R=
v
i
2
sen(20
i
)
g
Escreva um programa em Fortran que:
solicite do usurio o ngulo e a velocidade do projtil
os valores lidos (ngulo e velocidade) devem estar guardados no arquivo:
angulo_e_alcance_entrada.dados
se necessrio releia o programa ex_arq2 : ele exemplifica como ler dados de um arquivo
calcule a altura mxima e o alcance com os valores fornecidos
guarde no arquivo altura_e_alcance_saida.dados os valores solicitados os valores calculados (altura mxima
e alcance)
Auxlio:
Para verificar a correo do valores gerados pelo seu programa, considere que um atleta de salto em distncia que deixe o
cho com um ngulo de 20 graus e velocidade de 11 m/s (39.6 km/h) chega a uma altura mxima de 0.722m (72.2 cm) e uma
distncia de 7.94m.
DFAT/Folha Atividades/FiscompFA Expresses Numricas 39
[o recorde mundial 8.95m obtido em 1991 http://pt.wikipedia.org/wiki/Salto_em_comprimento acessado
em 09/02/2011]
use para a acelerao da gravidade o valor: g=9.8065
m
s
2
Ateno: funes trigonomtricas so sempre calculadas em radianos
Escreva o programa altura_e_alcance salvando-o no arquivo altura_e_alcance.f03.
Atividade 04
Entregar em meio magntico:
1. programa: distancia_plano_inclinado distancia_plano_inclinado.f03
2. arquivos: distancia_plano_inclinado.dados
Fazer:
Lanamento num plano inclinado
Um projtil disparado num plano inclinado (ngulo ) com uma velocidade
inicial v
i
e ngulo 0
i
com relao ao eixo horizontal (onde 0
i

maior que ) percorre uma distncia d antes de se chocar com o plano
inclinado. O ponto d calculado pela expresso:
d=
2v
i
2
cos(0
i
) sen(0
i
)
g cos
2
()
Escreva um programa em Fortran que:
leia os dados : , 0
i
e v
i
os valores phi, theta_i e v_i devem ser lidos no arquivo de dados distancia_plano_inclinado.dados
calcule a distncia d
salve , 0
i
, v
i
e a distncia d no mesmo arquivo distancia_plano_inclinado.dados
ateno: o arquivo final no deve perder os dados originais, isto , ao final o arquivo de dados conter os valores
originais e os valores calculados pelo programa
Ateno: funes trigonomtricas so sempre calculadas em radianos
Escreva o programa distancia_plano_inclinado salvando-o no arquivo distancia_plano_inclinado.f03.
Reforando os conceitos ligados s Equaes aritmticas
Clculos aritmticos so usados quase que na totalidade dos programas de computao que se escreve.
Os resultados obtidos das expresses aritmticas usadas nos computadores podem
diferir daquelas utilizadas na matemtica, portanto necessrio ter bastante cuidado
quando se escreve equaes aritmticas no computador
40 DFAT/Folha Atividades/FiscompFA Expresses Numricas
A tabela mostra as cincos operaes aritmticas disponveis no Fortran.
Operao matemtica Operador
(smbolo utilizado no Fortran)
Adio +
subtrao -
diviso /
multiplicao *
exponenciao **
Exemplos de expresses aritmticas envolvendo as operaes so:
p = x y / b a
v = 2 * a * x + x / t
1 / 2 * a* t**2
m * c**2
Considere a primeira expresso da lista. Se os valores : x=12.0, y=6.0, b=4.0, a=2.0 forem utilizados, a
varivel p ser avaliada assim: p = x y / b a = 8.5
Se a inteno era avaliar a expresso p=
xy
ba
, ou melhor a expresso p=
( xy)
(ba)
o
resultado desta expresso : p = 3.0 (escreva um pequeno programa Fortran, para ver o resultado gerado)
bem diferente do resultado obtido: p = 8.5
Por outro lado, quando se escreve a mesma expresso utilizando-se a forma p = (x y) / (b a) ela, agora,
fornecer o valor p = 3.0
Observe como uma expresso simples gera resultados inesperados (errados) para um
programador desatento
Por causa desta caracterstica (deste comportamento) importante conhecer e usar adequadamente as regras para
avaliao de expresses aritmticas no Fortran.
Regras de avaliao de expresses aritmticas :
1. parnteses so utilizados para estabelecer (alterar) a prioridade na avaliao de uma expresso
2. os operadores obedecem a seguinte regra de prioridade nos clculos
1) exponenciao
prioridade mxima. Esta operao realizada primeiro
mltiplas exponenciaes so avaliadas da direita para a esquerda
x = i**j**k x = i**(j**k)
sempre use parntese para tornar bastante explicita a operao desejada
2) multiplicao e diviso
segunda prioridade. Realizadas depois da operao de exponenciao
elas tm mesma prioridade: feita da esquerda para a direita
a = b * c / d * e primeira: m1 = b * c
segunda : m2 = m1 / d
depois : a = m2 * e
3) adio e subtrao
terceira prioridade. Realizadas depois das operaes de multiplicao e diviso
elas tm mesma prioridade: feita da esquerda para a direita
DFAT/Folha Atividades/FiscompFA Expresses Numricas 41
a = b - c + d - e primeira: r1 = b - c
segunda : r2 = r1 + d
depois : a = r2 - e
Exemplos:
quando as operaes tem igual precedncia:
A + B + C 2 + 3 + 4 = (2 + 3) + 4 = 5 + 4 = 9
A + (B + C) 2 + (3 + 4) = 2 + 7 = 9
A - B - C 10 - 3 - 2 = (10 - 3) - 2 = 7 - 2 = 5
A - (B - C) 10 - (3 - 2) = 10 5 = 5
A * B * C 4 * 5 * 6 = (4 * 5 ) * 6 = 20 * 6 = 120
A * (B * C) 4 * (5 * 6) = 4 * 30 = 120
A / B / C 12 / 4 / 3 = (12 / 4 ) / 3 = 3 / 3 = 1
A / (B / C) 12 / (4 / 3) = 12 / 1.33 = 9.02
A * B A * C 5 * 3 5 * 2 = (5 * 3 ) - (5 * 2) = 15 10 = 5
A * (B A) * C 5 * (3 5) * 2 = 5 *(-2 ) * 2) = -10 * 2 = -20
com precedncia diferentes:
A * B**2 2 * 4**2 = 2 * 16 = 32
(A * B)**2 (2 * 4)**2 = 8* *2 = 64
Atividade 05
Entregar em meio magntico:
1. programa: contas_01 contas_01.f03
2. arquivos: contas_01_saida.dados
Fazer:
Escreva um programa Fortran que:
defina variveis numricas (tantas quantas necessrias) do tipo real e do tipo inteiro
calcule o valor de T (equao fornecida a seguir)
leia os valores G, M, r que sero fornecido pelo usurio e utilizadas no clculo
escreva os dados fornecidos e o resultado calculado T, no arquivo de dados: contas_01_saida.dados
solicite que o usurio entre, pelo teclado, com os valores:

G (como um nmero do tipo inteiro) ,
M (tipo real)
r (tipo real)
para ento calcular o valor de T usando a equao:
T=
4n
2
G M
r
3
o programa tem que mostrar uma sada na tela do micro similar a :
(os valores numricos mostrados so apenas ilustrativos)
O valor utilizado com pi foi 3.141559
Os valores numricos que o usurio forneceu foram:
G = 3
M = 4.37
r = 23.4
a expresso gerou o valor T = 38580.81
42 DFAT/Folha Atividades/FiscompFA Expresses Numricas
Escreva o programa contas_01 salvando-o no arquivo contas_01.f03.
Atividade 06
Entregar em meio magntico:
1. programa: contas_02 contas_02.f03
2. arquivos: contas_02_valores.dados
contas_02_resultado.dados
Fazer:
Escreva um programa Fortran que:
defina variveis numricas (tantas quantas necessrias) do tipo real e e do tipo inteiro
calcule usando a equao fornecida o valor de M
leia os valores E, b, v e a no arquivo contas_2_valores.dados e escreva o valor calculado (M) no arquivo
contas_2_resultado.dados
solicite que usurio entre com os valores: E e b (estas variveis tm que ser do tipo inteiro)
v e a (estas so variveis reais)
para ento calcular o valor de M usando a equao: M=
2 E
5.7v
4
+n

E v
2
( 4av
(3/ 2)
)
(av
4.5
b)
3
o programa tem que mostrar na tela do micro uma sada similar a:
(os valores numricos mostrados so apenas ilustrativos)
O valor utilizado com pi foi 3.141
Os valores numricos que o usurio forneceu foram:
E = 3
b = 124
v = 23.3
a = 87.1
a expresso gerou o valor M = 196.42
Escreva o programa contas_02 salvando-o no arquivo contas_02.f03.
Atividade 07
Entregar em meio magntico:
1. programa: contas_03 contas_03.f03
2. arquivos: contas_03.dados
Fazer:
Escreva um programa Fortran que:
defina variveis numricas (tantas quantas necessrias) do tipo real e inteiro
calcule o valor de Q (equao fornecida)
leia os valores R, M e m que esto colocados no arquivo contas_3.dados e escreva o valor calculado (Q) no
mesmo arquivo
solicite que usurio entre com os valores: R (varivel inteira)
M e m (variveis reais)
DFAT/Folha Atividades/FiscompFA Expresses Numricas 43
para ento calcular o valor de M usando a equao: Q=
1
2
M R
2
+2 m
(
R
2
)
2
1
2
M R
(
3
2
)
2m R
2
o programa tem que mostrar na tela do micro uma sada similar a:
(os valores numricos mostrados so apenas ilustrativos)
Os valores numricos que o usurio forneceu foram:
R = 7
M = 1.24
m = 23.3
a expresso gerou o valor Q = 16.42
Escreva o programa contas_03 salvando-o no arquivo contas_03.f03.
Atividade 08
Entregar em meio magntico:
1. programa: divisao_2 divisao_2.f03
Acrscimo/Ajuste:
Voc recebe o programa Fortran divisao_2 (mostrado na sequncia) com um pedido de auxlio. O autor j tentou de tudo,
mas no consegue fazer o programa funcionar corretamente. Conserte o programa e explique as razes do porque ele no
funciona.
A explicao, que ser entregue a seu professor de laboratrio, tem que ser escrita em folha de papel A4, branca sem
pauta (pode ser manuscrita ou impressa), com uma capa contendo a identificao da disciplina, turma, atividade, ano,
semestre e nome do aluno (no necessariamente nesta ordem).
VEJA O ITEM documentao externa NA FOLHA DE ATIVIDADES: FiscompFA Sistemas Lineares para obter os
detalhes de como preparar o texto explicativo
program divisao_2
!
!------------------------------------------------------------------------------
! Propsito: Diviso entre dois nmeros
!------------------------------------------------------------------------------
! Arquivo: divisao_2.f03
! Autor: Anibal L. Pereira 13/06/2010
!Revises: Anibal L. Pereira 09/02/2011
!
!------------------------------------------------------------------------------
implicit none
real :: a, b, c ! nmeros de trabalho e valor calculado
integer:: i ! uma das respostas
!---------------------------------------------------
! entrada de dados
!---------------------------------------------------
print*
print*,"Entre um nmero maior que 1 e menor que 2 "
read*, a
print*
!---------------------------------------------------
! clculos e sada do resultado
!---------------------------------------------------
44 DFAT/Folha Atividades/FiscompFA Expresses Numricas
b = 2.0
c = a / b
i = a / b
print*, "A varivel i ", i, ", igual a varivel c ", c
print*
end program divisao_2
Escreva o programa divisao_2 salvando-o no arquivo divisao_2.f03.
Atividade 09
Entregar em meio magntico:
1. programa: contas_5 contas_5.f03
Acrscimo/Ajuste:
Execute vrias vezes o programa usando os valores que o programa sugere. Veja a sada que ele produz em cada
caso.
Conserte o programa e explique as razes do porque ele no funciona corretamente.
A explicao tem que ser escrita em folha de papel A4, branca sem pauta, com uma capa contendo a identificao da
disciplina, turma, atividade, ano, semestre e nome do aluno. (siga o modelo adotado na disciplina)
program conta_5
!
!------------------------------------------------------------------------------
! Propsito: Uma operao aritmtica simples
!------------------------------------------------------------------------------
! Arquivo: conta_5.f03
! Autor: Anibal L. Pereira 13/06/2010
!Revises:
!------------------------------------------------------------------------------
implicit none
integer:: i, j, k
real :: resultado
print*
print*,"Entre com um nmero inteiro: Escolha um destes: 2, 3, 4, 5, 6 "
read*, i
print*
j = 2
k = 4
resultado = i / j * k
print*, "Com: i= ", i
print*, " j= ", j
print*, " k= ", k
print*, "resultado = ", resultado
print*
end program conta_5
Escreva o programa contas_5 salvando-o no arquivo contas_5.f03.
DFAT/Folha Atividades/FiscompFA Expresses Numricas 45
Atividade 10
Entregar em meio magntico:
1. programa: velo_luz velo_luz.f03
Fazer:
Voc recebeu a tarefa de fazer uma tabela (com os dados mostrados a seguir) que ser levada para uma apresentao sobre
a velocidade da luz e as distncias que ela percorre em certas condies.
Escreva um programa Fortran que faa as contas necessrias para gerar os dados que esto mostrados na tabela
Escreva os dados da tabela de forma que eles sejam disposto de forma muito similar a mostrada na tabela que
est colocada no quadro que segue
referentes s velocidades da luz nas vrias unidades
e o tempo para a luz percorrer:
velocidade da luz em vrias unidades:
metros por segundos (m/s): 299792458 (exatos)
quilmetros por segundos (km/s): 300000
quilmetros por hora (km/h): 1079252848.8
milhas por segundo : 186000
milhas por hora : 671 milhes
Tempo (aproximados) para a luz percorrer:
1 metro : 3.3 nanossegundos
1 quilmetro : 3.3 microssegundos
1 permetro da Terra : 0.12 segundos
da Terra Lua : 0.13 segundos
do Sol Terra : 8.13 segundos
da estrela Alfa Centauro Terra: 4.4 anos
atravessar a Via Lctea : 100000 anos
da galxia de Andrmeda Terra : 2500000 anos
Estes valores foram tirados da pgina: http://pt.wikipedia.org/wiki/Velocidade_da_luz (acessado em 14/06/2010)
Auxlio:
observe que os valores das tabela no so exatamente iguais aos calculados, pois trata-se de uma tabela de divulgao de
resultados para o pblico em geral, no uma tabela contendo valores extremamente acurados
http://pt.wikipedia.org/wiki/Sol (acessado em 02/07/2010)
A distncia da Terra ao Sol de cerca de 150 milhes de quilmetros, ou 1 unidade astronmica (UA). Na verdade, esta
distncia varia com o ano, de um mnimo de 147,1 milhes de quilmetros (0,9833 UA) no perilio (ponto mais prximo do
sol) a um mximo de 152,1 milhes de quilmetros (1,017 UA) no aflio (ponto mais afastado do sol em torno de 4 de julho)
http://pt.wikipedia.org/wiki/Permetro_da_Terra (acessado em 02/07/2010)
O raio do equador cerca de 6378 km, que corresponde a um permetro de 40075 km
http://pt.wikipedia.org/wiki/Lua (acessado em 02/07/2010)
Quando a Lua est em quarto minguante, a Lua est frente da Terra. Como a distncia da Terra Lua de cerca de
384404 km e a velocidade orbital da Terra de cerca de 107000 km/h, a Lua encontra-se num ponto onde a Terra vai estar
da a cerca de 3 horas e meia. Do mesmo modo, quando vemos a Lua em quarto crescente, ela encontra-se
aproximadamente no ponto do espao "onde ns estvamos" 3 horas e meia antes
http://pt.wikipedia.org/wiki/Ano-luz (acessado em 02/07/2010)
Para se calcular o valor de 1 ano-luz em quilmetros necessrio saber que a velocidade da luz no vcuo de 299.792,458
quilmetros por segundo (km/s) e que o tempo utilizado na definio o chamado Ano Gregoriano Mdio (ver Calendrio
Gregoriano) com 365,2425 dias. Assim temos que o ano-luz vale 9469536207068016 metros ou tambm 63241,07710 UA
(unidade astronmica)
http://pt.wikipedia.org/wiki/Alfa_Centauri (acessado em 02/07/2010)
Esta estrela , na verdade, um sistema triplo, no qual Alpha Centauri A e Alpha Centauri B giram em torno de um centro
comum, gastando quase 80 anos para completar uma rbita. J Alpha Centauri C, tambm chamada de Prxima Centauri
demora mais de 1.000.000 de anos para completar uma rbita em torno das componentes principais e a estrela mais
prxima do Sol, a 4,2 anos-luz, enquanto o sistema Alpha Centauri AB esto um pouco mais distantes a 4,4 anos-luz
46 DFAT/Folha Atividades/FiscompFA Expresses Numricas
http://pt.wikipedia.org/wiki/Via_Lctea (acessado em 02/07/2010)
Caractersticas fsicas:
Dimenses: 78500 al ou 24000 pc
Raio: 50.000 al ou 15,33 kpc
Escreva os dados da tabela de forma que eles sejam disposto de forma muito similar a mostrada na
tabela que segue. Os valores calculados devem ser trabalhados para gerar os resultados mostrados na
tabela, isto , a tabela deve mostra os valores mostrados aqui, mas no podem ser escritos como
constantes literais
Escreva o programa velo_luz salvando-o no arquivo velo_luz.f03.
Voc se lembra das Constantes?
MAIS UM REFORO:
Constantes aparecem no Fortran sob duas formas:
constante literal
valor escrito literalmente no programa
constante com nome
valor constante que usualmente chamamos apenas de constante
Por exemplo, se o valor 3.14159265358 deve ser utilizado vrias vezes num programa as chances de se
cometer um erro ao se escrever este nmero vrias vezes num programa aumenta muito. Alm disto, no faz
sentido ficar escrevendo este nmero (ou qualquer outro nmero) inmera vezes pelo programa todo, muito melhor
escrever a letra grega n (que no Fortran usualmente identificado por pi).
Por exemplo: y= 2.0 * 3.14159265358 * a * sin(3.0 * (3.14159265358 / 2.0) * t + theta)
esta expresso muito mais fcil de ser lido se for escrito assim:
y = 2.0 * pi * a * sin(3.0 * (pi/2.0)*t + theta )
principalmente se ela cercada de outras expresses e instrues num programa.
program fun_seno
!------------------------------------------------
! Propsito: calcula a funo
! y=2.0*pi*A*sin(3.0*(pi/2.0)*t+theta)
! com A =10 e theta=0.52
!------------------------------------------------
! Arquivo: fun_seno.f03
! Autor: Anibal L. Pereira 13/06/2010
!Revises:
!------------------------------------------------
implicit none
real:: y, t, A=10.0, pi=3.14159265358, theta=0.52
print*
print*,"Entre com o valor de t"
read*, t
y=2.0*pi*A*sin(3.0*(pi/2.0)*t+theta)
print*
print*,"valor da funo seno = ", y
end program fun_seno
O programa ao lado, parece utilizar a constante pi.
Entretanto, observe que o programa utiliza seis
constantes literais numricas (os valores 10.0,
3.14159265358, 0.52, 2.0, 3.0 e 2.0). Observe tambm
que A, pi e theta no so constantes, so variveis
porque podem ter seus valores alterados durante a
execuo do programa
Por exemplo inserindo-se a instruo pi=3.0 no
programa (abaixo, destacada em azul) o valor de pi
alterado e, obviamente, o resultado final gerado pelo
programa:
. . . . . . . .
. . . . . . . .
print*,"Entre com o valor de t"
read*, t
pi = 3.0
y=2.0*pi*A*sin(3.0*(pi/2.0)*t+theta)
print*
print*,"valor da funo seno = ", y
. . . . . . . .
. . . . . . . .
O atributo PARAMETER utilizado na declarao de tipo cria uma constante com nome.
DFAT/Folha Atividades/FiscompFA Expresses Numricas 47
Ento, o programa que segue cria duas constantes com nome (ou como equivocadamente muitas vezes falamos:
duas constantes) chamadas A e pi.
program fun_seno_com_constantes
!------------------------------------------------
! Propsito: calcula a funo
! y=2.0*pi*A*sin(3.0*(pi/2.0)*t+theta)
!com A =10 e theta=0.52
!------------------------------------------------
! Arquivo: fun_seno_com_constantes.f03
! Autor: Anibal L. Pereira 13/06/2010
!------------------------------------------------
implicit none
real:: y, t, theta=0.52
real, parameter :: A = 10.0, pi= 3.14
print*
print*,"Entre com o valor de t"
read*, t
y=2.0*pi*A*sin(3.0*(pi/2.0)*t+theta)
print*
print*,"valor da funo seno = ", y
end program fun_seno_com_constantes
Este programa utiliza 8 constantes:
6 constantes literais numricas do tipo real:
0.52 10.0 3.14 2.0 3.0 2.0
2 constantes com nome numricas do tipo real:
A e pi
A vale 10.0
pi vale 3.14
Observe que uma constante literal no pode ter seu valor alterado durante a execuo do programa. No h
forma disto acontecer. Para alterar o valor de uma constante literal necessrio altera o cdigo fonte do programa e
depois compilar este programa alterado.
Por outro lado, agora com o uso da constante com nome o valor da constante com nome tambm no pode ser
alterado durante a execuo do programa. Ento qual a diferena, qual a vantagem de se utilizar constantes com
nome?
Constante com nome:
facilita a escrita do programa
torna o programa mais claro (fcil de ser lido e entendido)
para trocar (se necessrio) o valor de uma constante com nome, troca-se o valor na sua definio, apenas
em um local e o novo valor ser automaticamente atualizado no programa todo
program fun_seno_com_constantes_maior
!------------------------------------------------
! Propsito: calcula a funo
! y=2.0*pi*A*sin(3.0*(pi/2.0)*t+theta)
!com A =10 e theta=0.52
!------------------------------------------------
! Arquivo: fun_seno_com_constantes_maior.f03
! Autor: Anibal L. Pereira 13/06/2010
!------------------------------------------------
implicit none
real:: y, t, theta=0.52
real, parameter :: A = 10.0, pi= 3.14159265358
print*
print*,"Entre com o valor de t"
read*, t
y=2.0*pi*A*sin(3.0*(pi/2.0)*t+theta)
print*
print*,"valor da funo seno = ", y
end program fun_seno_com_constantes_maior
Observe que o valor de pi foi trocado apenas em
um local e, neste exemplo, usado em 2 locais
diferente no programa
constantes com nome numricas do tipo real:
pi teve seu valor alterado
pi agora vale 3.14159265358
A troca no se d durante o tempo de execuo.
Depois de trocado o valor na definio da
constante com nome o programa tem que ser
compilado de novo
48 DFAT/Folha Atividades/FiscompFA Expresses Numricas
Atividade 11
Entregar em meio magntico:
1. programa: forca_eletrica forca_eletrica.f03
2. arquivos: forca_eletrica.dados
Exemplo/Acrscimo/Ajuste:
O programa calcula a fora eltrica que atua numa carga eltrica Q produzida por 3 outras cargas eltricas (Q1, Q2, Q3)
distribudas nos eixos do sistema de coordenadas
Posio de Q ( x , y , z)
Posio de Q1 ( x
1,
y
1,
z
1
)=(0, 0, z
1
)
Posio de Q2 ( x
2,
y
2,
z
2
)=(0, y
2
, 0)
Posio de Q3 ( x
3,
y
3,
z
3
)=( x
3
,0, 0)
Fora eltrica resultante:

F=

F
1
+

F
2
+

F
3

onde a fora entre a carga Q e Q
i
calculada
pela expresso: F
i
=
1
4nc
0
QQ
i
r
i
2

Fora sobre Q produzida por Q1:
F
1
=

F
1x
=
1
4nc
0
QQ
1
r
1x
2
=
1
4nc
0
QQ
1
x
2
F
1y
=
1
4nc
0
QQ
1
r
1y
2
=
1
4nc
0
QQ
1
y
2
F
1z
=
1
4nc
0
QQ
1
r
1z
2
=
1
4nc
0
QQ
1
( zz
1
)
2
de forma anloga temos
Fora sobre Q produzida por Q2:
F
2
=

F
2x
=
1
4nc
0
QQ
2
x
2
F
2y
=
1
4nc
0
QQ
2
( yy
2
)
2
F
2z
=
1
4nc
0
QQ
2
z
2

Fora sobre Q produzida por Q3:
F
3
=

F
3x
=
1
4nc
0
QQ
3
( xx
3
)
2
F
3y
=
1
4nc
0
QQ
3
y
2
F
3z
=
1
4nc
0
QQ
3
z
2
Ento

F=
.
( F
1x
+F
2x
+F
3x
)
2
+( F
1y
+F
2y
+F
3y
)
2
+( F
1z
+F
2z
+F
3z
)
2
DFAT/Folha Atividades/FiscompFA Expresses Numricas 49
O programa utiliza a constante com nome pi=3.141592 e a constante com nome c
0
=8.85418710
12 F
m
FAZER:
acrescente ao programa os cdigos necessrios para salvar os dados de entrada e os valores calculados no arquivo
de dados: forca_eletrica.dados
Escreva o programa forca_eletrica, salvando-o no arquivo forca_eletrica.f03.
Compile e execute o programa.
________________________________________________________________________________________
arquivo: forca_eletrica.f03

program forca_eletrica
!
!-------------------------------------------------------------------------------
! Propsito: Calcula o mdulo da fora eltrica resultante em uma carga eltrica
! Q situada na posio (x,y,z) produzida por 3 cargas eltrica
! colocadas sobre cada um dos eixos cartesianos
!-------------------------------------------------------------------------------
! Arquivo: forca_eletrica.f03
! Autor: Anibal L. Pereira 13/06/2010
!Revises: Anibal L. Pereira 09/02/2011
!
!-------------------------------------------------------------------------------
implicit none
real:: Q, Q1, Q2, Q3, & ! cargas eltricas
F, & ! fora resultante
F1x, F1y, F1z, & ! componentes da fora 1
F2x, F2y, F2z, & ! componentes da fora 2
F3x, F3y, F3z ! componentes da fora 3
real:: x, y, z ! posio da carga Q
real:: z1 ! coordenada z de Q1
real:: y2 ! coordenada y de Q2
real:: x3 ! coordenada x de Q3
real:: r1x, r1y, r1z, & ! distncias entre Q e Q1
r2x, r2y, r2z, & ! distncias entre Q e Q2
r3x,r3y, r3z ! distncias entre Q e Q3
real, parameter :: pi=3.141592 ! constante pi
real, parameter :: epsilon_0= 8.854187E-12 ! constante de permissividade eltrica no vcuo;
! observe o uso do E-12 da definio do valor
!-------------------------------------------
!--- entrada de dados pelo usurio
!-------------------------------------------
print*
print*,"Entre com as cargas eltrica (nesta ordem): Q, Q1, Q2, Q3"
read*, Q, Q1, Q2, Q3
print*
print*,"Entre com a posio da carga eltrica Q : x, y, z (separadas por vrgula)"
read*, x, y, z
print*
print*,"Entre com a posio da carga eltrica Q1 : z1 "
read*, z1
print*
print*,"Entre com a posio da carga eltrica Q2 : y2 "
read*, y2
print*
print*,"Entre com a posio da carga eltrica Q3 : x3 "
read*, x3
!-------------------------------------------
!--- clculos
!-------------------------------------------
F1x = (1.0/(4*pi*epsilon_0))*((Q*Q1)/x**2)
F1y = (1.0/(4*pi*epsilon_0))*((Q*Q1)/y**2)
F1z = (1.0/(4*pi*epsilon_0))*((Q*Q1)/(z-z1)**2)
F2x = (1.0/(4*pi*epsilon_0))*((Q*Q2)/x**2)
F2y = (1.0/(4*pi*epsilon_0))*((Q*Q2)/(y-y2)**2)
F2z = (1.0/(4*pi*epsilon_0))*((Q*Q2)/z**2)
50 DFAT/Folha Atividades/FiscompFA Expresses Numricas

F3x = (1.0/(4*pi*epsilon_0))*((Q*Q3)/(x-x3)**2)
F3y = (1.0/(4*pi*epsilon_0))*((Q*Q3)/y**2)
F3z = (1.0/(4*pi*epsilon_0))*((Q*Q3)/z**2)
F = sqrt((F1x+F2x+F3x)**2 + (F1y+F2y+F3y)**2 + (F1z+F2z+F3z)**2)
!---------------------------------------------
!--- sada do resultado na tela do computador
!---------------------------------------------
print*
print*,"O mdulo da fora eltrica resultante sobre a carga Q : ", F
print*
!---------------------------------------------------------
! sada formatada
!---------------------------------------------------------
print*,"----------------"
print*, "Sada formatada"
print*,"----------------"
print*
print"(a,EN12.1)"," O mdulo da fora eltrica resultante sobre a carga Q : ", F
print*
end program forca_eletrica
Atividade 12
Entregar em meio magntico:
1. programa: pendulo pendulo.f03
Fazer:
Escreva um programa em Fortran que calcule o perodo de um pndulo usando as 2 frmulas disponibilizadas:
T=2n
.
l
g
(
1+
(
1
2
)
2
sin
2
(
0
0
2
)
+
(
3
8
)
2
sin
4
(
0
0
2
)
+
(
15
48
)
2
sin
6
(
0
0
2
))
e
T=2n
.
l
g
Figura obtida de: http://pt.wikipedia.org/wiki/Equao_do_pndulo
acessado em 14/06/2010
O programa tem que:
definir e utilizar as constantes com nome : pi=3.141592 , meio=1/2 e g = 9.8065
solicitar os dados de entrada pelo teclado
mostrar os valores calculados na tela do micro
Escreva o programa pendulo, salvando-o no arquivo pendulo.f03.
Compile e execute o programa.
DFAT/Folha Atividades/FiscompFA Expresses Numricas 51
Atividade 13
Entregar em meio magntico:
1. programa: estacao estacao.f03
Exemplo:
Exemplifica o uso da construo CASE
Escreva o programa estacao, salvando-o no arquivo estacao.f03.
No deixe de atualizar o cabealho de forma adequada
Compile e execute o programa.
________________________________________________________________________________________
arquivo: estacao.f03

program estacao
!
!--------------------------------------------------
! Propsito: Identifica as estaes do ano pelo ms
!--------------------------------------------------
!Arquivo: estacao.f03
! Autor: Anibal L. Pereira 02/10/2002
!Revisor: Anibal L. Pereira 01/08/2010
!
!--------------------------------------------------
implicit none
integer :: mes
character(len=12)::agora
!-------------------------------------------------------------------------
! Entrada do ms
!
! a instruo write utiliza a:
! (-) unit=*
! indica que a sada ser no monitor do computador
! (-) fmt="(a)"
! indica que o formato alfanumrico est sendo usado
! (-) advance="no"
! este especificador de controle de entrada/sada
! identifica que a sada se far sem o avano para a
! prxima linha
!-------------------------------------------------------------------------
write(unit=*,fmt="(a)",advance="no") "Entre com o numero do ms (1 a 12) "
read*, mes
!-------------------------------------------------------------------------
! Observe que o programa ir executar somente um dos blocos
! conforme o valor da varivel ms
!-------------------------------------------------------------------------
select case (mes)
case (1, 2, 12)
if (mes == 1) agora="Janeiro"
if (mes == 2) agora="Fevereiro"
if (mes == 12) agora="Dezembro"
print*
print"(t15,a)","****************************************"
print"(t18,2a,t36,a)","ms de ",agora,": VERAO"
print"(t15,a)","****************************************"
print*
print"(t22,a)","Bom proveito ! "
print*
case (3:5)
if (mes == 3) agora="Maro"
if (mes == 4) agora="Abril"
if (mes == 5) agora="Maio"
print*
52 DFAT/Folha Atividades/FiscompFA Expresses Numricas
print"(t15,a)","****************************************"
print"(t18,2a,t36,a)","ms de ",agora,": OUTONO"
print"(t15,a)","****************************************"
print*
print"(t15,a)","Prxima estaco e o Inverno"
print*
case (6,7:8)
if (mes == 6) agora="Junho"
if (mes == 7) agora="Julho"
if (mes == 8) agora="Agosto"
print*
print"(t15,a)","****************************************"
print"(t18,2a,t36,a)","ms de ",agora,": INVERNO"
print"(t15,a)","****************************************"
print*
print"(t15,a)","Rio de Janeiro 30 graus, cade o inverno ?"
print*
case (9:10,11)
if (mes == 9) agora="Setembro"
if (mes == 10) agora="Outubro"
if (mes == 11) agora="Novembro"
print*
print"(t15,a)","****************************************"
print"(t18,2a,t36,a)","ms de ",agora,": PRIMAVERA !!!!"
print"(t15,a)","****************************************"
print*
print"(t15,a)","Flores: Cores e Cheiros bons"
print*
end select
end program estacao
Atividade 14
Entregar em meio magntico:
1. programa: numero_dias_mes numero_dias_mes.f03
Exemplo:
Exemplifica o uso da construo CASE
Escreva o programa numero_dias_mes, salvando-o no arquivo numero_dias_mes.f03.
No deixe de atualizar o cabealho de forma adequada
Compile e execute o programa.
________________________________________________________________________________________
arquivo: estacao.f03

program numero_dias_mes
!
!-----------------------------------------------------------
! Propsito: Mostra na tela do micro quantos dias tm o ms
!-----------------------------------------------------------
! Arquivo: numero_dias_mes.f03
! Autor: Anibal L. Pereira 02/10/2002
!Revises: Anibal L. Pereira 01/08/2010
! Anibal L. Pereira 09/02/2011
!
!-----------------------------------------------------------
implicit none
integer :: mes, ano, numero_dias
print*,"Entre o ano (exemplo: 2006)"
read*, ano
print*," "
print*,"Entre o numero do ms (1 a 12)"
DFAT/Folha Atividades/FiscompFA Expresses Numricas 53
read*, mes
print*," "
select case (mes)
case (4, 6, 9, 11)
!-------------------------------
! abril,junho,setembro,novembro
!-------------------------------
numero_dias = 30
case (2)
!----------------------------------------
! fevereiro -- verifica se ano bissexto
!----------------------------------------
if (modulo(ano,100) == 0) then
if (modulo(ano,400) == 0) then
!--------------------------
! ano bissexto
!--------------------------
numero_dias = 29
else
numero_dias = 28
end if
else
if (modulo(ano,4) == 0) then
!--------------------------
! ano bissexto
!--------------------------
numero_dias = 29
else
numero_dias = 28
end if
end if
case default
!-------------------------------------------------------
!janeiro, maro, maio, julho, agosto, outubro, dezembro
!-------------------------------------------------------
numero_dias = 31
end select
print*,"o mes", mes, "tem ", numero_dias, "dias"
!--------------------------------------
! sada formatada
!--------------------------------------
print*
print"(a5,i2,a5,i2,a5)","o mes", mes, " tem ", numero_dias, " dias"
print*
end program numero_dias_mes
Atividade 15
Entregar em meio magntico:
1. programa: usando_case_e_if usando_case_e_if.f03
Exemplo/Acrscimo/Ajuste:
Exemplifica o uso da construo CASE
FAZER:
1. Acrescentar no programa os cdigos necessrios para que a mesma tarefa seja feita usando a construo IF
Observe que o programa fara a mesma ao duas vezes. Uma usando o construtor CASE e outra usando o
construtor IF. isto mesmo, a mesma ao duas vezes. A inteno aqui que voc treine o uso do construtor,
por isto a solicitao da repetio da tarefa
2. Colocar uma questo ao usurio do programa perguntando se quer obter a classificao usando a construo CASE ou a
construo IF. Os cdigos utilizados para implementar esta tarefa devem, obrigatoriamente, utilizar uma declarao CASE
54 DFAT/Folha Atividades/FiscompFA Expresses Numricas
observe que os cdigos referentes pergunta tem que ser colocada em local adequado, isto ,em um local que
possibilite que o programa realize uma ao ou a outra. A forma como isto vai ser feita, fica a seu critrio, ou seja,
voc tem que decidir e implementar
Escreva o programa usando_case_e_if, salvando-o no arquivo usando_case_e_if.f03.
Compile e execute o programa.
________________________________________________________________________________________
arquivo: usando_case_e_if.f03

program usando_case_e_if
!
!------------------------------------------------------------------------------------
! Propsito: o programa l as 3 notas obtidas por um aluno de mestrado. Calcula a
! mdia aritmtica e ento faz uma classificao segundo a tabela:
!
! A : mdia >= 90
! AB : 85 <= mdia < 90
! B : 80 <= mdia < 84
! BC : 75 <= mdia < 79
! C : 70 <= mdia < 74
! CD : 65 <= mdia < 69
! D : 60 <= mdia < 64
! F : mdia < 60
!
! o programa arredonda a mdia obtida. Ento, se for obtido 82.6 ela ser feita 83
! se for obtido 82.4 ela ser feita 82
!
! O arredondamento necessrio porque o construtor CASE no trabalha com expresso escalar
! real, somente com: expresso escalar inteira ou
! expresso escalar caractere ou
! expresso escalar lgica
!------------------------------------------------------------------------------------
! Arquivo: usando_case_e_if.f03
! Autor: Anibal L. Pereira 04/04/2010
!Revises: Anibal L. Pereira 09/02/2011
!
!------------------------------------------------------------------------------------
implicit none
real:: n1, n2, n3, & ! notas
media ! mdia
character(len=2):: classificacao
!-----------------------------------------------------------------------
! entra com as notas
!-----------------------------------------------------------------------
print*,"Entre com 3 notas"
read*, n1, n2, n3
!-----------------------------------------------------------------------
!testa para verificar se as notas so positivas
! ( programao defensiva )
!-----------------------------------------------------------------------
if(n1 < 0) then
print*
print*,"voc entrou com uma nota negativa ",n1," entre com esta nota novamente"
read*,n1
elseif(n2 < 0) then
print*
print*,"voc entrou com uma nota negativa ",n2," entre com esta nota novamente"
read*,n2
elseif(n3 < 0) then
print*
print*,"voc entrou com uma nota negativa ",n3," entre com esta nota novamente"
read*,n3
endif
!-----------------------------------------------------------------------
! clculo da mdia
!-----------------------------------------------------------------------
media = (n1 + n2 + n3) /3.0
DFAT/Folha Atividades/FiscompFA Expresses Numricas 55

!-----------------------------------------------------------------------
! classifica
!-----------------------------------------------------------------------
select case(10*nint(media)) ! a funo intrnseca nint arredonda a mdia
case( :59 ) ! a construo CASE s funciona com valores
classificacao = "F " ! numricos inteiros, por isto o arredondamento
case( 60:64 )
classificacao = "D "
case( 65:69 )
classificacao = "CD"
case( 70:74 )
classificacao = "C "
case( 75:79 )
classificacao = "BC"
case( 80:84 )
classificacao = "B "
case( 85:89 )
classificacao = "AB"
case default
classificacao = "A "
end select
!-----------------------------------------------------------------------
! mostra o resultado
!-----------------------------------------------------------------------
print*
print"(a,f5.2)","Nota 1 = ",n1
print"(a,f5.2)","Nota 2 = ",n2
print"(a,f5.2)","Nota 3 = ",n3
print"(a,f5.2)","Mdia = ",media
print"(2a)","Classificado como : ",classificacao
end program usando_case_e_if
Atividade 16
Entregar em meio magntico:
1. programa: fatorial fatorial.f03
Exemplo:
O fatorial de um nmero N calculado assim:
N! = 1 para N = 0
N! = N * (N-1) * (N-2) * (N-3) * . . . * 3 * 2 * 1 para N > 0
Por exemplo o fatorial de 5 ( 5! = 5 * 4 * 3 * 2 * 1 = 120 )
Nesta atividade foi utilizado o subtipo preciso dupla para o inteiro (kind type parameter) .
integer,parameter :: I8B = selected_int_kind(16) ! inteiro preciso dupla
I8B uma constante com nome que tem o valor 8 (para o compilador gfortran). O uso de selected_int_kind(16) no
lugar do nmero 8 , torna o programa porttil (mais sobre isto em outra atividade).
Definida a constante com nome I8B ela pode ser usada pra definir o subtipo (kind) das variveis e constantes definida no
programa. Para isto faz-se a definio assim:
integer(kind=I8B) :: d_N ! <== define a varivel d_N como tendo preciso dupla
integer :: d_N= ! <== define a varivel d_N como tendo preciso simples
Escreva o programa fatorial, salvando-o no arquivo fatorial.f03.
Compile e execute o programa.
56 DFAT/Folha Atividades/FiscompFA Expresses Numricas
________________________________________________________________________________________
arquivo: fatorial.f03

program fatorial
!
!-----------------------------------------------------------
! Propsito: calcula o fatorial de um nmero inteiro
! Exemplifica uso da construo DO WHILE
! Exemplifica o uso da constante com nome I8B que define
! um inteiro de preciso dupla
!-----------------------------------------------------------
! Arquivo: fatorial.f03
! Autor: Anibal L. Pereira 10/02/2011
!Revises:
!-----------------------------------------------------------
implicit none
!------------------------------------------------------------------
! Definio usada para criar inteiro de preciso dupla
!------------------------------------------------------------------
integer,parameter :: I8B = selected_int_kind(16) ! I8B -> constante com nome
integer :: N=300, & ! nmero que para calcular o fatorial
fat, & ! fatorial
iteracao ! nmero da iterao sendo executada
integer(kind=I8B) :: d_N=300, & ! nmero que para calcular o fatorial
d_fat ! fatorial (estas duas variveis tem preciso dupla)
!------------------------------------------------------
! Solicita nmero para o clculo do fatorial
! nmero entre 0 e 20
!------------------------------------------------------
print*
print*, "Clculo do FATORIAL"
print*
do while(N <= -1 .or. N > 20)
print*, "Entre com um inteiro entre 0 e 20"
read*, N
end do
if( N < 13) then
!------------------------------
! clculos com preciso simples
!------------------------------
!-------------------------------------------------------------
! calculal o fatorial do nmero usando a construo DO WHILE
!-------------------------------------------------------------
fat = 1
iteracao = 0
do while (iteracao < N)
iteracao = iteracao + 1 ! acumulador, indica o nmero de iteraes executadas
fat = fat * iteracao
end do
else
!------------------------------
! clculos com preciso dupla
!------------------------------
!-------------------------------------------------------------
! calculal o fatorial do nmero usando a construo DO WHILE
!-------------------------------------------------------------
d_fat = 1
iteracao = 0
do while (iteracao < N)
iteracao = iteracao + 1 ! acumulador, nmero de iteraes executadas
d_fat = d_fat * iteracao
end do
end if
!-------------------------------------------------------------
! Mostra o fatorial do nmero na tela do micro
!-------------------------------------------------------------
DFAT/Folha Atividades/FiscompFA Expresses Numricas 57
if( N < 13) then
print*
print"(a,i3,a,i10)", " O fatorial de ", N, " vale ", fat
print*
else
print*
print"(a,i3,a,I20)", " O fatorial de ", N, " vale ", d_fat
print*
end if
end program fatorial
Nas atividades que seguem, voc poder construir grficos usando o gnuplot.
Leia e estude os exemplos, mas porque o gnuplot ser abordado novamente em outras
atividades, no se preocupe com muitos detalhes, o mais importante (neste momento)
compreender o mecanismo de uso do gnuplot.
Atividade 17
Entregar em meio magntico:
1. programa: serie_taylor_exp serie_taylor_exp.f03
2. scripts: serie_taylor_exp serie_taylor_exp.ptl
3. arquivos: serie_taylor_exp.dados
serie_taylor_exp.gif
Exemplo:
Esta atividade calcula o valor da funo exp(x) usando a frmula de Taylor:
a srie de Taylor em torno do ponto a=0 ou seja a srie de Maclaurin

e
x
=

n=0

x
n
n!
=1+x+
x
2
2!
+
x
3
3!
+
x
4
4!
+
solicitando a quantidade de termos a serem usados na srie e o valor do ponto (x)
voc deve rodar o programa usando 1, 2, 3, 4, 5, 6, 10, 15, 20 termos para ver como se comporta o erro no valor
calculado da funo num dado ponto (por exemplo o ponto x=1, isto x=1 com 1 termo, x=1 com 2 termos, x=1 com
3 termos, ..)
o programa tambm constri uma tabela entre os pontos 0 e 3 com acrscimo de 0.2 em 0.2 e salva num arquivo
FAZER:
Utilizando o script serie_taylor_exp.plt construa o grfico da da funo exp(x)
Escreva o programa serie_taylor_exp, salvando-o no arquivo serie_taylor_exp.f03.
Compile e execute o programa.
________________________________________________________________________________________
arquivo: serie_taylor_exp.f03

program serie_taylor_exp
!
!------------------------------------------------------------------------------
! Propsito: Calcula o valor da funo exp(x) usando a srie de Taylor em torno
! do ponto a=0
! Srie de Taylor: exp(x) = 1 + x/1! + (x**2)/2! + (x**3)/3! + ...
!------------------------------------------------------------------------------
! Arquivo: serie_taylor_exp.f03
! Autor: Anibal L. Pereira 10/02/2011
!Revises:
!------------------------------------------------------------------------------
58 DFAT/Folha Atividades/FiscompFA Expresses Numricas
implicit none
integer,parameter:: dp = selected_real_kind(10,200) ! constante com nome dp
! para definir real preciso dupla
real(kind=dp) :: x, & ! ponto em torno do qual ser construda a srie
serie_taylor, & ! srie de Taylor
termo, & ! termo da srie de Taylor para exp(x)
p_soma ! acumulador da srie
integer :: n, & ! nmero de termos da srie
j ! contador
integer :: jj ! segundo contador
real(kind=dp) :: xj ! ponto para construo da tabela
!---------------------------------------------------------
! entra com o nmero de termos e o ponto
!---------------------------------------------------------
print*
print*, "Entre com o nmero de termos da srie"
read* , n
print*
print*, "Entre com o ponto x "
read* , x
!---------------------------------------------------------
! calcula os N termos da srie de Taylor
!---------------------------------------------------------
termo = 1.0
p_soma = termo
j=0
do while (j <= n)
j = j + 1

! o termo j para exp(x) calculado com (x**j)/j!
! que o produto do termo anterior com (x/j)
termo = termo*(x/j)
! adiciona este termo com o anterior
p_soma = p_soma + termo ! acumulador p_soma
end do
serie_taylor = p_soma
!---------------------------------------------------------
! Mostra o valor de exp(x) no ponto x
!--------------------------------------------------------
print*
print*, "-------------------------------------------------"
print*, "Valor da funo e exp(x) usando a srie de Taylor"
print*, "-------------------------------------------------"
print*, "Nmero de pontos utilizados:", n
print*, " x = ",x
print*, " Srie de Taylor = ",serie_taylor
print*, " Valor real = ",exp(x)
print"(a,ES10.1)", " Erro no valor da srie = ",serie_taylor - exp(x)
print*
!---------------------------------------------------------------------------
! constri tabela entre 0 e 3 para a funo exp(x) usando a srie de Taylor
! salva no arquivo de dados serie_taylor_exp.dados
!---------------------------------------------------------------------------
open(unit=20, file="serie_taylor_exp.dados", status="replace", action="write")
xj=-0.2
do while(xj < 3.0)
xj=xj+0.2
!---------- ponto na srie de Taylor
termo = 1.
p_soma = termo
jj=0
do while (jj <= 20)
DFAT/Folha Atividades/FiscompFA Expresses Numricas 59
jj = jj + 1
termo = termo*(xj/jj)
p_soma = p_soma + termo
end do
serie_taylor = p_soma
!----------
write(unit=20, fmt=*) xj, serie_taylor
end do
close(unit=20)
end program serie_taylor_exp
________________________________________________________________________________________
arquivo: serie_taylor_exp.plt

#-----------------------------------------------------------
# Propsito: mostrar grfico da funo exp(x) usando
# pontos gerados por uma srie de Taylor
# e a funo
#-----------------------------------------------------------
# Script: serie_taylor_exp.plt
#
#Autor: Anibal L. Pereira 10/02/2011
#Revises:
#-----------------------------------------------------------
reset
set title "Funo exp(x) usando srie Taylor"
set xlabel "x "
set ylabel "exp(x) "
plot [0:3.2] "serie_taylor_exp.dados"
replot exp(x)
set terminal gif
set output "serie_taylor_exp.gif"
replot
set output
set terminal wxt
Para executar o gnuplot:
abra um terminal
v para o diretrio em que o script e o arquivo de dado se encontra
para isto, voc pode usar os comandos: pwd
ls
cd tantas vezes quanto forem necessrios
estando no diretrio correto
execute o comando gnuplot (isto , escreva gnuplot e pressione a tecla <enter> )
quando o gnuplot disponibilizar o aviso de comando (o prompt)
execute o o comando: load "serie_taylor_exp.plt"
60 DFAT/Folha Atividades/FiscompFA Expresses Numricas
O script serie_taylor_exp.plt ir gerar o grfico:
Atividade 18
Entregar em meio magntico:
1. programa: serie_taylor_seno serie_taylor_seno.f03
2. scripts: serie_taylor_seno serie_taylor_seno.ptl
3. arquivos: serie_taylor_seno.dados
serie_taylor_seno.gif
Exemplo:
Esta atividade calcula o valor da funo sin(x) usando a frmula de Taylor:
a srie de Taylor em torno de a=0 ou seja a srie de Maclaurin

sin( x)=

n=0

(1)
n
(2n+1) !
x
2n+1
=x
x
3
3!
+
x
5
5!

x
7
7!
+
rodo o programa vrias vezes, alterando o nmero de termos utilizados na srie para ver como se comporta o erro
existente no clculo do sin(x)
rode o programa usando 1, 2, 3, 4, 5, 6, 10, 15, 20 , por exemplo nos clculos de sin(0.5)
o programa tambm constri uma tabela entre os pontos 0 e 3 com acrscimo de 0.2 em 0.2 e salva num arquivo
FAZER:
Utilizando o script serie_taylor_seno.plt construa o grfico da da funo sin(x)
Escreva o programa serie_taylor_seno, salvando-o no arquivo serie_taylor_seno.f03.
Compile e execute o programa.
________________________________________________________________________________________
arquivo: serie_taylor_seno.f03

program serie_taylor_seno
!
DFAT/Folha Atividades/FiscompFA Expresses Numricas 61
!------------------------------------------------------------------------------
! Propsito: Calcula o valor da funo seno(x) usando a srie de Taylor
! em torno do ponto a=0
! Srie de Taylor: seno(x) = x - (x**3)/3! + (x**5)/5! - (x**7)/7! + ...
!------------------------------------------------------------------------------
! Arquivo: serie_taylor_seno.f03
! Autor: Anibal L. Pereira 10/02/2011
!Revises:
!------------------------------------------------------------------------------
implicit none
integer, parameter :: dp = selected_real_kind(10,200) ! para real preciso dupla
integer, parameter :: I8B = selected_int_kind(16) ! para inteiro preciso dupla
real(kind=dp) :: x, & ! ponto em torno do qual ser construda a srie
serie_taylor, & ! srie de Taylor
termo ! termo da srie de Taylor para seno(x)
integer :: n, & ! nmero de termos da srie
j, & ! contador
iteracao ! contador
integer(kind=I8B) :: fact ! fatorial
integer :: jj ! segundo contador
real(kind=dp) :: xj ! ponto para construo da tabela
!---------------------------------------------------------
! entra com o nmero de termos e o ponto
!---------------------------------------------------------
print*
print*, "Entre com o nmero de termos da srie"
read* , n
print*
print*, "Entre com o ponto x "
read* , x
!---------------------------------------------------------
! calcula os N termos da srie de Taylor
!---------------------------------------------------------
termo = 0.0
j=-1
do while (j <= n)
j = j + 1
!------ calcula o fatorial de (2j+1)!----
fact = 1
iteracao = 0
do while (iteracao < (2*j+1) )
iteracao = iteracao + 1
fact = fact * iteracao
end do
!----------------------------------------
termo = termo + ( (-1)**j )*( x**(2*j+1) ) / fact
end do
serie_taylor = termo
!---------------------------------------------------------
! Mostra o valor de exp(x) no ponto x
!--------------------------------------------------------
print*
print*, "-------------------------------------------------"
print*, "Valor da funo e sin(x) usando a srie de Taylor"
print*, "-------------------------------------------------"
print*, "Nmero de pontos utilizados:", n
print*, " x = ",x
print*, " Srie de Taylor = ",serie_taylor
print*, " Valor real = ",sin(x)
print"(a,ES10.1)", " Erro no valor da srie = ",serie_taylor - sin(x)
print*
!---------------------------------------------------------------------------
! constri tabela entre 0 e 3 para a funo sin(x) usando a srie de Taylor
! salva no arquivo de dados serie_taylor_seno.dados
!---------------------------------------------------------------------------
62 DFAT/Folha Atividades/FiscompFA Expresses Numricas
open(unit=20, file="serie_taylor_seno.dados", status="replace", action="write")

xj=-0.2
do while(xj < 6.5)
xj=xj+0.2
termo = 0.0
j=-1
do while (j <= n)
j = j + 1
!------ calcula o fatorial de (2j+1)!----
fact = 1
iteracao = 0
do while (iteracao < (2*j+1) )
iteracao = iteracao + 1
fact = fact * iteracao
end do
!----------------------------------------
termo = termo + ( (-1)**j )*( xj**(2*j+1) ) / fact
end do
serie_taylor = termo
write(unit=20, fmt=*) xj, serie_taylor
end do
close(unit=20)
end program serie_taylor_seno
________________________________________________________________________________________
arquivo: serie_taylor_seno.plt

#-----------------------------------------------------------
# Propsito: mostrar grfico da funo seno(x) usando
# pontos gerados por uma srie de Taylor
# e a funo
#-----------------------------------------------------------
# Script: serie_taylor_seno.plt
#
#Autor: Anibal L. Pereira 10/02/2011
#Revises:
#-----------------------------------------------------------
reset
set title "Funo seno(x) usando srie Taylor"
set xlabel "x "
set ylabel "seno(x) "
set xzeroaxis
plot [0:6.5] [-1.5:1.5] "serie_taylor_seno.dados"
replot sin(x)
set terminal gif
set output "serie_taylor_seno.gif"
replot
set output
set terminal wxt

Вам также может понравиться