AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Mein Sudoku Programm friert ein, komme nicht weiter

Mein Sudoku Programm friert ein, komme nicht weiter

Ein Thema von qb-tim · begonnen am 30. Mai 2007 · letzter Beitrag vom 2. Jun 2007
Antwort Antwort
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#1

Mein Sudoku Programm friert ein, komme nicht weiter

  Alt 30. Mai 2007, 15:33
Hi,

die folgende Prozedur soll aus s ein Sudoku machen. Folgendes ist vorab zu erwähnen:

=> ResetSudoku ist eine Prozedur, die das Programm zurücksetzt
=> c ist ein CHAR
=> x, y, i, j sind INTEGERs
=> s ist ein String
=> Edit[x, y] ist ein modifizierter TEdit (weitere PROPERTY "Sollution" (=Lösung) hinzugefügt)

Das Programm startet mit Form1 ohne Fehlermeldung. Sobald ich aber die Prozedur auslöse friert das Programm!
Die Decodierung sollte so funktionieren:

1. ASCII-Wert lesen
2. ASCII-Wert - 100 = ab
3. Trenne beide Ziffern
4. Setzte Ziffern in Edit[x, y] ein

Jedes ASCII-Zeichen steht für zwei Zahlen!

Delphi-Quellcode:
procedure TForm2.SetSudoku(s: String);
begin
  ResetSudoku;
  for i := 1 to 40 do
  begin
    c := s[i];
    y := Ord( c ) - 100;
    x := Round( Int( y / 10 ) );
    y := y - ( x * 10 );
    j := i * 2 - 1;
    Edit[Round( j - ( 9 * Int( j / 9 ) ) ), Round( Int( j / 9 ) )].Text := IntToStr(x);
    j := i * 2;
    Edit[Round( j - ( 9 * Int( j / 9 ) ) ), Round( Int( j / 9 ) )].Text := IntToStr(y);
  end;
  i := 41;
  c := s[i];
  y := Ord( c ) - 100;
  x := Round( Int( y / 10 ));
  y := y - ( x * 10 );
  j := i * 2 - 1;
  Edit[Round( j - ( 9 * Int( j / 9 ) ) ), Round( Int( j / 9 ) )].Text := IntToStr(x);
  for i := 42 to 81 do
  begin
    c := s[i];
    y := Ord( c ) - 100;
    x := Round( Int( y / 10 ) );
    y := y - ( x * 10 );
    j := i * 2 - 1;
    Edit[Round( j - ( 9 * Int( j / 9 ) ) ), Round( Int( j / 9 ) )].Sollution := IntToStr(x);
    j := i * 2;
    Edit[Round( j - ( 9 * Int( j / 9 ) ) ), Round( Int( j / 9 ) )].Sollution := IntToStr(y);
  end;
  i := 82;
  c := s[i];
  y := Ord( c ) - 100;
  x := Round( Int( y / 10 ));
  y := y - ( x * 10 );
  j := i * 2 - 1;
  Edit[Round( j - ( 9 * Int( j / 9 ) ) ), Round( Int( j / 9 ) )].Sollution := IntToStr(x);
  SollutionAvailable := True;
end;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: BUG => Ich komme nicht weiter

  Alt 30. Mai 2007, 15:45
Hast Du bei begin schon 'mal einen Breakpoint/Haltepunkt gesetzt und bis mit
F8 durch die Procedure gelaufen.
Dann sollltest Du sehen, wo es denn hängt.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: BUG => Ich komme nicht weiter

  Alt 30. Mai 2007, 16:24
Hi!

Könntest du dem Thread bitte noch einen Titel verpassen, unter dem man sich eher vorstellen kann, um was es geht?
Das wäre prima - danke!


Ciao, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#4

Re: Mein Sudoku Programm friert ein, komme nicht weiter

  Alt 31. Mai 2007, 11:46
OK.. Titel geändert...

@ Klaus08:
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Mein Sudoku Programm friert ein, komme nicht weiter

  Alt 31. Mai 2007, 15:34
Zitat von qb-tim:
OK.. Titel geändert...

@ Klaus08: :wiejetzt:
Also du gehst mit dem Cursor in diese Zeile

Delphi-Quellcode:
procedure TForm2.SetSudoku(s: String);
begin //<-- hier Breakpoint setzten (siehe Bild)
  ResetSudoku
;


Dann drückst Du F9, Dein Programm wird gestartet und hält wenn die Methode aufgerufen wird.
Dann kannst Du mit F7 oder F8 in dem Quelltext das Programm schrittweise weiterlaufen lassen.
Du solltest dann eigentlich sehen, wo das Programm hängt, wenn es in dieser Methode hängen sollte.

Grüße
Klaus
Miniaturansicht angehängter Grafiken
breakpoint_115.gif  
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#6

Re: Mein Sudoku Programm friert ein, komme nicht weiter

  Alt 31. Mai 2007, 16:34
OK.. Ich probiere das gleich aus
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#7

Re: Mein Sudoku Programm friert ein, komme nicht weiter

  Alt 31. Mai 2007, 16:45
OK! Ich habe mir die "ASCII-Werte" angesehen (c) und gesehen das irgendwelche komischen zeichen (vielleicht hexidecimal) aber auf jeden Fall keine Unicode ASCII-Werte widergegeben werden!

Daraus folgt die Frage: Wie lese ich aus einem String die ASCII-Werte (Unicode) in Form von Integers aus?

Was müsste ich am folgenden Codeabschnitt dafür ändern bzw hinzufügen...

Delphi-Quellcode:
for i := 1 to 40 do
  begin
    c := s[i];
    y := Ord( c ) - 100;
    x := Round( Int( y / 10 ) );
    y := y - ( x * 10 );
    j := i * 2 - 1;
    Edit[Round( j - ( 9 * Int( j / 9 ) ) ), Round( Int( j / 9 ) )].Text := IntToStr(x);
    j := i * 2;
    Edit[Round( j - ( 9 * Int( j / 9 ) ) ), Round( Int( j / 9 ) )].Text := IntToStr(y);
  end;
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#8

Re: Mein Sudoku Programm friert ein, komme nicht weiter

  Alt 2. Jun 2007, 09:17
Bitte zum Thema "ASCII" in diesem ( http://www.delphipraxis.net/internal...=730332#730332 ) Thread posten...

"Neue Frage = Neues Thema"
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.605 Beiträge
 
#9

Re: Mein Sudoku Programm friert ein, komme nicht weiter

  Alt 2. Jun 2007, 11:45
Zitat von qb-tim:
Daraus folgt die Frage: Wie lese ich aus einem String die ASCII-Werte (Unicode) in Form von Integers aus?


ASCII ist immer ungleich Unicode!
Entweder, eine Datei ist ASCII-Kodiert, ODER sie ist Unicode (UTF)-Kodiert, aber das eine schliesst das andere schon prinzipbedingt aus.

Per Zufall (oder eher historisch gewachsen), sind die ersten 128 UTF-Zeichen mit denen die im ASCII-Standard definiert sind identisch, aber ASCII ist eine 7-Bit Codierung und UTF mindestens mal eine 8-Bit, wenn nicht sogar 16-Bit oder noch breitere Codierung, je nach Version.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Mein Sudoku Programm friert ein, komme nicht weiter

  Alt 2. Jun 2007, 12:48
lange rede kurzer sinn, dann muss man den unicdoe-string halt in einen ASCII-String gemäß der am besten passenden/aktiven Codepage umwandeln.

oder?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz