mirror of
https://github.com/JonasunderscoreJones/EPI-2324.git
synced 2025-10-24 00:59:20 +02:00
209 lines
5.5 KiB
Python
209 lines
5.5 KiB
Python
'''EPR Übungsblatt 02'''
|
|
__author__ = "7987847, Werner"
|
|
|
|
# Aufgabe 2
|
|
# a)
|
|
def sum_range(start:int, end:int) -> int:
|
|
'''Summe aller Zahlen von m bis n
|
|
m: Startwert
|
|
n: Endwert
|
|
'''
|
|
if start > end:
|
|
start, end = end, start
|
|
return sum(range(start, end+1))
|
|
|
|
print("Es wird die Summe aller Zahlen von m bis n berechnet.")
|
|
print("Geben Sie m und n ein.")
|
|
print(sum_range(int(input("m: ")), int(input("n: "))))
|
|
|
|
|
|
# Testfälle
|
|
|
|
# sum_range(0, 0)
|
|
# Ausgabe: 0
|
|
|
|
# sum_range(0, 1)
|
|
# Ausgabe: 1
|
|
|
|
# sum_range(-2, 234534634737)
|
|
|
|
|
|
# b)
|
|
def halbiere_bis_null(zahl:int) -> int:
|
|
'''Anzahl der Schritte, bis n <= 1
|
|
n: Zahl, die halbiert werden soll
|
|
'''
|
|
schritte = 0
|
|
while zahl != 0:
|
|
zahl /= 2
|
|
schritte += 1
|
|
return schritte
|
|
|
|
print("Es wird die Anzahl der Schritte berechnet, bis n <= 1 ist.")
|
|
print("Geben Sie n ein.")
|
|
print(halbiere_bis_null(int(input("n: "))))
|
|
|
|
# Testfälle
|
|
|
|
# halbiere_bis_null(0)
|
|
# Ausgabe: 0
|
|
|
|
# halbiere_bis_null(1)
|
|
# Ausgabe: 1
|
|
|
|
# halbiere_bis_null(2)
|
|
# Ausgabe: 2
|
|
|
|
|
|
# c)
|
|
|
|
def erzeuge_schachfeld(zeilen:int, spalten:int):
|
|
'''Erzeugt ein Schachfeld mit n Zeilen und m Spalten
|
|
n: Anzahl der Zeilen
|
|
m: Anzahl der Spalten
|
|
'''
|
|
for i in range(zeilen):
|
|
for j in range(spalten):
|
|
# Wenn sowohl die Zeile als auch die Spalte gerade oder ungerade
|
|
# ist, ist es Schwarz (1),
|
|
# ansonsten ist es Weiß (0).
|
|
if (i + j) % 2 == 0:
|
|
print("0", end=" ")
|
|
else:
|
|
print("1", end=" ")
|
|
print()
|
|
|
|
print("Es wird ein Schachfeld erzeugt.")
|
|
print("Geben Sie die Anzahl der Zeilen (n) und Spalten (m) ein.")
|
|
erzeuge_schachfeld(int(input("n: ")), int(input("m: ")))
|
|
|
|
# Testfälle
|
|
|
|
# erzeuge_schachfeld(0, 0)
|
|
# Ausgabe:
|
|
|
|
# erzeuge_schachfeld(1, 1)
|
|
# Ausgabe: 0
|
|
|
|
# erzeuge_schachfeld(7, 7)
|
|
# Ausgabe:
|
|
# 0 1 0 1 0 1 0
|
|
# 1 0 1 0 1 0 1
|
|
# 0 1 0 1 0 1 0
|
|
# 1 0 1 0 1 0 1
|
|
# 0 1 0 1 0 1 0
|
|
# 1 0 1 0 1 0 1
|
|
# 0 1 0 1 0 1 0
|
|
|
|
|
|
# d
|
|
|
|
def catalansche_konstante_approximation(anzahl_terme:int) -> float:
|
|
'''Approximation der catalanschen Konstante
|
|
anzahl_terme: Anzahl der Terme, die zur Approximation verwendet werden sollen
|
|
'''
|
|
catalan_summe = 0.0
|
|
for zahl in range(anzahl_terme):
|
|
term = 1 / ((2 * zahl + 1) ** 2)
|
|
catalan_summe += term
|
|
return catalan_summe
|
|
|
|
print("Es wird die catalansche Konstante approximiert.")
|
|
print("Geben Sie die Anzahl der Terme ein, um die Konstante zu approximieren.")
|
|
print(catalansche_konstante_approximation(int(input("Anzahl Terme: "))))
|
|
|
|
# Testfälle
|
|
|
|
# catalansche_konstante_approximation(0)
|
|
# Ausgabe: 0.0
|
|
|
|
# catalansche_konstante_approximation(1)
|
|
# Ausgabe: 1.0
|
|
|
|
# catalansche_konstante_approximation(1000)
|
|
# Ausgabe: 1.2334505501570059
|
|
|
|
|
|
# e
|
|
|
|
def differenz_zwischen_approximationen(start:int, ende:int, schrittweite:int) -> float:
|
|
'''Gibt die Differenz zwischen zwei Approximationen der catalanschen Konstante aus
|
|
start: Startwert
|
|
ende: Endwert
|
|
schrittweite: Schrittweite
|
|
'''
|
|
for zahl in range(start, ende, schrittweite):
|
|
erster_wert = catalansche_konstante_approximation(zahl)
|
|
zweiter_wert = catalansche_konstante_approximation(zahl + schrittweite)
|
|
differenz = zweiter_wert - erster_wert
|
|
print(f"n = {zahl} : {erster_wert} ; n = {zahl + schrittweite} : {zweiter_wert}")
|
|
print(f"Differenz: {differenz}\n")
|
|
|
|
print("Es wird die Differenz zwischen zwei Approximationen der catalanschen Konstante ausgegeben.")
|
|
print("Geben Sie den Startwert, Endwert und die Schrittweite ein.")
|
|
differenz_zwischen_approximationen(int(input("Startwert: ")),
|
|
int(input("Endwert: ")),
|
|
int(input("Schrittweite: ")))
|
|
|
|
# Testfälle
|
|
|
|
# differenz_zwischen_approximationen(0, 1000, 100)
|
|
# Ausgabe:
|
|
# n = 0 : 0.0 ; n = 100 : 1.231200570968774
|
|
# Differenz: 1.231200570968774
|
|
|
|
# n = 100 : 1.231200570968774 ; n = 200 : 1.2324505527403138
|
|
# Differenz: 0.0012499817715396766
|
|
|
|
# n = 200 : 1.2324505527403138 ; n = 300 : 1.2328672175744397
|
|
# Differenz: 0.000416664834125946
|
|
|
|
# n = 300 : 1.2328672175744397 ; n = 400 : 1.2330755504616913
|
|
# Differenz: 0.00020833288725152777
|
|
|
|
# n = 400 : 1.2330755504616913 ; n = 500 : 1.2332005503028372
|
|
# Differenz: 0.0001249998411458897
|
|
|
|
# n = 500 : 1.2332005503028372 ; n = 600 : 1.2332838835659545
|
|
# Differenz: 8.333326311737999e-05
|
|
|
|
# n = 600 : 1.2332838835659545 ; n = 700 : 1.233343407339766
|
|
# Differenz: 5.952377381146512e-05
|
|
|
|
# n = 700 : 1.233343407339766 ; n = 800 : 1.2333880501768604
|
|
# Differenz: 4.464283709437744e-05
|
|
|
|
# n = 800 : 1.2333880501768604 ; n = 900 : 1.2334227723869715
|
|
# Differenz: 3.472221011113774e-05
|
|
|
|
# n = 900 : 1.2334227723869715 ; n = 1000 : 1.2334505501570059
|
|
# Differenz: 2.7777770034376204e-05
|
|
|
|
# differenz_zwischen_approximationen(-3, 5, 1)
|
|
# Ausgabe:
|
|
# n = -3 : 0.0 ; n = -2 : 0.0
|
|
# Differenz: 0.0
|
|
|
|
# n = -2 : 0.0 ; n = -1 : 0.0
|
|
# Differenz: 0.0
|
|
|
|
# n = -1 : 0.0 ; n = 0 : 0.0
|
|
# Differenz: 0.0
|
|
|
|
# n = 0 : 0.0 ; n = 1 : 1.0
|
|
# Differenz: 1.0
|
|
|
|
# n = 1 : 1.0 ; n = 2 : 1.1111111111111112
|
|
# Differenz: 0.11111111111111116
|
|
|
|
# n = 2 : 1.1111111111111112 ; n = 3 : 1.1511111111111112
|
|
# Differenz: 0.040000000000000036
|
|
|
|
# n = 3 : 1.1511111111111112 ; n = 4 : 1.1715192743764173
|
|
# Differenz: 0.020408163265306145
|
|
|
|
# n = 4 : 1.1715192743764173 ; n = 5 : 1.183864953388763
|
|
# Differenz: 0.012345679012345734
|
|
|
|
# differenz_zwischen_approximationen(0, 0, 1)
|
|
# Ausgabe:
|