Autor Beitrag
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: So 14.01.18 18:14 
ja.

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: So 14.01.18 18:34 
Aber wenn ich zum Beispiel diesen Teil der solve() Methode nehme :
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
for (int value = 1; value <= 9; value++) { // Alle Zahlen von 1-9 werde getestet

      if (check(i, j, value, Matrix) == true) { // Gehe auf nächstes freies Feld
        Matrix[i][j] = value; // setze den Wert
        if (solve(i + 1, j, Matrix) == true)          
          return true;
        
      }
    }

Verstehe ich nicht wie ich das ganze umschreiben soll. Da wüde ja return anzahl; nicht viel Sinn ergeben.
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: So 14.01.18 18:39 
wieso nicht

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 14.01.18 19:09 
Hallo,

ich habe diesen Thread für 24h gesperrt. Dies soll Dir, Linus, Gelegenheit geben, Dir selbstständig grundsätzliche Gedanken zu Deinem Programm zu machen. Insbesondere den Hinweis, einfach mal in normalen Sätzen aufzuschreiben, was Dein Programm Schritt für Schritt tun soll, halte ich für sinnvoll. Es kann hier nicht so weiter gehen, wie bisher, dass Du völlig planlos Dinge ausprobierst und dann fragst, warum es nicht geht.

Der Thread entsperrt sich in 24h von selbst.

Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".

Für diesen Beitrag haben gedankt: FinnO, LINUS19, Symbroson, Th69
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Mo 15.01.18 20:06 
Ich habe jetzt in der Abbruchbedingung while ( solve(0, 0,Matrix)<1 ); , es werden also solange Sudoku generiert bis es mehr als eine Lösung hat. z.b kommt jetzt nach 9 Schleifen Durchläufen das hier:

63 Lösungen // Lösungen Die anzahl der Lösungen wird auch richtig gezählt.

802100000
400063000
090085074
200000050
080000000
500000007
005700009
010002000
009408300

Aber wenn ich jetzt while ( solve(0, 0,Matrix)>1 ); als abbruchbedingung habe, also so lange suche bis es nur eine Lösung gibt, läuft die Schleife nur einmal durch. ( um unlösbare Sudokus wegzunehmen
ausblenden Quelltext
1:
2:
 if(anzahl==0)
      continue; // unlösbare Sudokus werden wegelassen
)
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Mo 15.01.18 20:10 
Zitat:
while ( solve(00,Matrix)<1 ); , es werden also solange Sudoku generiert bis es mehr als eine Lösung hat
denk darüber nochmal nach. du durchläufst die Schleife, solange die Anzahl der Lösungen kleiner als 1 ist.

Zitat:
ausblenden C++-Quelltext
1:
2:
3:
while ( solve(00,Matrix)>1 );
if(anzahl==0)
      continue// unlösbare Sudokus werden wegelassen

warum nicht einfach while(solve(..) != 1) ?!

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Mo 15.01.18 20:41 
user profile iconSymbroson hat folgendes geschrieben Zum zitierten Posting springen:
Zitat:
while ( solve(00,Matrix)<1 ); , es werden also solange Sudoku generiert bis es mehr als eine Lösung hat
denk darüber nochmal nach. du durchläufst die Schleife, solange die Anzahl der Lösungen kleiner als 1 ist

Verstehe ich nicht so ganz ,es hat doch 63 Lösungen.

Mit =! 1 funktioniert es wenn ich z.B 25 als vorgegebe Zahlen mache, aber wenn ich jetzt 17 eingebe, hängt sich das Programm nach einem Durchlauf auf, es rechnet noch ( man kann auf terminate klicken) aber es passiert dann auch nichts mehr.Liegt das daran das zu viele Sachen durchgerechnet werden müssen, weil bei 17 Zahlen kann es ja sehr viele Lösungsmöglichkeiten geben?
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Mo 15.01.18 20:59 
nochmal.
1.
was du willst: solange Sudokus generieren bis eines mehr als eine Lösung hat
dein code: while ( solve(00,Matrix)<1 );
was er tut: lösen, solange es weniger als eine Lösung gibt.
was bedeutet das in der solange-bis Bedingung?
Fällt dir zwischen gewolltem und passierendem ein gewisser Unterschied auf?

