1. Intro
Algorithmus
«Ein Algorithmus beschreibt die Methode, mit der eine Aufgabe gelöst wird. Ein Algorithmus besteht aus einer Folge von Schritten, deren korrekte Abarbeitung die gestellte Aufgabe löst. Die Abarbeitung oder den Vorgang selbst bezeichnet man als Prozeß.»
Les Goldschlager/Andrew Lister: Informatik, 1984
Damit wir von einem Algorithmus sprechen, müssen also zwei Bedingungen erfüllt sein:
- Es muss eine Schritt-für-Schritt-Anleitung vorliegen.
- Diese Schritt-für-Schritt-Anleitung muss eine Aufgabe oder ein Problem lösen.
Struktur
Ein Algorithmus definiert, in welcher Reihenfolge die einzelnen Schritte nacheinander abgearbeitet werden. Die Beschreibung dieser Reihenfolge ist die Struktur des Algorithmus. Während die Einzelschritte je nach Anwendungsgebiet unterschiedlich sind, sind die Strukturen (beim Programmieren spricht man von Kontrollstrukturen) von Algorithmen universell.
Folgende Strukturen können unterschieden werden:
- Sequenz 👣
- eine Folge von Schritten/Anweisungen, die nacheinander abgearbeitet werden.
from turtle import *
forward(100)
left(120)
forward(100)
left(120)
forward(100)
left(120) - Wiederholung 🔁
- Einer oder mehrere Schritte werden eine bestimmte Anzahl mal wiederholt.
from turtle import *
for i in range(3):
forward(100)
left(120) - Bedingte Ausführung ⑂
- Einer oder mehrere Schritte werden nur ausgeführt, wenn eine bestimmte Bedingung erfüllt ist.
from random import randint
zahl1 = randint(1, 10)
zahl2 = randint(1, 10)
antwort = input(f'{zahl1} * {zahl2} = ? ')
antwort = int(antwort)
lösung = zahl1 * zahl2
if antwort == lösung:
print(f'😎 Richtig! {zahl1} * {zahl2} = {lösung}')
else:
print(f'🥸 {antwort} ist Falsch! {zahl1} * {zahl2} = {lösung}') - Unterprogramm 🏷
- Eine Sequenz kann mit einem Namen versehen werden. Anstatt immer die ganze Sequenz aufzuschreiben, kann der Name angegeben werden.
from turtle import *
def dreieck():
for i in range(3):
forward(100)
left(120)
dreieck()
left(90)
dreieck() - Parameter ⊕ ⊖
- Das Ergebnis eines Algorithmus kann variiert werden durch Werte, welche bei jeder Ausführung neu festgelegt werden.
from turtle import *
def dreieck(seitenlänge, farbe):
color(farbe)
for i in range(3):
forward(seitenlänge)
left(120)
dreieck(100, 'blue')
dreieck(50, 'red')
Schleifen
Mit Schleifen können Anweisungen wiederholt ausgeführt werden, ohne dass diese mehrfach aufgeschrieben werden müssen. Es gibt zwei Arten von Schleifen:
- Zählschleifen: Die Anzahl der Wiederholungen ist im Voraus bekannt.
- Bedingte Schleifen: Die Anzahl der Wiederholungen ist nicht im Voraus bekannt, sondern hängt von einer Bedingung ab.
Bisher haben wir nur Zählschleifen - die for-Schleife - kennengelernt.
Die for-Schleife
from turtle import *
for i in range(5):
forward(100)
left(72)
Das i in der Schleife ist der sog. Schleifenzähler. Er wird bei jeder Wiederholung um 1 erhöht und beginnt standardmässig bei 0. Der Schleifenzähler kann innerhalb der Schleife verwendet werden.
from turtle import *
for i in range(5):
forward(10 * i) # Die Länge der Linie hängt vom Schleifenzähler ab
left(90)
Es gibt nur 4 gezeichnete Linien, da der Schleifenzähler bei 0 beginnt und bis 4 geht (was auf Z. 4 Seitenlängen von 0, 10, 20, 30, 40 erzeugt).
for i in range(start, stopp):
Die for-Schleife kann auch mit zwei Parametern verwendet werden: start und stopp. Der Schleifenzähler beginnt dann bei start und läuft bis stopp - 1.
from turtle import *
for i in range(1, 6): # Schleifenzähler läuft von 1 bis 5
forward(10 * i)
left(90)
Bei der for-Schleife muss bereits im Voraus bekannt sein, wie oft die Schleife durchlaufen werden soll.
Die while-Schleife
Die while-Schleife ist eine bedingte Schleife, ein Code-Block wird so lange wiederholt, wie eine bestimmte Bedingung erfüllt ist. Zähl-Schleifen können immer auch mit einer while-Schleife realisiert werden - es braucht dazu aber eine zusätzliche Variable, die den Zählerstand speichert.
for-Schleifefrom turtle import *
for i in range(4):
forward(100)
left(90)
while-Schleifefrom turtle import *
i = 0
while i < 4:
forward(100)
left(90)
i = i + 1
- Z. 3
- Der Schleifenzähler
iwird initialisiert (auf0gesetzt). - Z. 4
- Die Bedingung der Schleife. Solange
ikleiner als4ist, wird die Schleife ausgeführt. - Z. 8
- Der Schleifenzähler wird um
1erhöht.Achtung: -Schleifen!Wenn die Bedingung der
while-Schleife niemals falsch wird, läuft die Schleife unendlich weiter. Dann muss der Tab geschlossen und erneut geöffnet werden!
for zu whileSchreiben Sie das untenstehende Programm so um, dass nur noch while Schleifen verwendet werden.
from turtle import *
left(60)
for i in range(5):
forward(100)
left(72)
backward(20)
from turtle import *
Die eigentliche Stärke der while-Schleife liegt aber darin, dass die Anzahl Wiederholungen im Voraus nicht bekannt sein muss. Die Schleife läuft so lange, bis eine bestimmte Bedingung erfüllt ist.
Obiges Kopfrechnen-Beispiel könnte mit einer while-Schleife zu einem Kopfrechnen-Trainer erweitert werden, der so lange neue Aufgaben stellt, bis x eingegeben wird:
from browser import alert
from random import randint
antwort = ''
while antwort != 'x':
zahl1 = randint(1, 10)
zahl2 = randint(1, 10)
antwort = input(f'{zahl1} * {zahl2} = ? (x zum Beenden) ')
if antwort != 'x':
antwort = int(antwort)
lösung = zahl1 * zahl2
if antwort == lösung:
alert(f'😎 Richtig! {zahl1} * {zahl2} = {lösung}')
else:
alert(f'🥸 {antwort} ist Falsch! {zahl1} * {zahl2} = {lösung}')
Anwendung
Die while-Schleife kommt oft bei Benutzerinteraktionen, Simulationen oder bei sich dynamisch ändernden Daten vor. Sonstige Wiederholungen lassen sich normalerweise einfacher mit einer for-Schleife umsetzen.
while-Schleife- Die
while-Schleife wird immer dann verwendet, wenn die Anzahl Wiederholungen im Voraus unbekannt ist. for-Schleife- Ist die Anzahl Wiederholungen im Voraus bekannt, wird meistens die
for-Schleife verwendet.