Listen mit Tigerjython (Python 2.7) am Beispiel Funktionsplot

Ziel: Erweiterung unserers Funktionsplotters um eine Analyse der Funktionswerte

Gegeben ist folgendes Programmfragment:

# Graphen Zeichnen Version 4b
# Kapitel 5.6
from gturtle import *
# Funktionsdefinitionsbereich
def meineTolleFunktion(xWert):
    yWert = (0.3 * (xWert*xWert))+(1.2*xWert)- 2
    return yWert
# Ende des Funktionsdefinitionsbereichs
# Hauptprogrammbereich ("main")
xmin = inputInt("Wertebereich X von (negative Zahl!):")
xmax = inputInt("Wertebereich X bis:")
#schrittweite = inputInt("Schrittweite:") # für spätere Erweiterung auskommentieren und in while-Schleife verwenden, z.B. um in 0.25 Schritten vorzugehen
#skalierung = inputFloat("Skalierungsfaktor: (z.B. 10 = zehnfache Vergrößerung oder 0.7 = 70%)") # für Erweiterung nützlich, dann auskommentieren
# Berechnen *aller* Funktionswerte
werteliste = [] # Initialisierung der Liste
for x in range(xmin, xmax+1): # x-Wert durchläuft den Bereich, die Schrittweite ist standardmäßig 1
    y = meineTolleFunktion(x) # berechne den y-Wert
    # füge den aktuellen Funktionswert (gerundet auf 2 Nachkommastellen) der Liste hinzu
    werteliste.append(round(y,2))

1. Aufgabe (Version 5)

Erstelle eine eigene lauffähige Datei auf der Grundlage des obigen Programmfragments. Blende den Debugger ein und analysiere den Programm-Ablauf und die  Werteliste in der Debugger-Darstellung von TigerJython. Wie ist eine Liste aufgebaut? Wie sehen die Elemente dieser Liste aus?
Vergleiche dazu auch die Informationen zu Listen

2. Aufgabe (Version 5b)

Gib die Werteliste aus (im Ausgabebereich mit print). Frage den Benutzer, ob die Werteliste ausgegeben werden soll. Benutze dazu die eingebaute Funktion askYesNo (vgl. dazu Dialoge mit TigerJython in den Artikeln zur Programmierung auf diesen Webseiten).

3. Aufgabe (Version 5c)

Eine Liste kann elementenweise durchlaufen werden, z.B. mit 

for wert in werteliste: # die Werteliste durchlaufen

Suche den minimalen und den maximalen Y-Wert aus der Werteliste heraus. Speichere diese in den Variablen ymin bzw. ymax. Bei dem gegebenen Programmfragment kannst du das Ergebnis im Video im Anhang sehen.

4. Aufgabe (Version 5d)

Zeichne jetzt mit der Turtle in Abhängigkeit der Benutzereingaben für den Wertebereich von X und der ermittelten Minimum und Maximum-Werte für Y ein entsprechendes Koordinatensystem. Somit passt die Funktion optimal in das Koordinatensystem. Frage den Benutzer vorher, ob eine Funktion gezeichnet werden soll (vgl. Video im Anhang).

Hier ein Beispiel für das Zeichnen eines Koordinatensystems mit der Turtle. Beachte, dass die Werte für x max (hier 300) bzw. min (hier -300) und y max (hier 200) bzw. min (hier -200) dynamisch angepasst werden müssen. Vergleiche dazu die Dokumentation zur Turtle-Grafik!

makeTurtle()
speed(-1)
#hideTurtle()
setFontSize(11) # falls später noch Text an einer Stelle ausgegeben werden soll
farbeAchsen="black"
# Koordinatenachsen zeichnen:
setPenColor(farbeAchsen)
setPos(-300, 0)
moveTo(300, 0)
setPos(0, -200)
moveTo(0, 200)

5. Aufgabe (Version 5e)

Lass die turtle jetzt die Funktion einzeichnen. Das bedeutet, dass du die Turtle an den kleinesten X-Wert mit dem zugehörigen Y-Wert setzt (setPos) und dann zum nächsten X-Wert mit zugehörigem Y-Wert bewegen lässt (moveTo) - vgl. Beispiel des Zeichnens der Koordinatenachsen.

6. Aufgabe (Version 5f)

Du solltest sehen, dass die ganze Darstellung recht klein aussieht. Wir wollen dehalb unseren Skalierungsfaktor aus dem Programmfragment benutzen: Der Skalierungsfaktor vergrößert (oder verkleinert) das Koordinatensystem und die Funktionszeichnung um den eingegebenen Faktor. Implementiere dies. Probiere auch andere Funktionen deiner Wahl aus. Für Schnelle: Benutzer kann zwischen verschiedenen Funktionen wählen. Bedenke, dass bei anderen Funktionen die Größe des Koordinatensystems ggf. angepasst werden muss. Zum Beispiel sind bei der Funktion x^5 - 5x^4 -13x^3 - 65x^2 - 36x -170 die y-Werte sehr groß und der sinnvolle Bereich für die Darstellung liegt für die x-Werte zwischen - 5 und 10. Deshalb muss die y-Achse anders skaliert werden als die x-Achse. Die y-Koordinaten der turtle müssen entsprechend angepasst werden.

7. Aufgabe (Version 5k) - Kür

Erweitere dein Programm nach eigenen Vorstellungen. Was lässt sich verbessern oder verändern? Beispielsweise könntest du auch andere Funktionen deiner Wahl ausprobieren. Oder: Benutzer kann zwischen verschiedenen Funktionen wählen. Oder: ...

8. Aufgabe (Version 6) - Nullstellenerkennung (z.B. für Schnelle)

Im zweiten Video ist zu erkennen, dass beim Durchlaufen der y-Achse an dieser Stelle eine Nullstelle vermutet wird. Implementiere dies. Gib die möglichen Nullstellen zusätzlich aus. Welche Schwächen könnte das bisherige Vorgehen haben? Was liesse sich verbessern?

Material