Академический Документы
Профессиональный Документы
Культура Документы
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
(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