Zweidimensionale arrays



  • Kann man das nicht so machen?

    if(eingabe[k].at(0) == '-')
    {
    break;
    }

    Ok habs hinbekommen. Danke aufjedenfall mal für die Hilfe. Ich denke die Ausgabe kriege ich hin 😃

    Gibts nicht eventuell eine Möglichkeit das ich mich mit dir irgendwie andersweitig in Verbindung setzen kann? Werde eventuell in nächster Zeit öfters mal ein paar Schubser in die richtige Richtung brauchen.



  • Statt break einfach continue benutzen, wenn das nicht eh schon deine Lösung war. Fragen kannst du ja weiter hier im Forum stellen.



  • Ok habs doch noch nicht ganz. Meine erste Zeile wird komplett ausgegeben, aber in der zweiten Zeile sind die Zahlen schon falsch. Liegt aber an der Ausgabe und nicht am array. Hab ich mich irgendwo vertan mit dem s oder p +=1?

    #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;
            }
    
            int s = 0;
            int p = 0;
    
            for (int m = 0; m < 11; m++)
            {
                    string reihe = eingabe[m];
    
                    for (int n = 0; n < reihe.length(); n++)
                    {
                            if (reihe.at(n) == '.')
                            {
                                    cout << ";";
                            }
                            else if (reihe.at(n) == '|')
                            {
                                    cout << "//";
                            }
                            else if (reihe.at(n) == '-')
                            {
                                    cout << "=";
                            }
                            else
                            {
                                    cout << sudoku[s][p];
                                    p += 1;
                            }
                    }
                    int p = 0;
                    s += 1;
                    cout << endl;
            }
    
            system("PAUSE");
            return 0;
    }
    


  • Deine Ausgabe hält sich aber nicht an die Aufgabenstellung:

    Die Erzeugung der Ausgabe darf nur unter Verwendung der Werte in sudoku[9][9] geschehen, auf den Eingabetext eingabe[11] darf dann nicht mehr zurückgegriffen werden.

    Wenn du nur das sudoku[9][9] Array nutzt ist es meiner Meinung nach sowieso einfacher, da du dann nicht mehr 4 Zähler sondern nur noch 2 brauchst.



  • 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