Array in Funktion definieren und in main-Funktion ausgeben



  • Hallo,
    ich als Neuling habe leider das Problem eine Aufgabe zur Prüfungsvorbereitung zu lösen und in der Forensuche sind die Aufgabenstellungen leider immer leicht, aber essentiell unterschiedlich.

    Aufgabenteil 1:
    Schreiben Sie eine Funktion 'int checkerboard'. Die Funktion hat als Parameter ein zweidimensionales ganzzahliges Array 'arr' der Grösse 8x8.
    In der Funktion wird das Array mit einem Schachbrettmuster gefüllt. Verwenden Sie dazu die Zahlen 1 (schwarz) und 0 (weiss). Beginn ist weiss.
    (In der Funktion erfolgt KEINE Ausgabe auf den Bildschirm! )

    Dafür habe ich folgenden Code geschrieben:

    #include <iostream>
    using namespace::std;

    int checkerboard (int arr[8][8]);

    int checkerboard (int arr[8][8])
    {
    int arr[8][8] =
    {
    {0,1,0,1,0,1,0,1},
    {1,0,1,0,1,0,1,0},
    {0,1,0,1,0,1,0,1},
    {1,0,1,0,1,0,1,0},
    {0,1,0,1,0,1,0,1},
    {1,0,1,0,1,0,1,0},
    {0,1,0,1,0,1,0,1},
    {1,0,1,0,1,0,1,0}
    };
    return 0;
    }

    Der zweite Teil:
    Schreiben Sie eine main-Funktion, in der die checkerboard-Funktion aufgerufen wird. Nach dem Aufruf soll der Inhalt des Arrays auf dem Bildschirm als 8x8 array (Zahlenmuster) ausgegeben werden.
    Schreiben Sie hier NUR DIE MAIN-FUNKTION (keine zusätzlichen Funktionen, keine Klassen, ...)

    Mein Code:
    int main()
    {
    int arr[8][8];

    checkerboard();

    cout << arr << endl;

    system("PAUSE");
    return 0;
    }

    Beim Ausführen erfolgen leider nur Fehlercodes:
    Fehler 1: error C2082: Neudefinition des formalen Parameters "arr"
    Fehler 2: error C2660: 'checkerboard': Funktion akzeptiert keine 0 Argumente
    Fehler 3: IntelliSense: Zu wenig Argumente im Funktionsaufruf

    Für Hilfe wäre ich sehr dankbar 🙂



  • Was hast du deiner Funktion übergeben?



  • Meinst du im ersten Teil das "return 0;"?
    Habe auch schon Alternativen wie "return arr;" oder "return arr[8][8];", allerdings hat das auch nicht geholfen 😞



  • Schreiben Sie eine Funktion 'int checkerboard'.

    Ich vermute mal, du hast inkompetente Lehrer. In der Aufgabe wird nicht beschrieben, warum das int zurückgeben soll bzw. was der Returnwert sein soll. Erscheint mir daher sinnlos.

    Wie kommst du darauf, dass du dein C-Array einfach mit << ausgeben kannst?

    Pass auch auf mit dem Parameter

    int checkerboard (int arr[8][8])
    

    Bei Parameterübergabe von C-Arrays (im Gegensatz zum C++-std::array) muss man immer furchtbar aufpassen... Man kann auch ein 2d-Array unpassender Größe übergeben - die erste Zahl wird nämlich ignoriert. Hier könntest du auch

    int checkerboard (int arr[][8])
    

    oder

    int checkerboard (int arr[1234][8])
    

    schreiben und es wäre kein Unterschied. Daher nimm lieber C++-arrays, da weißt du wenigstens, wie groß sie sind.

    Hausaufgabenservice:

    #include <array>
    #include <iostream>
    
    using Board = std::array<std::array<int, 8>, 8>;
    
    // Funktion soll laut Aufgabe int returnen, hat aber nichts sinnvolles
    // zu returnen. "int" ist hier nicht sinnvoll, also nehme ich "void".
    void checkerboard(Board &board) {
        for (size_t i = 0; i < board.size(); ++i)
            for (size_t j = 0; j < board[i].size(); ++j)
                board[i][j] = (i & 1) != (j & 1);
    }
    
    int main() {
        Board board;
        checkerboard(board);
        for (size_t i = 0; i < board.size(); ++i) {
            for (size_t j = 0; j < board[i].size(); ++j)
                std::cout << board[i][j];
            std::cout << '\n';
        }
    }
    


  • Ne, du hast gesagt, checkerboard bekommt ein 2D Array übergeben. Wo hast du das der Funktion übergeben? Sonst google mal, wie man einer Funktion ein Argument übergibt. 😉



  • Wasa4568 schrieb:

    Beim Ausführen erfolgen leider nur Fehlercodes:
    Fehler 1: error C2082: Neudefinition des formalen Parameters "arr"
    Fehler 2: error C2660: 'checkerboard': Funktion akzeptiert keine 0 Argumente
    Fehler 3: IntelliSense: Zu wenig Argumente im Funktionsaufruf

    Da wird nix ausgeführt, das sind Fehlermeldungen des Compilers. Diese Fehler zeigen aber, dass du überhaupt nichts von Funktionen oder Arrays verstanden hast...
    Fehler 1: Was ist daran nicht zu verstehen?
    Fehler 2: Du musst beim Ausführen soviele Argumente übergeben wie in der Funktion deklariert wurden.
    Fehler 3: resultiert aus Fehler 2