000
27.01.2016, 14:17 Uhr
~Heyyy
Gast
|
Hallo, ich bastele gerade an einem Sudoku-Tester. Dass heißt, dass das Programm ein halb fertiges Sudoku einliest (lehre Felder sind -1), der Benutzer eine lehres Feld auswählt, einen Wert eingibt, und das Programm sagt ob diese Belegung gültig ist. Bis jetzt kann mein Programm bzgl. einer vom Benutzer vorgegebenen Position die Gültigkeit bezüglich dieses Feldes überprüfen. Also Wenn der Benutzer in der 1. Zeile, 1 Spalte, eine 5 eingeben möchte schaut das Progamm ob in der 1. Spalte, 1. Zeile und in dem Quader eine 5 vorkommt.
Aber ich würde das ganze gerne auf das ganze Soduko Feld ausweiten, also dass jedes mal überprüft wird ob es irgendeinen Fehler gibt...aber scheitere daran kläglich. Falls jemand irgendeine Idee hat, wäre dass super
Hier mein Code:
#include<fstream> #include<iostream> class soduko { public: int soduko[9][9]; bool einlesen () // Es fehlt, wenn soduko zu lehr { std::ifstream input("soduko.txt"); if (input == NULL) { std::cout << "Datei konnte nicht gefunden werden" << "\n"; return 0; } else { for (int i = 0; i < 9; ++i) { for(int j = 0; j < 9; ++j) { input >> soduko[i][j]; } } return 1; } } void ausgabe () { //Ausgabe Block 1 -3 for (int i = 0; i < 3; ++i) { std::cout<<"\n"; for(int j = 0; j < 9; ++j) { if (j == 3 || j == 6) //erzeugt frei Spalten { std::cout<<" "; } if (soduko[i][j]!= -1) std::cout<<" "; //Für regelmäßige Skalierung...-1 std::cout<<soduko[i][j]<<" "; } } std::cout<<"\n"; //Ausgabe Block 3 -6 --> analog Block 1- 3 for (int i = 3; i < 6; ++i) { std::cout<<"\n"; for(int j = 0; j < 9; ++j) { if (j == 3 || j == 6) //erzeugt frei Spalten { std::cout<<" "; } if (soduko[i][j]!= -1) std::cout<<" "; //Für regelmäßige Skalierung...-1 std::cout<<soduko[i][j]<<" "; } } std::cout<<"\n"; //Ausgabe Block 6 -9 --> analog Block 1- 3 for (int i = 6; i < 9; ++i) { std::cout<<"\n"; for(int j = 0; j < 9; ++j) { if (j == 3 || j == 6) //erzeugt frei Spalten { std::cout<<" "; } if (soduko[i][j]!= -1) std::cout<<" "; //Für regelmäßige Skalierung...-1 std::cout<<soduko[i][j]<<" "; } } std::cout<<"\n"; } bool testeBelegung(int zeile, int spalte) { int wert; if (soduko [zeile][spalte] != -1) std::cout<<"Feld ist bereits belegt!\n"; else { std::cout<<"Wert: "; std::cin>>wert; std::cout<<"\n\n"; //Teste Zeile int countZeile = 0; for (int j = 0; j < 9; ++j) { if (soduko [zeile] [j] == wert) { countZeile ++; } } //Teste Spalte int countSpalte = 0; for (int i = 0; i < 9; ++i) { if (soduko [i] [spalte] == wert) { countSpalte ++; } } //Teste Quadarat int a, b; int countQuadrat = 0; a = zeile - zeile%3; b = spalte - spalte%3; for (int i = a; i < a + 3; ++i) { for (int j = b; j < b + 3; ++j) { if (soduko[i][j] == wert) countQuadrat ++; } } //Überprüfe alle Bedingen if (countZeile == 0 && countSpalte == 0 && countQuadrat == 0) { std::cout<<"Belegung moeglich!\n\n"; soduko[zeile][spalte]=wert; std::cout<<"Neues Soukon\n"; ausgabe(); return true; } else { std::cout<<"Belegung nicht moeglich!"; return false; } } } private: } ; int main() { std::cout<<"****************************************\n\n"; std::cout<<" Herzlich Wilkommen beim Soduko!\n\n"; std::cout<<"****************************************\n"; soduko soduko1; if (soduko1.einlesen()== 1) { soduko1.einlesen (); soduko1.ausgabe(); int zeile, spalte; std::cout<<"Zeile: "; std::cin>>zeile; while (zeile < 1 && zeile > 9) { std::cout<<"Geben Sie eine Zahl zwischen 1 und 9 ein!\n"; std::cout<<"Zeile: "; std::cin>>zeile; } zeile = zeile - 1; std::cout<<"Spalte: "; std::cin>>spalte; while (spalte < 1 && spalte > 9) { std::cout<<"Geben Sie eine Zahl zwischen 1 und 9 ein!\n"; std::cout<<"spalte: "; std::cin>>spalte; } spalte = spalte - 1; //Da Arrays bei 0 anfangen soduko1.testeBelegung(zeile, spalte); } } |