Dienstag, 27. Oktober 2009

Mergesort

Das Sortieren einer Liste gehört zu den Standardübungen beim Programmieren.

Mergesort wurde zum ersten Mal von John von Neumann präsentiert. Vgl. Art. s.v. Mergesort in Wikipedia. Die Idee ist, dass eine Liste, die aus einem Element besteht, bereits sortiert ist. Um eine größere List zu sortieren, muss man also nur eine Liste teilen können, bis jeder Teil sortiert ist und dann die entstandenen Teile neu sortiert zusammensetzen.

Implementierung in Python am Beispiel von Zeichenketten:


# ein Zeichen in eine sortierte Kette einfuegen
def eins_sortiert_einfuegen(p,q):
z = 0
for n in q:
if p <= n:
return q[:z]+p+q[z:]
z = z + 1
return q+p

# viele unsortierte Zeichen in eine sortierte Kette einfuegen
def viele_sortiert_einfuegen(a, b):
y = 0
for n in a:
b = eins_sortiert_einfuegen(n, b)
return b

# zwei sortierte Ketten sortiert miteinander verbinden
def merge(a,b):
x = 0
for m in a:
t = 0
y = len(b)
for n in range(x, y):
if m <= b[n]:
b = b[:n]+m+b[n:]
x = n
break
if y == len(b):
b = b + m
x = n + 1
return b

def mergesort(zeichenkette):
a = len(zeichenkette)
if a > 1:
#return viele_sortiert_einfuegen(
mergesort(zeichenkette[:int(a/2)]),
mergesort(zeichenkette[int(a/2):])
)
return merge(mergesort(zeichenkette[:int(a/2)]),
mergesort(zeichenkette[int(a/2):]))
else: return zeichenkette

## Voruebung
print eins_sortiert_einfuegen("r", "abcmnopz")
print viele_sortiert_einfuegen("rdz", "abcmnopz")

## Sortierung
print mergesort("rio bravo john hugo")

Mittwoch, 14. Oktober 2009

Das Medium für die Didaktik der Informatik


Wie trage ich den Lernstoff zum Schüler? Das heißt: Welches Medium setze ich ein?

Erzählen

Das klingt ganz nett. Hin und wieder eine kleine Geschichte zu großen Geistern der Informatik mag ganz nett sein. Nur wer möchte die rekursiv definierte Fakultätsfunktion in eine Geschichte fassen? Das wird schwer. Und man würde nicht darauf wetten wollen, dass diese Geschichte jemand hören möchte. Aber natürlich, wenn jemand etwas Spannendes zu erzählen weiß, dann hört man auch zu.

Lehrbücher

Da geht grundsätzlich mehr als mit Erzählen. Wir können Diagramme betrachten, Texte wiederholt nachschlagen, Programmcode abdrucken und analysieren. Es kann illustrierende Bilder geben. Wer etwas wissen will, der kann in aller Regel ein geeignetes Buch finden, das ihm den gesuchten Sachverhalt aufschlüsselt und irgendwie näher bringt. Wer Bücher liest, der lernt Bilder und Texte zu analysieren und im Gegenzug je nach Bedarf zu reproduzieren. Nur: Informatik lernt man ja nicht mit dem Vorsatz Texte zu produzieren.

Online-Medien

Online-Medien bieten alles, was ein Buch auch bietet. Und: Das Medium ist Teil der Zielplattform des Informatikunterrichts, des Computers. Oder würden Sie Informatik lernen wollen, weil Sie einen Algorithmus zur Entfachung eines Lagerfeuers brauchen? Niemals. Mag auch die Wissenschaft der Informatik Ziele verfolgen, die jenseits eines Rechners angesiedelt sind. Gelernt wird Informatik, weil die Leute programmieren wollen. Und programmiert wird am Rechner. Daher ist der Druck von Schulbüchern für das Fach Informatik allenfalls kein Fehler. Nützen wird er niemandem.
Weil der Online-Kurs Teil der Zielplattform ist, darum sind auch Tutorials im Internet und Foren so beliebt. Es ist einfach total praktisch, ein Code-Beispiel zu kopieren, in der IDE der Wahl einzufügen, zu testen und dann ggfs. anzupassen. Das Buch kann da nicht mithalten. Man müsste ja erstmal alles abtippen.
Speziell für den Unterricht gibt es als Lernplattform zum Beispiel Moodle. Virtuelle Klassenräume erstellen oder Thematische Kurse einrichten: Beides ist möglich. Aufgaben können eine Upload-Möglichkeit beinhalten und von Trainern bewertet werden. Links ins Internet sind mit drei bis vier Klicks geschafft. Interaktive Elemente erlauben es, mit anderen Teilnemern zusammenzuarbeiten.

Wer sich Gedanken über Medieneinsatz imInformatikunterricht macht, der wird zwangsläufig bei Online-Medien enden, selbst wenn er sich die Gestaltung von Lernplattformen wie Moodle noch anders vorstellen könnte.