Hilfe bei Mehrdimensionalen Feldern



  • padreigh schrieb:

    Dann schau dir MEINE Initialisierung an. DU gibts keinen 2. Wert in deiner an, also ist (wenn ich mich bezüglich der defaultInit nicht irre) -EGAL WAS DU ZURÜCKBEKOMMST: Z U F Ä L L I G. Noch grafischer kann ich es in einem Textbasierten Forum ohne Bildeinfügemöglichkeit nicht machen 🙂

    okay also ich glaub langsam komm ich der sache näher...ich würd sogar behaupten ich habs kapiert^^

    das heißt quasi wenn ich

    ...
    int test[][3][2]=
    {
            {{0,1},{3,4},{5,6}},
            {{7,8},{9,10},{11,12}}
    };
    .....
    

    programmieren würde wäre

    cout << " " << int (test[0][0][0]);
    

    eine 0
    und

    cout << " " << int (test[0][0][1]);
    

    eine 1

    richtig?

    Vielen Dank schonmal für die schnelle Hilfe 👍



  • jupp ... und was wäre

    cout << " " << int (test[0][0][2]);
    

    ?



  • padreigh schrieb:

    jupp ... und was wäre

    cout << " " << int (test[0][0][2]);
    

    ?

    ähm in meiner logik kommt [0][0][2] irgendwie nicht vor

    kanns sein dass es gar nicht geht da die anzahl der elemente nur 0 und 1 zulässt?



  • Ich bin gemein 🙂 Jupp genau, das gibt nen Compilerfehler 😉

    Wenn du üben willst, gib den mal in richtiger Reihenfolge aus:

    int main()
    {
        int arr [2][3][2][4][1] =
        { 
            {{{{26},{11},{2},{28}},{{4},{13},{30},{17}}},{{{6},{15},{32},{33}},{{23},{8},{37},{34}}},{{{39},{10},{19},{36}},{{41},{12},{9},{38}}}},
            {{{{40},{14},{43},{45}},{{16},{42},{47},{46}}},{{{18},{44},{1},{31}},{{35},{3},{20},{29}}},{{{27},{5},{22},{21}},{{7},{25},{24},{48}}}}
        };
    
       std::cout
     << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0]
     << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0]
     << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0]
     << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0]
     << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0]
     << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0] << arr[][][][][0];
    }
    


  • mach ich gleich mal 🙂
    danke



  • [quote="Pafi"][quote="padreigh"]Ich bin gemein 🙂 Jupp genau, das gibt nen Compilerfehler 😉

    Wenn du üben willst, gib den mal in richtiger Reihenfolge aus:

    int main()
    {
        int arr [2][3][2][4][1] =
        { 
            {{{{26},{11},{2},{28}},{{4},{13},{30},{17}}},{{{6},{15},{32},{33}},{{23},{8},{37},{34}}},{{{39},{10},{19},{36}},{{41},{12},{9},{38}}}},
            {{{{40},{14},{43},{45}},{{16},{42},{47},{46}}},{{{18},{44},{1},{31}},{{35},{3},{20},{29}}},{{{27},{5},{22},{21}},{{7},{25},{24},{48}}}}
        };
    
       std::cout
     << arr[0][0][0][0][0] << arr[0][0][0][1][0] << arr[0][0][0][2][0] << arr[0][0][0][3][0] << arr[0][0][1][0][0] << arr[0][0][1][1][0] << arr[0][0][1][2][0] << arr[0][0][1][3][0]
     << arr[0][1][0][0][0] <<<< arr[0][1][0][1][0] << arr[0][1][0][2][0] << arr[0][1][0][3][0] arr[0][1][1][0][0] << arr[0][1][1][1][0] << arr[0][1][1][2][0] << arr[0][1][1][3][0]
     << arr[0][2][0][0][0] << arr[0][2][0][1][0] << arr[0][2][0][2][0]
     << arr[0][2][0][3][0] << arr[0][2][1][0][0] << arr[0][2][1][1][0] << arr[0][2][1][2][0] << arr[0][2][1][3][0] << arr[1][0][0][0][0] << arr[1][0][0][1][0] << arr[1][0][0][2][0]
     << arr[1][0][0][3][0] << arr[1][0][1][0][0] << arr[1][0][1][1][0] << arr[1][0][1][2][0] << arr[1][0][1][3][0] << arr[1][1][0][0][0] << arr[1][1][0][1][0] << arr[1][1][0][2][0]
     << arr[1][1][0][3][0] << arr[1][1][1][0][0] << arr[1][1][1][1][0] << arr[1][1][1][2][0] << arr[1][1][1][3][0] << arr[1][2][0][0][0] << arr[1][2][0][1][0] << arr[1][2][0][2][0]
     << arr[1][2][0][3][0] << arr[1][2][1][0][0] << arr[1][2][1][1][0] << arr[1][2][1][2][0] << arr[1][2][1][3][0] ;
    }
    

    sooo. könnte stimmen zumindest gings auf^^



  • padreigh schrieb:

    Ich bin gemein 🙂 Jupp genau, das gibt nen Compilerfehler 😉

    Nein, gibts nicht. Der Compiler prüft sowas nicht. Das Ergebnis ist zwar nicht definiert, aber wird bei dieser Initialisierung bei wahrscheinlich allen Compilern in der Praxis 3 sein.

    Ich wiederhole die wichtige Aussage:
    Der Compiler überprüft NICHT die Arraygrenzen. Dafür ist der Programmierer immer selbst verantwortlich!



  • otze schrieb:

    Der Compiler überprüft NICHT die Arraygrenzen. Dafür ist der Programmierer immer selbst verantwortlich!

    Und um die Verantwortung abzugeben, kann man intelligente Arrays wie std::tr1::array verwenden. Im Debug-Modus werden Indizes geprüft, im Release hat man volle Geschwindigkeit wie bei rohen Arrays.



  • Danke für den Hinweis bezgl. Arrays - ich benutze die nur noch so selten das mir das glatt durchging 😉

    Pafi schrieb:

    sooo. könnte stimmen zumindest gings auf^^

    Ja auf, schon, aber nicht sortiert auf 😉 deins gibt nach Korrektur und Trenner einfügen das hier aus:
    26,11,2,28,4,13,30,17,6,15,32,33,23,8,37,34,39,10,19,36,41,12,9,38,40,14,43,45,16,42,47,46,18,44,1,31,35,3,20,29,27,5,22,21,7,25,24,48 , meins aber 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, bei dir also den Array korrekt wiedergegeben, aber nicht sortiert wie oben gefordert 😉

    Und so gehts schneller 😉

    #include <iostream>
    #include <algorithm>
    int main(int argc, char *argv[])
    {
        int arr [2][3][2][4][1] =
        {
            {{{{26},{11},{2},{28}},{{4},{13},{30},{17}}},{{{6},{15},{32},{33}},{{23},{8},{37},{34}}},{{{39},{10},{19},{36}},{{41},{12},{9},{38}}}},
            {{{{40},{14},{43},{45}},{{16},{42},{47},{46}}},{{{18},{44},{1},{31}},{{35},{3},{20},{29}}},{{{27},{5},{22},{21}},{{7},{25},{24},{48}}}}
        };
        std::cout << "DEINS:\n"
         << "," << arr[0][0][0][0][0] << "," << arr[0][0][0][1][0] << "," << arr[0][0][0][2][0] << "," << arr[0][0][0][3][0] << "," << arr[0][0][1][0][0] << "," << arr[0][0][1][1][0] << "," << arr[0][0][1][2][0] << "," << arr[0][0][1][3][0]
         << "," << arr[0][1][0][0][0] << "," << arr[0][1][0][1][0] << "," << arr[0][1][0][2][0] << "," << arr[0][1][0][3][0] << "," << arr[0][1][1][0][0] << "," << arr[0][1][1][1][0] << "," << arr[0][1][1][2][0] << "," << arr[0][1][1][3][0]
         << "," << arr[0][2][0][0][0] << "," << arr[0][2][0][1][0] << "," << arr[0][2][0][2][0]
         << "," << arr[0][2][0][3][0] << "," << arr[0][2][1][0][0] << "," << arr[0][2][1][1][0] << "," << arr[0][2][1][2][0] << "," << arr[0][2][1][3][0] << "," << arr[1][0][0][0][0] << "," << arr[1][0][0][1][0] << "," << arr[1][0][0][2][0]
         << "," << arr[1][0][0][3][0] << "," << arr[1][0][1][0][0] << "," << arr[1][0][1][1][0] << "," << arr[1][0][1][2][0] << "," << arr[1][0][1][3][0] << "," << arr[1][1][0][0][0] << "," << arr[1][1][0][1][0] << "," << arr[1][1][0][2][0]
         << "," << arr[1][1][0][3][0] << "," << arr[1][1][1][0][0] << "," << arr[1][1][1][1][0] << "," << arr[1][1][1][2][0] << "," << arr[1][1][1][3][0] << "," << arr[1][2][0][0][0] << "," << arr[1][2][0][1][0] << "," << arr[1][2][0][2][0]
         << "," << arr[1][2][0][3][0] << "," << arr[1][2][1][0][0] << "," << arr[1][2][1][1][0] << "," << arr[1][2][1][2][0] << "," << arr[1][2][1][3][0];
    
        std::cout << "\n\n";
    
        // geht genausogut so:
        for(int eins=0; eins<2;++eins)
            for(int zwei=0; zwei<3; ++zwei)
               for(int drei=0; drei<2; ++drei)
                   for(int vier=0; vier<4; ++vier)
                       std::cout << "," << arr[eins][zwei][drei][vier][0] ;
    
        std::cout << "\n\n";
    
        std::cout << "Und sortiert gehts so:\n";
    
        // alle Zahlen aus dem multidimensionalen Array in einen Vector kopieren
        std::vector<int> vec(&arr[0][0][0][0][0],&arr[1][2][1][3][0]);
        // den mal sortieren (lassen)
        std::sort(vec.begin(),vec.end());
        // und alle Zahlen im Vektor ausgeben
        for(int i=0; i< vec.size(); ++i)
            std::cout << vec.at(i) << ", ";
    }
    


  • padreigh schrieb:

    Danke für den Hinweis bezgl. Arrays - ich benutze die nur noch so selten das mir das glatt durchging 😉

    Pafi schrieb:

    sooo. könnte stimmen zumindest gings auf^^

    Und so gehts schneller 😉

    #include <iostream>
    #include <algorithm>
    int main()
    {
        int arr [2][3][2][4][1] =
        {
            {{{{26},{11},{2},{28}},{{4},{13},{30},{17}}},{{{6},{15},{32},{33}},{{23},{8},{37},{34}}},{{{39},{10},{19},{36}},{{41},{12},{9},{38}}}},
            {{{{40},{14},{43},{45}},{{16},{42},{47},{46}}},{{{18},{44},{1},{31}},{{35},{3},{20},{29}}},{{{27},{5},{22},{21}},{{7},{25},{24},{48}}}}
        };
    
        std::vector<int> vec(&arr[0][0][0][0][0],&arr[1][2][1][3][0]);
            std::sort(vec.begin(),vec.end());
            for(int i=0; i< vec.size(); ++i)
                std::cout << vec.at(i) << ", ";
    }
    

    so weit bin ich noch nicht^^
    aber trotzdem nochmal danke für deine Hilfe 🙂


Anmelden zum Antworten