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...


Anmelden zum Antworten