Nabend Leute :)
In der Vorlesung Informatik 1 gabs folgende Hausaufgabe:
1 | Ergänzen Sie das folgende C++-Programmfragment so, dass bei
|
2 | Ausführung die Zahlen 1, 2, 3 ... n*n in das zweidimensionale
|
3 | Array matrix[n][n] als Spirale im Uhrzeigersinn geschrieben
|
4 | werden. Z.B. wollen wir für n=4 die folgende Ausgabe haben:
|
5 | 1 2 3 4
|
6 | 12 13 14 5
|
7 | 11 16 15 6
|
8 | 10 9 8 7
|
Das Codefragemnt dazu:
1 | #include <iostream>
|
2 | using namespace std;
|
3 |
|
4 | int main () {
|
5 | const unsigned int n = 5;
|
6 | unsigned int matrix[n][n];
|
7 |
|
8 | //*************************************
|
9 | // Hier beliebig viele Zeilen ergaenzen
|
10 | //*************************************
|
11 |
|
12 | for (unsigned int r = 0; r < n; ++r){
|
13 | for (unsigned int c = 0; c < n; ++c){
|
14 | if (matrix [r][c] < 10){
|
15 | cout << ' ';
|
16 | }
|
17 | cout << matrix[r][c] << ' ';
|
18 | }
|
19 | cout << endl;
|
20 | }
|
21 |
|
22 | return 0;
|
23 | }
|
An dem bestehenden Codefragment (also den beiden for-Schleifen) soll
natuerlich nichts geaendert werden.
Meine Loesung fuer diese Aufgabe sieht so aus:
1 | #include <iostream>
|
2 | using namespace std;
|
3 |
|
4 | int main () {
|
5 | const unsigned int n = 5;
|
6 | unsigned int matrix[n][n];
|
7 |
|
8 | //*************************************
|
9 | // Hier beliebig viele Zeilen ergaenzen
|
10 |
|
11 | int counter = 1, x = 0, y = n - 1;
|
12 |
|
13 | while (counter <= (n * n)) {
|
14 | // von links nach rechts
|
15 | for (int i = x; i <= y; i++) {
|
16 | matrix[x][i] = counter++;
|
17 | }
|
18 |
|
19 | // von oben nach unten
|
20 | for (int i = x + 1; i <= y; i++) {
|
21 | matrix[i][y] = counter++;
|
22 | }
|
23 |
|
24 | // von rechts wieder nach links
|
25 | for (int i = y - 1; i >= x; i--) {
|
26 | matrix[y][i] = counter++;
|
27 | }
|
28 | y--;
|
29 |
|
30 | // von unten wieder nach oben
|
31 | for (int i = y; i > x; i--) {
|
32 | matrix[i][x] = counter++;
|
33 | }
|
34 | x++;
|
35 | }
|
36 |
|
37 | //*************************************
|
38 |
|
39 | for (unsigned int r = 0; r < n; ++r){
|
40 | for (unsigned int c = 0; c < n; ++c){
|
41 | if (matrix [r][c] < 10){
|
42 | cout << ' ';
|
43 | }
|
44 | cout << matrix[r][c] << ' ';
|
45 | }
|
46 | cout << endl;
|
47 | }
|
48 |
|
49 | return 0;
|
50 | }
|
Meine Loesung (scheint) fuer beliebige n-Werte (solange n >= 1) zu
funktionieren.
Meine Frage:
Wie haettet Ihr das gemacht? Kann man das so stehen lassen, oder habt
Ihr noch ein paar Tipps wie man das haette besser machen koennen?
Freue mich ueber euren Input :)
Gruesse