Einleitung
| Einführungsbeispiel
| Eingabe, Ausgabe, Variablen |
Datentypen
| Stukturen | For...EndFor
| If...EndIf | Loop...EndLoop
| While...EndWhile | Felder
| Funktionen | Unterprogramme
| Grafikprogrammierung | Index
Programmierkurs
Einleitung
Für das erfolgreiche Erstellen von Programmen reicht die reine
Kenntnis der Programmiersprache zumeist nicht aus. Auch der beste Programmierer
kann keinen Primzahltest implementieren ( = den Programmcode in den Rechner
eintippen), wenn ihm kein Algorithmus (
= schematischer Rechenvorgang, der meist aus Wiederholungen gewisser Rechenschritte
besteht und mit Sicherheit zum Erfolg führt) bekannt ist, der dieses
leistet. Die Programmiertätigkeit sollte also nicht mit dem
Einschalten des Rechners und sofortigem Eintippen des Codes beginnen, sondern
mit einer sorgfältigen Analyse des zu Grunde liegenden Problems. Die
Entstehung eines Progamms kann in folgende vier Phasen
unterteilt werden:
-
Definitionsphase
-
Entwurfphase
-
Inplementationsphase
-
Dokumentationsphase
Anhand eines Primzahltests soll dies im Folgenden gezeigt werden.
Definitionsphase
In dieser Phase soll genau festgelegt werden was ein Programm leisten
soll. Je umfangreicher ein Progamm werden soll, desto wichtiger ist eine
sorgfältige Planung in der Entwurfphase, da spätere Änderungen
meist mit einem relativ großen Programmieraufwand verbunden sind.
Für unser einfaches Beispiel reicht folgende Definition:
Nachdem der Benutzer eine natürliche Zahl eingegeben hat, soll
das Programm ausgeben ob es sich dabei um eine Primzahl handelt oder nicht.
Entwurfphase
In diesem Abschnitt wird festgelegt, wie das gewünschte Ziel
erreicht werden kann, d.h., hier werden der Programmablauf und die benötigten
Variablen festgelegt. Beginnen wir mit einer verbalen Beschreibung des
Programmablaufes:
-
Löschen des Bildschirmes
-
Einlesen der Testzahl
-
Primzahltest
-
Ausgabe des Ergebnisses
Bei den ersten beiden Punkten und dem letzten Punkt handelt es sich um
Routineaufgaben, die keiner weiteren Beschreibung bedürfen. Für
den Primzahltest selbst gehen wir von folgender Überlegung aus, dass
die Testzahl genau dann eine Primzahl ist, wenn sich bei der Division durch
alle möglichen Primzahlen bis zur ("ganzzahligen") Quadratwurzel aus
der Testzahl niemals der Rest 0 ergibt. Anhand eines konkreten Beispiels
soll dies verdeutlicht werden:
Überprüfe, ob es sich bei der Zahl 137 um eine Primzahl
handelt.
Die Wurzel aus 137 » 11,7. Man muss
also alle Primzahlen von 2 bis 11 als mögliche Teiler testen.
2 teilt 137 nicht
3 teilt 137 nicht
5 teilt 137 nicht
7 teilt 137 nicht
11 teilt 137 nicht
Da 137 durch keine dieser Zahlen teilbar ist, handelt es sich um eine
Primzahl.
|
Der Computer "kennt" jedoch keine Primzahlen von 2 bis n, daher müssen
wir den Algorithmus etwas abwandeln. Wir testen zunächst, ob die Zahl
gerade ist und prüfen dann alle ungeraden Zahlen (>2) bis zur Wurzel
aus der Testzahl (n) als mögliche
Teiler (t). Damit ließe sich
der Primzahltest nun wie folgt beschreiben:
-
Einlesen der Testzahl n.
-
Weise der Variablen t den Wert 2 zu.
-
Ist n durch t
teilbar? Wenn ja, Ausgabe: "keine Primzahl".
-
Weise der Variablen t den Wert 3 zu.
-
Wiederhole bis ein Teiler gefunden wurde oder die Wurzel aus n
kleiner gleich t ist:
-
Ist n durch t
teilbar? Wenn ja, Ausgabe: "keine Primzahl".
-
Erhöhe den Wert von t um 2.
-
Ist n kleiner gleich t?
Wenn ja, Ausgabe: "ist eine Primzahl".
Eine weitere Möglichkeit sich über den Algorithmus Klarheit zu
verschaffen, wäre eine graphische Darstellung des Programmablaufes.
Ein derartiges Ablaufdiagrammes zeigt die folgende Abbildung, welche ein
sogenanntes Flussidagramm des oben besprochenen
Primzahltests wiedergibt:
Es versteht sich von selbst, dass sich diese Darstellung nur für
Algorithmen eignet, die nicht zu umfangreich sind. Für den Anfänger
kann sie dennoch in vielen Fällen eine große Hilfe darstellen,
da gerade zu Beginn der Umfang der zu programmierenden Algorithmen eher
gering sein wird. Welcher der beiden vorgestellten Darstellungsarten man
den Vorzug gibt, ist unerheblich. Wesentlich ist jedoch, dass man sich
bevor man zur Implementationsphase schreitet über den genauen Programmablauf
im Klaren ist.
Implementationsphase
Wie nun der soeben erarbeitete Algorithmus programmtechnisch umgesetzt
wird, kann klarerweise erst an einer späteren Stelle dieses Programmierkurses
(im Kapitel If...EndIf) nachvollzogen werden.
Dokumentationsphase
Bei einfachen Programmen, wie dem Primzahltest würden als Dokumentation
einige Kommentare reichen, die direkt in den Programmcode eingefügt
werden (vgl. Beispiel 7 im Kapitel If...EndIf). Für
umfangreichere Programme ist eine systematische Anlage von schriftlichen
Unterlagen, die das Projekt betreffen zu empfehlen.
Mail
an den Autor, Karl.Weinstich@theresianum.ac.at