2.
du sagst, dass du solange suchst bis es nur eine Lösung gibt
gibst aber als code an while ( solve(00,Matrix) > 1 );
das Heißt in dem Falle, dass du alle Zahlen kleiner gleich eins, also auch 0 mit einschließt.
Das fixt du, indem du folgendes tust: if(anzahl==0continue;
das ist aber eigentlich unnötig, wenn du gleich prüfst, ob anzahl == 1 und dann abbrichst, also solange anzahl != 1

Ansonsten verstehe ich irgendetwas an deiner Umsetzung nicht, vmtl weil ich nicht den gesamten Quelltext kenne.


Mal davon abgesehen: Hast du dir denn jetzt erstmal überlegt, wie die Grundstruktur deines Programmes aussehen soll? Sprich einen Pseudo-Code geschrieben? Dann haben wir wenigstens alle ein Muster nach dem wir uns richten können, was die Hilfe ungemein vereinfachen könnte.
Bitte ignoriere das nicht schon wieder - sonst habe auch ich keine Lust mehr dir hier zu helfen. Das ist nicht böse gemeint oder so, sondern du machst es einem echt schwer dir helfen zu können.

Danke.

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Mo 15.01.18 21:24 
Es funktioniert jetzt doch schon, z.b nach 699 Durchläufen mit 25 Zahlen bekomme ich folgendes Sudoku(dauert aber ziemlich lange):
900000047
310700020
004008000
470900050
000064000
208000000
000207600
090000300
000036001

Und das ist laut meinem Sudoku Löser eindeutig lösbar. Wofür brauche ich dann noch den Pseudotext?
Ich meinte ja nur das es sich bei kleineren Zahlen wie z.B 17 "aufhängt" und zu keiner Ausgabe kommt wie ich weieter oben schon geschrieben habe.
Oder verstehe ich dich gerade völlig falsch?
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Mo 15.01.18 21:59 
Zitat:
Ich meinte ja nur das es sich bei kleineren Zahlen wie z.B 17 "aufhängt" und zu keiner Ausgabe
Ich glaube auch schonmal erwähnt zu haben, dass die Anzahl der Lösungsmöglichkeiten steigt, je weniger Zahlen du vorgibst. Höchstwahrscheinlich mehrfach exponentiell - das kann man so ohne weiteres nicht herleiten.

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)

Für diesen Beitrag haben gedankt: LINUS19
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Mo 15.01.18 22:21 
Eine Frage hätte ich noch:
Ich wollte noch verschiedene Schwierigkeitsgrade machen, aber die Schwierigkeit hängt ja nicht nur von der Anzahl der vorgegebenen Zahlen ab, würde es unterschiedlich schwierig sein wenn ich die Schwierigkeit in Abhängigkeit von der Anzahl der Methodenaufrufe mache, oder was gibt es noch für Möglichkeiten?
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Mo 15.01.18 22:27 
Ich vermute, dass es schwieriger wird, je mehr Lösungsmöglichkeiten es gibt, denn viele Möglichkeiten bedeutet, dass es in vielen Feldern mehrere Ziffern zur Auswahl gibt, die folglich erst relativ spät ausgefüllt werden könnten.
Du darfst es aber auch nicht übertreiben ;)

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)

Für diesen Beitrag haben gedankt: LINUS19
LINUS19 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 156
Erhaltene Danke: 1

Windows 10, 7
Java(Eclipse)
BeitragVerfasst: Mo 15.01.18 22:35 
Was meinst du übertreiben?
Die Schwierigkeit einfach zufällig lassen?
Symbroson
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 382
Erhaltene Danke: 67

Raspbian, Ubuntu, Win10
C, C++, Python, JavaScript, Lazarus, Delphi7, Casio Basic
BeitragVerfasst: Mo 15.01.18 22:38 
Nein, zu wenige Ziffern vorgeben.
Ich hoffe das Thema hat sich damit erledigt

_________________
most good programmers do programming not because they expect to get paid or get adulation by the public, but because it's fun to program. (Linus Torvalds)

Für diesen Beitrag haben gedankt: LINUS19