214 215
Man sieht hier einzelne Fragmente, die man häufig bei der Programmierung mit Schleifen antrifft. Es gibt eine lokale Variable, die vor dem Schleifenstart initialisiert und die innerhalb der Schleife hochgezählt wird. In der Abbruchbedingung wird geprüft, ob die lokale Variable einen bestimmten Wert angenommen hat. 216 217
218 219
Man kann sich zur Übung ein Programm überlegen, das die erste gerade Zahl ab dem Wert start, also start oder start+1, bestimmt und dann mit einem Zähler mit Zweierschritten (zaehler = zaehler +2) die nachfolgenden geraden Zahlen ausgibt. Wird diese Methode mehrfach direkt hintereinander aufgerufen, werden die neu berechneten geraden Zahlen an die existierende Liste angehängt. Ist dies nicht gewünscht, kann man vorher die Liste z. B. mit setzahlen(null) löschen. 220 221
Es hängt von der Art der Programmiersprache ab, wie man Listen abarbeiten kann. Der Ansatz, die Länge der Liste zu nutzen und innerhalb einer Schleife von Null an bis zur Listengröße zu zählen, dabei über eine Listen-Methode auf die Elemente zuzugreifen, wird überall unterstützt. 222 223
224 225
Zur Prüfung, ob eine Zahl zahl eine Primzahl ist wird zunächst der Fall abgehandelt, dass es ein Wert kleiner zwei ist, da es sich dann garantiert um keine Primzahl handeln kann. Danach wird angenommen, dass es sich um eine Primzahl handelt. Es wird dann für jede Zahl zwischen 2 und zahl (genauer zahl- 1) geprüft, ob diese Teile von zahl ist. Ist dass der Fall wird die Annahme verworfen und das Ergebnis auf false gesetzt. 226 227
Einschub: Nachdem angefangen wurde, nicht nur nach einer Lösung für eine nicht triviale Aufgabenstellung zu suchen, sondern auch diese zu optimieren, kann man systematisch erfassen was man gerade macht. Man sucht nach einem Algorithmus, einem Verfahren, das die gestellte Aufgabe löst und zusätzlich besondere Anforderungen erfüllt, wie z. B. besonders schnell zu sein. 228 229
Die hier genannten Eigenschaften kann man durchaus teilweise hinterfragen: - Die dynamische Endlichkeit hat zur Folge, dass ein nicht terminierendes Programm nicht die Übersetzung eines Algorithmus sein kann. Da es sich hierbei um einen Programmierfehler handeln kann, ist diese Aussage für diesen Fall in Ordnung. Kritischer ist es bei Steuerungsprogrammen, wie z. B. Kraftwerksteuerungen, die nach dem Start immer funktionieren sollen. Da aber auch solche Programme einen systematischen Weg zur Terminierung der angeschlossenen Systeme und damit auch der Software haben sollen, ist die Erklärung auch hier sinnvoll. - Beim Determinismus wird gefordert, das genau die gleiche Situation immer zum genau gleichen Folgeschritt führen soll. Formal muss man sich die Frage stellen, wie es dann mit Programmen, wie zur Steuerung von Spielautomaten, aussieht, die Zufall benötigen. Da es echten Zufall in Programmen nicht geben kann, sind auch diese Programme deterministisch. Natürlich kann man einen Pseudo-Zufall in Abhängigkeit von vielen Parametern, wie der Systemzeit oder Messwerten von Sensoren herstellen. Die Frage, ob es überhaupt einen echten Zufall gibt, führt eher zu philosophischen Betrachtungen. Bei der dynamischen Endlichkeit wird für die Rechenzeit eine Anzahl von Schritten als Maximalwert angegeben. Da für jede Zahl nur eine endliche Anzahl von Schritten, hier angenommen x, durchgeführt wird, muss das Programm auch nach endlich vielen Schritten terminieren. Damit ist gezeigt, dass die Rechenzeit endlich ist und, dass das Programm terminiert. 230 231
Die Suche nach den innerhalb bestimmter Randbedingungen optimalen Algorithmen ist eine zentrale Aufgabe der Informatik. Die Praxis zeigt, dass eine ingenieurmäßige Herangehensweise mit der Kenntnis von vielen erfolgreichen Lösungen für bestimmte Problemgruppen zur Findung guter Algorithmen wesentlich beiträgt. Dieser Ansatz ist wesentlicher Bestandteil der Informatik- Ausbildung. 232 233
Hier wird zunächst nur gezeigt, wie man Listenelemente auswählt und in neue Listen überträgt. Eine spannende, aber etwas später behandelte Frage ist, ob es sich um die selben (ja) oder nur um die gleichen (nein) Objekte handelt. Diese Frage spielt solange keine Rolle, wie die Objekte nicht verändert werden. 234