012
21.06.2003, 21:23 Uhr
~0xdeadbeef
Gast
|
Ich dachte, das würde aus der Funktion klar.
1. abs ist eine Funktion, die den Betrag des übergebenen ints zurückgibt. Zum Beispiel ist
C++: |
abs(-1) = abs(1) = 1
|
2. Gehen wir mal meine Schleife Schritt für Schritt durch. Wir halten zu Anfang fest: Die Raute ist 2*n-1 Zeilen lang und breit, außerdem ist sie symmetrisch. Das heißt, wir müssen einen möglichst symmetrischen Schleifendurchlauf finden. Ich mache das so:
C++: |
for(i = -n+1; i < n; ++i) {
|
Weil dann der Betrag von i symmetrisch verläuft. Für n = 3 nimmt abs(i) zum Beispiel die Werte 2, 1, 0, 1, 2 an. Wenn wir die Raute eigentlich als Quadrat auffassen, besteht eine Zeile aus 2*n-1 Zeichen. Davon sind 2*(n-abs(i))-1 Sterne, der Rest (also 2*abs(i)) sind Leerzeichen, die zu gleichen Teilen vor und hinter den Sternchen stehen. Da man Leerzeichen aber nicht sieht, können wir und die hinter den Sternchen auch sparen, und schreiben:
C++: |
for(j=0; j < abs(i); ++j) putchar(' '); /* abs(i) Leerzeichen vor den Sternchen einfügen */ for(j=0; j < 2*(n-abs(i))-1; ++j) putchar('*'); /* 2*(n-abs(i))-1 Sternchen einfügen */ putchar('\n'); /* Zeilenende */ }
|
Alles klar? |