PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++ - 2D-Array korrekt ausgeben


Drunky
2009-03-25, 23:42:52
Huhu,

muss mich im moment ein wenig durch C++ kämpfen.

Folgendes:
Ich brauche ein Array mit 400 Werten mit x und y Koordinate. (Werte 1-400, einfach hochzählen)

Sollte so aussehen:
http://666kb.com/i/b7ivungmxexgimtob.gif


#include <iostream>
using namespace std;

int main(){

int zeilen = 20;
int spalten = 20;
int i;
int j;
int matrix[zeilen][spalten]; // 2-D Array erzeugen (x+y Koords)
for(i=1;i<zeilen;i++){ // Zeilen
cout << i << " " << endl;
for(j=0;j<spalten;j++){ // Spalten
matrix[i][j] = i*spalten+j;
cout << i*spalten+j << " ";
}
}
cout << "\n" << "Position:" << matrix[1][1] << endl; // Ausgabe Arraywert an Position [Zeile][Spalte]
}


Ausgabe sieht nun so aus:
http://666kb.com/i/b7iw3070guco5di2j.gif

Warum packt der mir die eigentlich erste Zeile jeweils ans Ende der Zeile?

Freue mich über Erleuchtung :redface:

Coda
2009-03-26, 00:38:53
Weil dein endl an der falschen Stelle ist.

Drunky
2009-03-26, 10:51:13
Mh, ich glaub das ist nicht der Fehler.

Nehme ich endl komplett raus entsteht folgende Kette:
1 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 2 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 3 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 4 80 81

Der Fehler dürfte in der 1. Schleife liegen :/

#44
2009-03-26, 12:26:57
Probier mal

for(i=0;i<zeilen;i++){ // Zeilen
for(j=0;j<spalten;j++){ // Spalten
matrix[i][j] = i*spalten+j+1;
cout << matrix[i][j] << " ";
}
cout << endl; // hier ist das zeilenende
}


Ist allerdings ohne die Kopfzeile und -spalte.

Wenn du die auch haben willst, geht das mit mehr Schleifen ;)


int matrix[zeilen+1][spalten+1]; // man braucht logischerweise ne extra Zeile/Spalte für die Köpfe.

// Header für Zeilen u. Spalten
for(i=0;i<zeilen;i++){
matrix[i][0] = i;

}
for(i=0;i<spalten;i++){
matrix[0][i] = i;

}

//leere Felder füllen und alles ausgeben.
for(i=0;i<zeilen;i++){
for(j=0;j<spalten;j++){

if(i != 0 && j != 0) // header sollen nicht überschrieben werden...
matrix[i][j] = (i-1)*spalten+j; // versetzt die Zahlen um bei 1,1 mit 1 anzufangen

cout << matrix[i][j] << " ";
}
cout << endl; // hier ist das zeilenende
}


Alles freihand untested... So nach 30 min sollte ich jetzt alle mein groben Fehler raus haben, wehe du willst die Kopfzeile/spalte jetzt nicht X-D

Coda
2009-03-26, 16:57:41
Mh, ich glaub das ist nicht der Fehler.
Natürlich ist das der Fehler.

Tesseract
2009-03-26, 17:57:27
Natürlich ist das der Fehler.

erstens das, und zweitens hast du da ein durcheinander mit dem array.

20x20 plus kopf-zeile/spalte (wenn du die überhaupt in der ausgabe drin haben willst) hat eigentlich 21x21 felder (wovon 1-21x1-21 die eigentliche matrix ist) und dementsprechend musst du den code aufbauen. varianten gibt es dafür mehrere.