Zum Hauptinhalt springen
Version: Material

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:

  1. Es muss eine Schritt-fĂŒr-Schritt-Anleitung vorliegen.
  2. 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)
Beachte

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)
Merke

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-Schleife
from turtle import *


for i in range(4):
forward(100)
left(90)
while-Schleife
from turtle import *

i = 0
while i < 4:
forward(100)
left(90)
i = i + 1
Beachte
Z. 3
Der SchleifenzÀhler i wird initialisiert (auf 0 gesetzt).
Z. 4
Die Bedingung der Schleife. Solange i kleiner als 4 ist, wird die Schleife ausgefĂŒhrt.
Z. 8
Der SchleifenzÀhler wird um 1 erhö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 while

Schreiben 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 *
Laden...

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.

Erkenntnis
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.