3.3 Zyklus (Wiederholung) – Iteration

Ab dem Abschnitt 3.3 liegt der Ablaufsteuerung der Programme des Weitern die Grundstruktur Zyklus (Wiederholung) zugrunde.

Zum Zyklus zählt u. a. die Iteration – das Wiederholen von Anweisungen mit der for-Schleifen und while-Schleife.

Die for-Schleife:

  • Die in der Abbildung 1 dargestellte for-Schleife wird im Allg. verwendet, wenn die Anzahl der Schleifendurchläufe von vornherein bekannt ist.
  • Bild 49
    Abbildung 1: Die for-Schleife

    Programm »gauss.py«

    Definition
    Begriff »Kleiner Gauß«

    Es wird erzählt. dass der neunjährige Schüler Carl Friedrich Gauß (1777 - 1855) im Rechenunterricht die Zahlen von 1 bis 100 addieren sollte, das heißt 1 + 2 + 3 + … + 100.

    Es wäre nicht der Schüler Carl Friedrich Gauß gewesen, hätte er Zahl für Zahl addiert.

    Auf Carl Friedrich Gauß geht Summenformel (Kleiner Gauß)
    1+2+3+ … +n=n(n + 1)/2 zurück.

    Übung

    Aufgabe A22

    Berechne die Summe der Zahlen so,wie es der Schüler Carl Friedrich Gauß rechnen sollte:

    • 1 bis 10
    • 1 bis 20

    Was allerdings der Schüler Carl Friedrich Gauß so nicht rechnete, das soll das Programm »gauss.py« – beispielsweise von 1 bis 100 – ausführen:

    • In der Abbildung 2 ist der Algorithmus dargestellt, der der Callback-Funktion »addieren« des Programms zugrunde liegt.
    Bild 51
    Abbildung 3: Algorithmus
    • Das Kernstück des Algorithmus ist die for-Schleife.
    Icon Beschreibung
    Exkurs »for-Schleife«

    Das Wiederholen in der for-Schleife mit der Funktion »range()« funktioniert wie folgt:

    • In der for-Schleife steht die for-Bedingung »for i in range(1, n+1)«.
    • Die Funktion »range(1, n+1)« erzeugt als iterierbares (durchlaufbares) range-Objekt die Zahlenfolge 1, 2, 3 … n (wobei n+1 ausgeschlossen ist).
    • Das iterierbare range-Objek (die Zahlenfolge) wird von der Funktion an die rufende Stelle in der for-Bedingung zurückgegeben.
    • Der Operator »in« bewirkt, dass der sogenannten Laufvariable »i« nacheinander die Werte des range-Objekts (die Ganzzahlen 1 bis n) zugewiesen werden.[1]
    • Nach jeder Wertzuweisung der Laufvariable wird die Anweisung oder werden die Anweisungen des for-Körpers der for-Schleife ausgeführt.
    • Die Anzahl der Wiederholungen (Schleifendurchläufe) in der for-Schleife entspricht der Anzahl der Werte des range-Objekts.

    Beispiel:

    • In der for-Schleife ist »for i in range(1, 5)« die for-Bedingung.
    • Die Funktion »range(1, 4)« erzeugt als range-Objekt die Zahlenfolge 1, 2, 3 und gibt das Objekt (die Zahlenfolge) an die rufende Stelle zurück.
    • Der Laufvariable »i« werden durch den Operator »in« nacheinander die Werte 1, 2 und 3 des range Objekts (der Zahlenfolge) zugewiesen.
    • Nach jeder Wertzuweisung der Laufvariable wird der for-Körper ausgeführt.
    • Insgesamt führt die for-Schleife drei Wiederholungen (Durchläufe) aus.
    • Der Callback-Funktion liegt der in der Abbildung 3 dargestellte Algorithmus zugrunde.
    Quelltext der Callback-Funktion »addieren«
    # Callback-Funktion
    def addieren():
        try:
            n=int(entry.get())
            if n>0:
                summe=0
                for i in range(1, n+1):
                    summe=summe+i           
                label2.config(text=f"Summe={summe}")
            else:
                label2.config(text=f"{n} ist zu klein!")              
        except ValueError:
            label2.config(text="Falsche Eingabe!")
        entry1.delete(0, tk.END)  
    
    
    Erklärungen zum Quelltext
    2. bis 14. Zeile Die Callback-Funktion »addieren« wird deklariert.
    3. bis 13. Zeile Die »,try« und »except« Ausnahmebehandlung der Eingaben erfolgt.
    4. Zeile Der Variable »n« wird die dem Eingabefeld eingegebene Zeichenkette durch die Funktion »int()« (Typumwandlung) als Ganzzahl zugewiesen.
    5. bis 11. Zeile Die if-else-Auswahl ist eine mehrfache Auswahl mit zwei Bedingungszweigen:
    • dem mit einer for-Schleife
    • dem mit einer Ausgabe eines f-Strings
    6. Zeile Die Wertzuweisung »summe = 0« bedeutet, dass der Variable summe der Wert 0 zugewiesen wird.
    Der Wert 0 ist der Startwert der Variable »summe« beim Addieren der Ganzzahlen.
    7. und 8. Zeile Die for-Schleife innerhalb der if-Anweisung bewirkt, dass der Laufvariable »i« im Schleifenkopf nacheinander die Werte 1 bis n zugewiesen werden und im Schleifenkörper nacheinender der Wert der Variable »summe« um den Wert der Variable »i« erhöht wird.
    Wenn beispielsweise die Variable »summe« den Wert 1 hat und die Laufvariable »i« den Wert 2, dann wird durch »summe=summe+i« der Variable »summe« der Wert 3 zugewiesen.
    9., 11. und 13. Zeile Die Ausgaben erfolgen in f-Strings.
    14. Zeile Der Inhalt des Eingebefensters wird gelöscht.

    Ein Beispiel, wie die Callback-Funktion rechnet

    Nach der Eingabe für n gleich 100 addiert die Funktion »addieren« die Ganzzahlen folgendermaßen:

    • summe=0
    • summe=summe+1=0+1=1
    • summe=summe+2=1+2=3
    • summe=summe+3=3+3=6
    • summe=summe+98=4753+98=4851
    • summe=summe+99=4851+99=4950
    • summe=summe+100=4950+100=5050
    Übung

    Aufgabe A23

    Implementiere ein Programm »gauss.py« am Computer.

    Das Programm »gauss.py« soll aus zwei Teilen bestehen:

    • Der Teil mit der grafischen Benutzeroberfläche GUI – dem Hauptfenster.
    • Der Teil mit der Callback-Funktion »pruefen«.

    Führe das Programm u. a. mit folgenden Eingaben aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht:

    • 10
    • 20
    • 100
    • 1000

    Vergleiche die Ausgaben des Programms für n=10 und n=20 mit deinen Berechnungen in der oben gestellten Aufgabe A22.


    1. [1] Die Namen »i«, »j« und »k« werden i. Allg, als Bezeichner von Laufvariablen in Schleifen verwendet.