Autor Beitrag
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: So 13.12.09 23:37 
ok danke das scheint wohl schon zu klappen nur habe ich das problem dass nun wenn ich mein sudoku aufrufe an den stellen an denen nichts stehen sollte immer null steht.
Zitat:
Da aber ein leerer String kein Integer werden kann musst du noch sowas wie n default-Wert einbauen, dafür gibts StrToIntDef(sudoku[0,0,0], 0); wobei die letzte 0 der default-Wert ist.

da ich aber nun ein integer aus dem array gemacht habe geht das mit diesem StrToIntDef nicht und auch nicht mit IntToStrDef.
wäre super wenn ihr mir bei diesem problem nun noch helfen könntet^^ probleme über probleme :S und dienstag muss ich das spiel vorstellen >.<
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 14.12.09 00:03 
Hey,

dann musst du dir wohl selbst eine passende Funktion schreiben ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function IntToStrIfNotNull(int: Integer; def: String): String;
begin
  if (int <> 0then 
    result := IntToStr(int)
  else
    result := def; 
end;

str := IntToStrIfNotNull(0'leer'); //-> str = "leer"
str := IntToStrIfNotNull(1'leer'); //-> str = "1"


MfG Bergmann

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Mo 14.12.09 00:21 
hmm das funktioniert auch nicht oder ich hab was falsch gemacht^^
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
function IntToStrIfNotNull(int: Integer; def: String): String;
begin
  if (int <> 0then
    result := IntToStr(int)
  else
    result := def;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
sudoku[0,0,0]:=3;
sudoku[0,1,0]:=IntToStrIfNotNull(0'leer');

da kommt dann bei mir als fehlermeldung incompatible types integer und string.
außerdem verstehe ich die letzten beiden zeilen nicht ganz :S was genau soll das str darstellen?
ist das so richtig wie ich das eingesetzt hab? oder meintest du das noch anders?^^
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 14.12.09 01:37 
Guck ma in einen Quelltext, irgendwo musst du ja die Zahlen in ein String umwandeln und dann irgendwo ausgeben. Und da benutzt du ja sicherlich die normale IntToStr-Funktion und er macht aus der 0 im array eine '0'. Also musst du nun die normale IntToStr-Funktion durch die IntToStrIfNotNull-Funktion ersetzen. Wenn du nun IntToStrIfNotNull(sudoku[x,y,active], ''); aufrufst, dann macht er aus der 0 im Array ein '', also einen LeerString un es steht nix anstatt der '0' da...

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Mo 14.12.09 07:58 
ok super danke hab ich nun auch hinbekommen :D
nun habe ich aber noch den fehler dass beim prüfen immer falsch steht... selbst nachdem ich überall einfach eine 5 reingeschrieben habe :S
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button2Click(Sender: TObject);
begin
if testspalte and testzeile and testquadrat then showmessage('Sie haben das Sudoku richtig gelöst!')
else
showmessage('Das Sudoku ist fehlerhaft.');
end;

da vllt etwas falsch?
oder doch eher in der Funktion?
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
function testspalte:boolean;
var x, y, sum: integer;
begin
 result:= false;
  for x:= 0 to 8 do
   begin
   sum:= 0;
     for y := 0 to 8 do
     sum:= sum+ sudoku[x,y,a];
     if sum<>45 then
     exit;
  end;
  result:= true;
end;

function testzeile:boolean;
var x, y, sum: integer;
begin
result:=false;
for x:= 0 to 8 do
begin
sum:=0;
 for y:= 0 to 8 do
 sum:= sum+ sudoku[x,y,a];
 if sum<>45 then
 exit;
 end;
 result:= true;
 end;

function testquadrat:boolean;
var p, q, x, y, sum:integer;
begin
result:= false;
 for p:= 0 to 2 do
  for q:= 0 to 2 do
  begin
  sum:= 0;
  for x:= 0 to 2 do
   for y:= 0 to 2 do
   sum:= sum + sudoku[p*3+x,q*3+y,a];
    if sum<>45 then
    exit;
   end;
   result:= true;
   end;
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 14.12.09 18:01 
Hey,

das einzige was mir aufgefallen is, is das testspalte und testzeile identisch sind, da musst du die schleifen tauschen.
Warum er jetzt aber aber immer false zurück gibt weiß ichnicht, musst du mal mit dem debuger durchgehen. Setzt dir n Haltepunkt (F5) auf die if-Zeile in deinem Button2Click. Und dann kannst du mit F7 jede Zeile einzelln durchgehen. Wenn du ne Variable markierst und Strg+F5 drückst kannst du sie dir in nem extra überwachungsfenster anzeigen lassen. So kannst du nachverfolgen wann, wo und warum er mit false raus springt.

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Mo 14.12.09 18:37 
hmm ich weiß nicht genau was du mit schleifen tauschen meintest hab das nun so verstanden dass ich einfach anstatt von for x... for y dann for y.... for x gemacht hab.

hab mal mein programm angehängt wäre super wenn du versuchen könntest den fehler zu finden. bin voll in bedrängnis :S muss das spiel morgen vorstellen und es kamen einfach immer mehr fehler >.<
Einloggen, um Attachments anzusehen!
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 14.12.09 20:00 
Sry, aber ich hab auch wenig Zeit. Muss auch noch haufen HAs machen.
Un der Sinn der Sache is ja auch die Fehler selbst zu finden, so lernt man programmieren. Wenn du Probleme hast helf ich dir gern, aber bisl was musst du auch machen ;)

€: was mir grad noch einfällt, hast du das sodoku auch komplett gefüllt, bevor du die richtigkeit prüfst? wenn du das über die Summen machst muss jede Zelle einen Wert enthalten, sonst geht das nicht. Wenn du zwischendurch prüfen willst, dann musst du die andere Methode nehmen, die wir oben schon angesprochen haben...

MfG Bergmann.

p.s.: ja genau so hab ich das mit den schleifen gemeint, aber nur bei der einen funktion, bei der anderen nich...

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Mo 14.12.09 20:56 
ja ich habe jedes feld mit einer 5 gefüllt und auch einmal ein richtiges gelöstes sudoku verwendet

und nochmal zu dem anderen lösungsweg:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
type
  TSudoku = array[0..80..8of Integer;

var 
  SudokuList: TList;

function LoadSudoku(FileName: String): TSudoku;
begin
  //lade das Sudoku
end;

//neues sudoku hinzufügen
procedure Test;
var neu: TSudoku;
begin
  if OpenDialog.Execute then begin
    neu := LoadSudoku(OpenDialog.FileName);
    SudokuList.add(neu);
  end;    
end;

//auf sudoku zugreifen
function GetSudokuFromList(index: Integer): TSudoku;
begin
  result := TSudoku(SudokuList[index]);
end;

irgendwie seh ich das nur als aufrufen eines sudokus von einer datei oder so oder nicht?
eine überprüfung ob das sudoku richtig gelöst wurde ist das doch nicht oder? ich wüsste nich wo^^
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Mo 14.12.09 23:44 
Hey,

das war ja mein Vorschlag das Soduku zu laden. Das hier war der andere Lösungsweg. Da wird geprüft ob die Zahl doppelt in einer Reihe, Spalte oder Quad steht. Da musst du jetzt nur noch einbauen, das er die 0en außer acht lässt...

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^
Grimsch Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Di 15.12.09 19:33 
ok vielen dank durch dich bin ich sehr gut vorran gekommen =) wird wohl noch trotz fehler am ende eine 2 werden hoffe ich mal^^ werd ich donnerstagb erfahren wie der lehrer es findet bzw fand
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 15.12.09 23:43 
OK, sag ma bescheid wenn du die Note weißt, interessiert mich auch ^^

MfG

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^