Mehrdimensionales Array ausgeben
-
Hallo. Ich habe versucht, ein Programm zu schreiben, welches die Elemente eines mehrdimensionalen Array's ausgibt. Hat jemand eine elegantere Lösung als meine?
(es geht NUR um die Ausgabe)#include <iostream> using namespace std; int main() { int HA[6][5]; HA[0][0] = 23; HA[4][5] = 3; HA[6][3] = 65; int f = 0; for(int i = 0; i < 6; i++) { cout << HA[f][i] << endl; if(i == 5 && f < 6) { i = 0; f++; } } cin.get(); return 0; }
-
#include <iostream> int main() { const unsigned int zeilen(6); const unsigned int spalten(5); int HA[zeilen][spalten]; // Array initialisieren for(unsigned int i(0); i != zeilen; ++i) for(unsigned int j(0); j != spalten; ++j) HA[i][j] = 0; HA[0][0] = 23; HA[4][5] = 3; // HA[6][3] = 65; <--- Sicher das du [6][3] meintest oder wmgl. ein Tippfehler? // Array ausgeben for(unsigned int i(0); i != zeilen; ++i) { for(unsigned int j(0); j != spalten; ++j) { std::cout << HA[i][j] << " "; // Elemente einer "Arrayzeile" nebeneinander ausgeben } std::cout << "\n"; // Jede neue "Arrayzeile" in neuer Zeile ausgeben } std::cout << std::endl; // Alternativ mit einem eindimensionalen Array int ein_dim[zeilen * spalten]; // Initialisierung for(unsigned int i(0); i != zeilen; ++i) for(unsigned int j(0); j != spalten; ++j) ein_dim[i * spalten + j] = 0; // Ausgabe for(unsigned int i(0); i != zeilen; ++i) { for(unsigned int j(0); j != spalten; ++j) { std::cout << ein_dim[i * spalten + j] << " "; } std::cout << "\n"; } return 0; }
-
Nur Ausgabe der Werte?:
std::copy ( (int*)HA, ((int*)HA ) + 6*5, std::ostream_iterator<int>(std::cout));
Mit Zeilenumbruch?:
void out (int i ) { std::cout << i << "\n"; } ... std::for_each ((int*)HA, ((int*)HA) + 6 *5, out );
btw:
Die Indexe deines Arrays solltest du nochmal überdenken.. In C++ gibt die Zahl beim deklarieren die Anzahl an und nicht das höchste Element, wie z.B in VB. (Das heisst der Bereich geht von 0 bist Anzahl-1)
-
Mizar schrieb:
#include <iostream> int main() { const unsigned int zeilen(6); const unsigned int spalten(5); int HA[zeilen][spalten]; // Array initialisieren for(unsigned int i(0); i != zeilen; ++i) for(unsigned int j(0); j != spalten; ++j) HA[i][j] = 0; HA[0][0] = 23; HA[4][5] = 3; // HA[6][3] = 65; <--- Sicher das du [6][3] meintest oder wmgl. ein Tippfehler? // Array ausgeben for(unsigned int i(0); i != zeilen; ++i) { for(unsigned int j(0); j != spalten; ++j) { std::cout << HA[i][j] << " "; // Elemente einer "Arrayzeile" nebeneinander ausgeben } std::cout << "\n"; // Jede neue "Arrayzeile" in neuer Zeile ausgeben } std::cout << std::endl; // Alternativ mit einem eindimensionalen Array int ein_dim[zeilen * spalten]; // Initialisierung for(unsigned int i(0); i != zeilen; ++i) for(unsigned int j(0); j != spalten; ++j) ein_dim[i * spalten + j] = 0; // Ausgabe for(unsigned int i(0); i != zeilen; ++i) { for(unsigned int j(0); j != spalten; ++j) { std::cout << ein_dim[i * spalten + j] << " "; } std::cout << "\n"; } return 0; }
War'n Tippfehler. Sehr gut, danke. Genau, was ich wollte...
-
drakon schrieb:
Mit Zeilenumbruch?:
void out (int i ) { std::cout << i << "\n"; } ... std::for_each ((int*)HA, ((int*)HA) + 6 *5, out );
Wenn man schon so anfängt, wieso dann nicht
std::copy((int*)HA, ((int*)HA) + 6*5, std::ostream_iterator<int>(std::cout, "\n"));
?
Felix
-
Hmm. Gute Frage..
-
And the cryptic-frickel oscar goes to...
-
skullyan schrieb:
Hat jemand eine elegantere Lösung als meine?
Ja.
Watch this, brother:
#include <iostream> using namespace std; #define ELEGANCE_CAST0R(x) (int*)x void elegant0r ( int* p, int y, int x ) { int i = 0; while ( i < y*x ) cout << p[i++] << endl; } int main() { int A[3][2] = {0}; A[1][1] = 88; // Egal ist achtundachtzig! elegant0r ( ELEGANCE_CAST0R(A), 3, 2); return 0; }
-
elegant0r schrieb:
skullyan schrieb:
Hat jemand eine elegantere Lösung als meine?
Ja.
Watch this, brother:
#include <iostream> using namespace std; #define ELEGANCE_CAST0R(x) (int*)x void elegant0r ( int* p, int y, int x ) { int i = 0; while ( i < y*x ) cout << p[i++] << endl; } int main() { int A[3][2] = {0}; A[1][1] = 88; // Egal ist achtundachtzig! elegant0r ( ELEGANCE_CAST0R(A), 3, 2); return 0; }
Super! Man lernt nie aus...