3. Programmablaufsteuerung

Es war eine herausragende Leistung des Software-Engineeings, das in den 1960er Jahren herausfand, dass drei Kontrollstrukturen grundlegend für die Ablaufsteuerung von Computerprogrammen sind.[1]

  • Sequenz (Aufeinanderfolge)
  • Selektion (Auswahl)
  • Zyklus (Wiederholung)

Aufgrund dieser Erkenntnis fand das damals gängige Programmieren mit der Sprunganweisung »goto« nach und nach ein Ende. Es fand auch deshalb ein Ende, weil insbesondere das willkürliche Springen dazu führte, dass meist einzig der Programmierer seine Programmcodes lesen und verstehen konnte. Dadurch war es so gut wie unmöglich, dass nachfolgende Programmierer die Programme ändern oder erweitern konnten. Oftmals mussten die Programme neu implementieren werden.

Programm »primzahl.py«

Als ein Beispiel kann das Programm »primzahl.py« dienen. Das Besondere am Programm ist, dass es die drei Kontrollstrukturen Sequenz, Selektion und Zyklus enthält.

Das Programm prüft, ob eine eingegebene Ganzzahl größer 1 eine Primzahl ist oder nicht.

Definition
Begriff »Primzahl«

Eine Primzahl ist eine positive Ganzzahl, die nur durch 1 und sich selbst teilbar ist.

  • Die Ganzzahl 1 ist keine Primzahl.
  • Die Ganzzahl 2 ist die kleinste Primzahl.
Quelltext des Programms »primzahl.py«
import tkinter as tk

# Callback-Funktion
def pruefen():
    try:
        zahl=int(entry.get())
        if zahl>1:
            primzahl=True
            i=2
            while primzahl==True and i<=zahl//2:
                if (zahl%i)==0:
                  primzahl=False
                else:
                  i=i+1
            if primzahl==True:
              wort="eine"
            else:
                wort="keine"
            label2.config(text=f"{zahl} ist {wort} Primzahl")
        else:
            label2.config(\
                text="Die Ganzzahl ist nicht größer 1!")
    except ValueError:
        label2.config(\
            text="Die Zeichenkette ist nicht umwandelbar!")
    entry.delete(0, tk.END)  

# grafische Benutzeroberfläche
root=tk.Tk()
root.title("Primzahl")
root.geometry("400x250")
root.resizable(False, False)

# Widgets
label1=tk.Label(root,\
                text="Gib eine Ganzzahl größer 1 ein!")
entry=tk.Entry(root, width=5)
button1=tk.Button(root, text="Prüfen", command=pruefen)
label2=tk.Label(root, text="")
button2=tk.Button(root,\
                  text="Programm beenden",\
                  command=root.destroy)
   
label1.pack(pady=10)
entry.pack(pady=10)
button1.pack(pady=10)
label2.pack(pady=10)
button2.pack()

root.mainloop()

Erklärungen zum Quelltext
1. bis 50. Zeile Eine Sequenz (Aufeinanderfolge) von Anweisungen.
4. bis 26. Zeile Die Callback-Funktion »pruefen« wird deklariert.
6. Zeile Die Variable »zahl« bekommt eine Ganzzahl zugewiesen.
10. bis 19. Zeile Ein Zyklus (Wiederholung) wird mit einer while-Schleife umgesetzt.
10.. Zeile Die Operation »//« ist das ganzzahlige Teilen (beispielsweise ergibt 5//2 gleich 2).
11. bis 14. Zeile Eine Selektion (Auswahl), die innerhalb des while-Körpers mit einer if-else-Anweisung umgesetzt ist.
11. Zeile Die Operation »%« ist der Rest beim ganzzahligen Teilen (beispielsweise ergint 5%2 gleich 1).
15. bis 18. Zeile Eine weitere Selektion (Auswahl) wird mit einer if-else-Anweisung umgesetzt.
19. Zeile Die Ausgabe erfolgt im Label-Widget in einem f-String.

Zwei Abläufe des Programms

Das Programm ermiitelt, dass die eingegebene Ganzzahl 29 nicht durch 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 sowie 14 teilbar ist und gibt deshalb »29 ist eine Primzahl« aus.

Das Programm emittelt, dass die eingegebene Ganzzahl 35 zwar nicht durch 2, 3 sowie 4 ist, jedoch durch 5 teilbar und gibt deshalb »35 ist keine Primzahl« aus.

In den Abbildungen 1 und 2 sind die Ausgaben der beiden Abläufe des Programms dargestellt.

Bild 30 Bild 31
Abbildung 1 und 2: Zwei Ausgaben des Programms
Übung

Aufgabe A12

Implementiere das Programm »primzahl.py« am Computer.

Führe das Programm mehrfach mit verschiedenen Ganzzahlen aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht.

Um das Programm »primzahl.py« zu verstehen, werden nachfolgend auf Seite 3.1, Seite 3.2 und Seite 3.3 die Kontrollstrukturen Sequenz, Selektion und Zyklus erklärt und an Beispielen erläutert.


  1. [1] Mit der Einführung der Kontrollstukturen in den 1960er Jahren nahm das strukturierte Programmieren seinen Anfang.