Themenbereich: Arbeiten mit Arrays
Ferienaufgabe 1: Magische Quadrate
Ein magisches Quadrat der Ordnung n ist
- eine n x n-Matrix,
- in der jede der Zahlen 1 bis n*n genau einmal vorkommt und
- deren Zeilen-, Spalten- und Hauptdiagonalensummen
jeweils n*(n*n+1)/2 betragen.
Ein magisches Quadrat der Ordnung n für ungerade n kann wie folgt
erzeugt werden:
- Starte mit der 1 genau eine Position unterhalb der Mitte
der Matrix!
- Gehe für die Zahlen 2 bis n*n jeweils genau einen Schritt
nach unten und nach rechts!
- Wenn Du über den unteren Rand hinauskommst, beginne
wieder in der ersten Zeile!
- Beginne entsprechend wieder in der linken Spalte, wenn Du über
den rechten Rand hinauskommst!
- Wenn Du auf ein bereits besetztes Feld triffst, gehe -- von der
zuletzt besetzten Position aus gesehen -- zwei Schritte
nach unten!
Schreiben Sie ein Oberon-Programm, das von der Standardeingabe eine
(ungerade) Zahl einliest und dann aufgrund des vorstehend beschriebenen
Algorithmus ein magisches Quadrat der entsprechenden Ordnung ausgibt.
Beispiel: Ein nach dem gegebenen Algorithmus erzeugtes magisches
Quadrat der Ordnung 7 sieht wie folgt aus:
theseus$ ./MagSquare
Bitte geben Sie die gewuenschte (ungerade) Ordnung
des magischen Quadrates ein:
7
22 47 16 41 10 35 4
5 23 48 17 42 11 29
30 6 24 49 18 36 12
13 31 7 25 43 19 37
38 14 32 1 26 44 20
21 39 8 33 2 27 45
46 15 40 9 34 3 28
Quelle: Donald Knuth, The Art of computer programming, Vol. 1, Seite 162