Clanintern Clanintern Clanintern

Forum

Öffentliche Foren
FORUM: Spiele & Computer THEMA: 2dimensionales array
AUTOR BEITRAG
DoomTheBrain

RANG Hardcore Sucker

#1 - 14.11 02:04

hallo zusammen

habe ein zweidemensionales arry mit 592*592 felder. das feld ganz unten links ist 0. nacher zählt es nach rechts und dann zeile um zeile nach oben. das ganz oben rechts ist also das letze mit 592 * 592 - 1

jetzt habe ich zwei schlaufen

int height = 592;
int width = 592;

for (int h = 0; h < height; h++) {

for (int w = 0; w < width; w++) {

//hier sollen die zahlen von oben links nach unten rechts durchgezählt
werden.

}

}

ich habe in der formel mal

(((height-h)*width)-(width+w)-1)]);

geschrieben unm das durchzuzählen und war mir auch sicher dass es gehen sollte. nur leider funktioniert es nicht. wo liegt mein fehler??

thx doom
Crush (Anti Däääh)

RANG Master of Clanintern

#2 - 14.11 04:04

definiere "nicht funktionieren".
DoomTheBrain

RANG Hardcore Sucker

#3 - 14.11 12:36

naja es zählt halt nich in der reihenfolge durch wie ich gerne hätte sondern irgendwie anders
Morath

RANG Deckschrubber

#4 - 14.11 12:52

also es soll eine Multiplikationstabelle werden?

code:

0 0 0 0
0 1 2 3
0 2 4 6
0 3 6 9


Sowas in der Art?

Dann setzt du den Wert in der inneren Schleife einfach per

array[w][h] = w*h;

HTH
DoomTheBrain

RANG Hardcore Sucker

#5 - 14.11 13:45

also i versuchs nochmals zu erklären

das array ist so durchnummeriert:

code:

15 16 17 18 19
10 11 12 13 14
 5  6  7  8  9
 0  1  2  3  4


halt einfach bis 592 spalten und zeilen

jetzt will ich das array durchlaufen und es soll einfach die zahlen ausgeben. dabei soll es allerdings links oben anfangen und dann zeile für zeile runterspringen. in diesem beispiel so

15
16
17
18
19
10
11
12
13
14
5
6
7
8
9
0
1
2
3
4

hoffe jetzt ist es klarer
Morath

RANG Deckschrubber

#6 - 14.11 15:21

und das array ist schon gefüllt?

Das Ganze ist doch nur eine Frage des Startwerts der einzelnen Indices. Du willst zwar die Zeilen vorwärts durchlaufen, die Spalten aber rückwärts:

code:

for (int h = height - 1; h >= 0; h--) {
  for (int w = 0; w < width; w++) {
    output(array[h][w]);
  }
}
DoomTheBrain

RANG Hardcore Sucker

#7 - 14.11 16:49

lol scheisse ja danke

ich habe gar nie daran gedacht die schleife rückwärts laufen zu laseen

danke
Morath

RANG Deckschrubber

#8 - 14.11 21:34

immer wieder gern :D
DoomTheBrain

RANG Sucker

#9 - 20.11 21:58

so noch eine aufgabe für dich die mit der oberen zusammenhängt

sollte eine funktion haben die mir aus einem 4er block immer die linke untere ecke liefert. auf das beispiel oben angewandt (noch um eine spalte erweitert damit es quadratisch wird:

code:

18 19 20 21 22 23
12 13 14 15 16 17
 6  7  8  9 10 11
 0  1  2  3  4  5


sollte dann das rauskommen:

12
14
16
0
2
4


komme einfach nicht darauf... :S
Morath

RANG Deckschrubber

#10 - 20.11 23:08

na so richtig schwer ist das aber auch nicht, eigentlich sollt ich dich noch etwas selber nachdenken lassen :-)

Du willst hier beide Schleifen mit einer Schrittweite von 2 statt 1 durchlaufen, dadurch bekommst du für jede Zeile und jeder Spalte immer nur jeden zweiten Index. Dann musst du nur noch dafür sorgen, dass du mit den richtigen Startwerten beginnst.

Wenn wie oben die Koordination 0,0 die linke untere Ecke sind, geht die Schleife für die Zeilen dann bei height - 2 (height - 1 ist der Index der obersten Zeile, du willst aber ja eine drunter anfangen und die oberste komplett überspringen) los, die für die Spalten bei 1 (entspricht 0 + 1, erste Spalte soll ja auch ausgelassen werden). Bei solchen Spielchen muss man auch immer noch sicherstellen, dass die Abbruchbedingung weiterhin passt, was sie hier aber wohl tut:

code:
for (int h = height - 2; h >= 0; h -= 2) {
  for (int w = 1; w < width; w += 2) {
    output(array[h][w]);
  }
}


Die Schreibweise h -= 2 is ne Abkürzung für h = h - 2, analog w += 2, in beiden Fällen wird der Index der Zählervariablen um 2 verändert, d.h. immer ein Indexwert aus dem Array "übersprungen".