Zweidimensionale arrays



  • Und wie würdest du dass machen? Kein Plan wie man das ohne dieses Eingabe array machen soll 😕



  • Etwa so:

    for (int y = 0; y < 9; y++)
    { 
        for (int x = 0; x < 9; x++)
        {
            cout << ';' << sudoku[y][x];
        }
        cout << endl;
    }
    

    Das Einfügen der Trennstriche an den geeeigneten Stellen überlasse ich dir.



  • Wie soll dass denn gehen? Muss ja dann irgendwie so sein dass ich zwischen den Zahlen nach z.B. 3 Zahlen einen // trennstrich habe. Wie muss man so einen algorithmus aufbauen? Ich glaube ich mache die Aufgabe komplizierter oder anders als wir sie hätten lösen können weil sowas haben wir noch nicht wirklich gehabt 🙂



  • Einfach mit einer if-Bedingung. Wenn x oder y einen entsprechenden Wert erreicht wird ein Trennstrich/zeile eingefügt. Es ist ja durchaus erlaubt, dass einige Durchläufe der Schleifen mehr Zeichen/Zeilen ausgeben als die anderen.



  • Ok die "//" striche waren ja noch einfach aber wie mache ich es, dass zb wenn mein array bei [2][0] ist, dass dann eine komplette reihe "=" kommt? Dann mache ich mir ja den array kaputt weil ich alles verschiebe



  • Wieso verschiebt sich da was? Musst natürlich auch eine neue Zeile anfangen bevor dann wieder Werte aus dem Array kommen.



  • Habs jetzt so

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    
    {
            int sudoku[9][9] = { 0 };
            string eingabe[11];
    
            cout << "Bitte geben Sie das Sudoku ein:" << endl;
    
            for (int i = 0; i < 11; i++)
            {
                    getline(cin, eingabe[i]);
            }
    
            int pos1 = 0;
    
            for (int k = 0; k < 11; k++)
            {
                    int pos2 = 0;
    
                    if (eingabe[k].at(0) == '-')
                    {
                            continue;
                    }
    
                    for (int j = 0; j <= 21; j++)
                    {
                            if (eingabe[k].at(j) != '.' && eingabe[k].at(j) != '|')
                            {
                                    int sudoku_zahl = eingabe[k].at(j) - '0';
                                    sudoku[pos1][pos2] = sudoku_zahl;
                                    pos2 += 1;
                            }
    
                    }
                    pos1 += 1;
            }
    
            for (int s = 0; s < 9; s++)
            {
                    for (int p = 0; p < 9; p++)
                    {
                            cout << ";" << sudoku[s][p];
                            if (p == 2 || p == 5)
                            {
                                    cout << "//";
                            }
                            else if (s == 2 || s == 5)
                            {
                                    cout << endl;
                                    cout << "=";
                            }
                    }
                    cout << endl;
            }
    
            system("PAUSE");
            return 0;
    }
    

    Aber funktioniert ja nicht weil man da ja irgendwie eine komplette Zeile zwischen machen muss


  • Mod

    InvictusBlue schrieb:

    Aber funktioniert ja nicht weil man da ja irgendwie eine komplette Zeile zwischen machen muss

    Dann tu das doch! Es verbietet dir doch niemand, mehr als nur ein Zeichen oder mehr als eine Zeile in einem Durchlauf auszugeben.



  • Das stimmt natürlich ..
    Hab's fertig. Danke für eure Unterstützung und ganz besonders an sebi!

    Fertiges Programm:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    
    {
            int sudoku[9][9] = { 0 };
            string eingabe[11];
    
            cout << "Bitte geben Sie das Sudoku ein:" << endl;
    
            for (int i = 0; i < 11; i++)
            {
                    getline(cin, eingabe[i]);
            }
    
            int pos1 = 0;
    
            for (int k = 0; k < 11; k++)
            {
                    int pos2 = 0;
    
                    if (eingabe[k].at(0) == '-')
                    {
                            continue;
                    }
    
                    for (int j = 0; j <= 21; j++)
                    {
                            if (eingabe[k].at(j) != '.' && eingabe[k].at(j) != '|')
                            {
                                    int sudoku_zahl = eingabe[k].at(j) - '0';
                                    sudoku[pos1][pos2] = sudoku_zahl;
                                    pos2 += 1;
                            }
    
                    }
                    pos1 += 1;
            }
    
            cout << endl;
            cout << "Das Sudoku lautet:";
            cout << endl;
    
            for (int s = 0; s < 9; s++)
            {
                    for (int p = 0; p < 9; p++)
                    {
                            cout << ";" << sudoku[s][p];
                            if (p == 2 || p == 5)
                            {
                                    cout << ";//";
                            }
                            else if (s == 2 && p == 8 || s == 5 && p == 8)
                            {
                                    cout << endl;
                                    cout << "=======//=======//=======";
                            }
                    }
                    cout << endl;
            }
    
            system("PAUSE");
            return 0;
    }
    

Anmelden zum Antworten