Sudoku Löser
-
christianklemm schrieb:
Das mit typedef ist eine gute Idee.
Da ich in c/c++ nur die Grundlagen kenne weiß ich jetzt nicht genau was du mit STL-Container meinst.STL = Standard Template Library = Standard - Template (Schablonen) - Bibliothek
Ist schon ein merkwürdiges Wort, nicht? Template? Um es kurz zu machen (tutorials gibt es genug): Du machst dir ein eigenes Array.
std::vector<int> vec;Hier haben wir einen
std::vectorinstanziiert. std::vector ist eine Template-Klasse, die intern ein Array des übergebenen Typs anlegt (in diesem Fall vom Typ int).
Das schöne daran ist, dass es dieses Array für uns verwaltet und einigen Ärger erspart. Es gibt neben std::vector natürlich noch andere Container wie std::list, std::deque, std::queue und noch viele (wichtige) andere...
Verschiedene Funktionen erleichtern uns sofort das Leben:vec.size();//Größe des vectors. Hier 0, weil er noch Leer ist (wir haben nichts hineingetan) vec.push_back(5);//Wir legen eine 5 an die hinterste Position und vergrößern dabei natürlich den Vector um 1 (size() ist jetzt 1). vec.push_front(1);//size() ist jetzt 2. Einziger Unterschied zu push_back(): 1 wird jetzt (wie der Name suggeriert) ganz nach vorne getan. vec.pop_back();//Und pop_front, der bruder: Beide entfernen ein Objekt aus dem vector, pop_back() hinten und pop_front - na, rate mal. size() = 1. vec[0] = 4; //Der wert, der vorher 1 war, ist jetzt 4. Das Element an Position 0 also. vec.at(0) = 5;//dito, nur prüft diese Funktion, ob der übergebene Index (hier 0) größer als erlaubt ist (bei z.B. 100 würde er eine Exception werfen). vec.clear();//Löscht alle Elemente im vector. size() = 0.Es gibt noch viel mehr Funktionen, und Konstruktoren und noch Algorithmen (für alle Container). Das ist alles furchtbar interessant, schau mal hier.
Das ist BTW ein sehr großes Thema, denn du wirst feststellen dass auch iteratoren, templates und so weiter eine große Rolle in der STL Spielen. Klar dauert das ein wenig, nur ist die STL so ungefähr das selbstverständlichste für jeden (C++)-Programmierer. Also lohnt es sich definitiv mal vorbeizuschauen (was du sowieso irgendwann tun musst).
Zurück zu deinem Beispiel. Ein std::array ist etwas anderes als std::vector, da es nicht ver-größerbarer oder -kleinerbarer ist. Seine Größe bleibt gleich, deswegen übergeben wir sie als template-parameter übergeben. Der muss nicht umbedingt ein unbekannter Typ sein, es kann auch ein integraler sein (integral = int, short, char, long, und evt. long long):
std::array<int, 8> ar;Hier können wir auf jedes dieser 8 Elemente zugreifen. Das ist für dein Sudoku-Feld nützlich, da seine Größe ja nicht änderbar ist. Oder? Eine Referenz zu std::array findest du im Netz.
-
ok danke für den ausführlichen Beitrag.
Werde mich mal damit beschäftigen.Eine Frage hat von euch schon jemand einmal einen Sudokulöser programmiert?
-
christianklemm schrieb:
Eine Frage hat von euch schon jemand einmal einen Sudokulöser programmiert?
Ja, schon längst. Mit GUI und allem drum und dran.
Das System das ich benutzt hab, ist Bruteforce.
-
Asoo. Hast du dir meinen Quellcode durchgelesen? Eventuell auf Denkfehler/Programmierfehler gestoßen?
-
christianklemm schrieb:
Asoo. Hast du dir meinen Quellcode durchgelesen? Eventuell auf Denkfehler/Programmierfehler gestoßen?
Ich werde deinen Code nicht lesen. Stattdessen ein professioneller Tipp: refactoring. Mach lieber gleich alles nochmal, und diesmal schön formatieren, gut planen (besonders den Algorithmus) und konzentriert arbeiten. Dann dauerts nur halb solang.
-
Ja, ganz klassisch in C.

-
Asoo. Ok. Wie würde denn ein Gut formatierter Quellcode ausschauen?

Ich hatte mir gedacht mein Quellcode ist schön
-
@Cybertec Kann ich mir deinen Quellcode ansehen?

-
christianklemm schrieb:
Asoo. Ok. Wie würde denn ein Gut formatierter Quellcode ausschauen?

Ich hatte mir gedacht mein Quellcode ist schön
Oh nein...

Zum formatieren habe ich mal ein kleines Tutorial geschrieben, such mal danach (kann es bei bestem Willen nicht finden). Sonst schau mal wie andere "formattieren"...
-
christianklemm schrieb:
@Cybertec Kann ich mir deinen Quellcode ansehen?

Gib mal Deine Mailadresse, dann schick ich Dir meinen.