Übungsaufgaben

Aufgabe: Programmtabelle zum Zahlenraten

Dokumentieren Sie die Ausführung des folgenden mit Programmpunkten versehenen Programms zum Zahlenraten tabellarisch. Da der Wert der Bedingungen in diesem Fall direkt aus dem Wert beteiligter Variablen hervorgeht, können Sie bei der Programmtabelle auf die Spalten für Bedingungen verzichten.

Anstelle des Programmcodes können Sie auch Ihren PAP, den Sie zu diesem Programm bereits erstellt haben, mit Programmpunkten versehen und die Programmtabelle daraus ableiten.

min = 1                       #1
max = 100                     #2
geheim = 37                   #3

erraten = False               #4

while not erraten:
  kandidat = (min + max) // 2 #5
  print("Ist die Zahl gleich " + str(kandidat) + "?")
                              #6
  if geheim == kandidat:
    print("Ja, erraten.")     #7
    erraten = True            #8

  if geheim < kandidat:
    print("Nein, meine Zahl ist kleiner!")
                              #9
    max = kandidat - 1        #10

  if geheim > kandidat:
    print("Nein, meine Zahl ist größer!")
                              #11
    min = kandidat + 1        #12

Bonusaufgabe: Analyse zum Zahlenraten

Wieviele Fragen stellt das Programm zum Zahlenraten im ungünstigsten Fall? Geben Sie die Ausgabe für einen solchen ungünstigsten Wert für n an.

Schreiben Sie ein Programm, dass die Technik Aufzählen und Testen verwendet um alle Zahlen n auszugeben, für die das Programm zum Zahlenraten die größtmögliche Anzahl Fragen stellt, bis die Zahl erraten wird.

Bonusaufgabe: Quadratwurzel suchen

Schreiben Sie ein Python-Programm, das Quadratwurzeln mit Hilfe der Programmiertechnik Teilen und Herrschen berechnet.

Weisen Sie die Zahl, deren Wurzel berechnet werden soll, zu Beginn des Programms einer Variablen x zu und initialisieren Sie zusätzlich eine Variable genauigkeit mit dem Wert 0.001. Letztere gibt an, mit welcher Genauigkeit die Wurzel berechnet werden soll.

Suchen Sie dann, wie beim Zahlenraten durch Intervallschachtelung, nach einem Kandidaten, der nah genug an der Wurzel von x ist, deren Quadrat nämlich nicht mehr als genauigkeit von x abweicht. Passen Sie also die Grenzen des durchsuchten Intervalls so lange geeignet an, bis die gewünschte Genauigkeit erreicht ist, und geben Sie dann den Kandidaten für die Quadratwurzel aus.

Hinweis: Um Wurzeln beliebiger positiver Zahlen berechnen zu können, sollten sie mit Fließkommazahlen rechnen, um die Verwendung ganzzahliger Division zu vermeiden.

Zusatzaufgabe: Wandeln Sie Ihr Programm so ab, dass zusätzlich zur berechneten Näherung für die Wurzel auch die Anzahl der benötigten Schleifendurchläufe ausgegeben wird.