Python :: Aufgabe #163
3 Lösungen
Wurzel ziehen mit Intervallschachtelung
Anfänger - Python
von Felix
- 11.07.2017 um 21:30 Uhr
Schreibe eine Methode die aus einer Zahl die Wurzel zieht, benutze dafür die Intervallschachtelung.
Lösungen:
upper = 0
lower = 0
zahl = float(input("Zahl eingeben: "))
precision = int(input("Genauigkeit (max 16): "))
for i in range(precision):
while lower**2 < zahl:
lower += 1/10**i
upper = lower
lower -= 1/10**i
print()
print("Untere Grenze von Wurzel", int(zahl), ":", round(lower, precision))
print("Obere Grenze von Wurzel", int(zahl), ":", round(upper, precision))
import math
def get_numbers(number, lower, upper):
if lower == 0:
stellen = 0
elif not '.' in str(lower):
stellen = 1
else:
stellen = len(str(lower).split('.')[1]) +1
for i in range(9):
i = i/ math.pow(10,stellen)
if number >= math.pow(lower + i,2) and number <= math.pow(lower+i+1,2):
lower = (lower + i)
upper = lower + i + 1/math.pow(10,stellen)
return lower, upper
def iterate_over_steps(number, number_steps):
for i in range(number_steps):
if i == 0:
lower = 0
upper = number
lower, upper = get_numbers(number, lower, upper)
print('The square root of %f: the lower bound is %f and the upper %f' %(number, lower, upper))
iterate_over_steps(3.12, 30)
# Python 2.7
# -*- coding: utf-8 -*-
from __future__ import print_function
import math
zahl = input("Wurzel ziehen aus: ")
# Erste Grenzpaarung ermitteln
def grenzen_ermitteln(zahl):
l = []
# Untergrenze
for i in range(zahl, 0, -1):
if math.pow(i, 2) < zahl:
l.append(i)
break
# Obergrenze
for j in range(zahl):
if math.pow(j, 2) > zahl:
l.append(j)
break
return l
# Intervallschachtelung
def intervallschachtelung(zahl):
a = float(grenzen_ermitteln(zahl)[0])
b = float(grenzen_ermitteln(zahl)[1])
genauigkeit = (float(1) / 10)
while genauigkeit > 0.001:
while a < b:
if math.pow(a, 2) > zahl:
b = a - genauigkeit
a, b = b, a
break
a = a + genauigkeit
genauigkeit = genauigkeit / 10
return a
print("\nDie Wurzel aus " + str(zahl) + " ist: " + str(intervallschachtelung(zahl)))