Wiederholung bei bekannter Anzahl der Durchläufe

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!

Musterlösung

 

Weitere Aufgaben 

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:

Musterlösung

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