Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Hilfe mit Sudoku Tester

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
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);

}






}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.02.2016, 11:07 Uhr
jubuntu79



Hallo ~Heyyy,

ich verstehe die Frage nicht ganz. Möchtest Du überprüfen, ob
a) es irgendwo im Sudoku einen im jetzigen Zustand des Sudoku ungültigen Wert gibt?
b) ob der Anwender für dieses Feld den einzig richtigen Wert eingegeben hat? Zwischendurch sind ja scheinbar mehrere Werte möglich, aber für die endgültige Lösung ist nur ein Wert möglich.

Übrigens: Die Funktion einlesen() überprüft nicht, ob die Datei zulässige Inhalte hat oder ob in ihr Mist steht.

Gruß jubuntu79
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: