Beim Pferderennen sind die drei Pferde Franz, Gerd und Hans am Start. Wie viele verschiedene Möglichkeiten gibt es für sie, ins Ziel zu kommen?
Franz |
Gerd |
Hans |
1 |
2 |
3 |
|
3 |
2 |
2 |
1 |
3 |
|
3 |
1 |
3 |
1 |
2 |
|
2 |
1 |
Bei drei Pferden gibt es also sechs Möglichkeiten, in welcher Reihenfolge sie eintreffen können.
Nun kommt ein weiteres Pferd hinzu. Wenn es den ersten Platz
belegt, gibt es wieder sechs Möglichkeiten für die Platzierung von Hans, Gerd
und Franz (wie oben, mit dem Unterschied, dass sie jetzt die Plätze 2,3, 4
ausraufen). Jeweils sechs Möglichkeiten gibt es auch, wenn das neue Pferd 2.,
3. oder 4. wird, insgesamt also
bei vier Pferden: 4 * 6 =24 Möglichkeiten
Das geht nun so weiter: Mit dem fünften Pferd auf Platz 1
gibt es 24 Möglichkeiten, ebenso, wenn es auf Rang 2, 3, 4 und 5 kommt, also
bei fünf Pferden: 5 * 24 = 120 Möglichkeiten
Die folgende Tabelle zeigt nochmals die Anzahl der Möglichkeiten. Diese Anzahl wird auch noch in ein Produkt zerlegt:
Pferde | Möglichkeiten | Produktzerlegung |
1 | 1 | =1 |
2 | 2 | =2 * 1 |
3 | 6 | =3 * 2 * 1 |
4 | 24 | = 4 * 3 * 2 * 1 |
5 | 120 | = 5 * 4 * 3 * 2 * 1 |
6 | 720 | = 6 * 5 * 4 * 3 * 2 * 1 |
... | ... | ... |
n | =n * (n -1) * (n - 2)*... *6 * 5 * 4 * 3 * 2 * 1 |
Die Zahl n * (n -1) * (n - 2)*... *6 * 5 * 4 * 3 * 2 * 1 heißt Fakultät
zur Zahl n. Man schreibt dafür auch kurz: n! Sie ist bei vielen Betrachtungen zur Wahrscheinlichkeitsrechnung (Lotto, ...) eine wichtige Bedeutung.
Nun soll ein Programm entwickelt werden, das bei gegebener Zahl n die
zugehörige Fakultät berechnet.
Dieses Problem lässt sich sowohl mit der Wiederholung mit Anfangsbedingung als
auch mit der Wiederholung mit Endbedingung lösen.
Im Unterschied zu den Problemen, die bisher mit Wiederholungen gelöst wurden, ist hier aber bei Eintritt in die Wiederholung schon die Anzahl der Durchläufe bekannt. Die Informatiker haben hierzu eine vereinfachende Schreibweise vereinbart, die das "Mitzählen" (n:=n-1) für den Programmierer überflüssig macht. Die Wiederholung bei bekannter Anzahl der Durchläufe:
Die Angabe des Schrittes ist dabei nur notwendig, wenn die Schrittweite nicht 1 ist. Im Falle c = 1 schreibt man kürzer:
FOR i:=a TO b DO
Anweisungen
END;
Die folgenden beiden Varianten zeigen, wie man das geschilderte Fakultätsproblem mit der Wiederholung bei bekannter Anzahl der Durchläufe lösen kann - einmal mit Schrittweite 1, einmal mit -1.
Aufgabe:
Entwickle das zugehörige Programm nun in Oberon-2!
1. Schreibe ein Oberon-2-Programm, das bis 100 zählt und die
Zahlen auf dem Bildschirm ausgibt! Verändere es anschließend so, dass es von
100 rückwärts zählt.
Musterlösung
2. Schreibe ein Programm, das bei einzugebendem Startkapital, einzugebender Zinszeit in Jahren und einzugebendem Zinssatz das Kapital nach dieser Zeit berechnet. (ohne Musterlösung)
3. Schreibe ein Programm, das das kleine Einmaleins als Tabelle
ausgibt, etwa in der Form
Dabei musst du zwei Wiederholungen ineinander schachteln, etwa in der Form:
4. Perfekte Zahlen
(An diesem Problem lässt sich auch sehr gut das Laufzeitverhalten untersuchen.) Wenn die Summe aller Teiler einer Zahl die Zahl selbst ist, so nennt man die Zahl perfekt. Beispiele:
Zahl | Teiler | Summe der Teiler | perfekt? |
2 | 1, 2 | 3 | nein |
6 | 1,2,3 | 6 | ja |
16 | 1,2,4,8 | 15 | nein |
28 | 1,2,4,7,14 | 28 | ja |
Algorithmus zur Berechnung perfekter Zahlen
Die ersten 100000 natürlichen Zahlen sollen auf ihre Perfektion geprüft werden.
SchreibeIntXY(...) steht dabei für eine Oberon-2-Prozedur aus dem Modul
Display, die eine INTEGER-Zahl an eine bestimmte Stelle schreibt (sieht manchmal
schöner aus, ist aber nicht unbedingt nötig). In Oberon-2 schreibt man
dafür:
Display. WriteIntXY (spalte, zeile, zahl, anzahl der anzuzeigenden Stellen)
Musterlösung - Eine Liste der ersten 23 perfekten Zahlen
Zum Weiterdenken:
a. Notiere alle
perfekten Zahlen zwischen 1 und 100000!
b. Vergleiche die
Laufzeit der Untersuchung zwischen 10000 und 20000, zwischen 40000 und 50000 und
zwischen 90000 und 100000. Notiere jeweils die ungefähre Zeit. Worin liegt die
Ursache für den deutlichen Unterschied?
5. Ausblick: Algorithmus zur Bestimmung aller Primzahlen bis
200
Musterlösung