a
,b
,c
e d
, tal que a = 1.3432
, b = 342.02
,
c = 3000.8023
e d = 20900.978234
,
faça um programa que exibe os 4 valores com duas casas de precisão após a vírgula, e na forma de uma tabela, conforme o
exemplo abaixo:
| a: 1.34 | b: 342.02 | | c: 3000.80 | d: 20900.98 |
Solução:
print("| a: %8.2f | b: %8.2f |"%(a,b)) print("| c: %8.2f | d: %8.2f |"%(c,d))
x
e um número real epsilon > 0
, calcular uma aproximação de ex
através da seguinte série infinita:
ex = 1 + x + x2/2! + x3/3! + . . . + xk/k! + . . .Inclua na aproximação todos os termos até o primeiro de valor absoluto (módulo) menor do que
epsilon
.
Solução 1:
x = float(input("Digite x: ")) eps = float(input("Digite epsilon: ")) soma = 1 fat = 1 k,tabs = 1,1 while tabs >= eps: pot = x**k fat *= k t = pot/fat tabs = t if tabs < 0: tabs = -tabs soma += t k += 1 print("e**(%5.3f) = %7.5f"%(x,soma))
Solução 2:
Uma versão ligeiramente diferente da anterior,
sem calcular explicitamente o valor absoluto do termo
em tabs
.
x = float(input("Digite x: ")) eps = float(input("Digite epsilon: ")) soma = 1 fat = 1 k,t = 1,1 while t >= eps or -t >= eps: pot = x**k fat *= k t = pot/fat soma += t k += 1 print("e**(%5.3f) = %7.5f"%(x,soma))
Solução 3:
Nessa nova solução,
obtemos o termo seguinte da sequência
em função do termo anterior
usando uma fórmula de recorrência, com isso,
evitamos o cálculo explícito
de xk e do fatorial k!.
Em geral, esse tipo de solução é a mais adequada.
Note que xk e k! crescem muito rápido com o aumento de k.
Logo, soluções baseadas no cálculo direto
de xk e k! (como as duas soluções
anteriores) podem sofrer de problemas no armazenamento de
números grandes.
Por exemplo, para x = 100.0
e epsilon = 0.001
,
no Python, você pode obter a seguinte mensagem de
erro durante o cálculo de x**k
:
OverflowError: (34, 'Numerical result out of range')
A solução abaixo não apresenta esse problema, para esses
valores de entrada, funcionando normalmente.
x = float(input("Digite x: ")) eps = float(input("Digite epsilon: ")) soma = 1 k,t = 1,1 while t >= eps or -t >= eps: t = t*(x/k) soma += t k += 1 print("e**(%5.3f) = %7.5f"%(x,soma))
x ≥ 0
e epsilon > 0
,
calcular uma aproximação da raiz quadrada de x
através da seguinte sequência:
Exemplos:r0 = x
ern+1 = 1/2 (rn+ x/rn)
.
Para x = 3, r0 = 3, r1 = 2, r2 = 1.75, r3 = 1.732143, r4 = 1.732051 Para x = 4, r0 = 4, r1 = 2.5, r2 = 2.05, r3 = 2.000610, r4 = 2.000000 Para x = 5, r0 = 5, r1 = 3, r2 = 2.33, r3 = 2.238095, r4 = 2.236068 Para x=0.81, r0=0.81, r1=0.905, r2=0.9000138122, r3=0.9000000001A aproximação será o primeiro valor
rn+1
tal
que |rn+1-rn| < epsilon
.
x = float(input("Digite x: ")) eps = float(input("Digite eps: ")) print(x**(1/2)) rant = x erro = eps while erro >= eps: r = (rant + x/rant)/2 erro = r - rant if erro < 0: erro = -erro rant = r print(r)
a
, b
e c
, calcular as raízes da equação
ax2 + bx + c = 0
, usando a função
sqrt(x)
do módulo math
.
Imprimir a solução em uma das seguintes formas:
DUPLA REAIS DISTINTAS COMPLEXAS raiz raiz 1 parte real raiz 2 parte imaginária
import math a = float(input("Digite a: ")) b = float(input("Digite b: ")) c = float(input("Digite c: ")) delta = b*b - 4*a*c if delta == 0: x = -b/(2*a) print("DUPLA:",x) elif delta > 0: rdelta = math.sqrt(delta) x1 = (-b + rdelta)/(2*a) x2 = (-b - rdelta)/(2*a) print("REAIS DISTINTAS: ",x1,x2) else: rdelta = math.sqrt(-delta) x_img = rdelta/(2*a) x_real = -b/(2*a) print("COMPLEXAS:") print("%.2f + i*%.2f"%(x_real,x_img)) print("%.2f - i*%.2f"%(x_real,x_img))