AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi procedure abbrechen bzw. warum läuft sie weiter? ^^

procedure abbrechen bzw. warum läuft sie weiter? ^^

Ein Thema von Olga · begonnen am 30. Apr 2010 · letzter Beitrag vom 1. Mai 2010
Antwort Antwort
Olga

Registriert seit: 2. Apr 2010
7 Beiträge
 
#1

procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 30. Apr 2010, 19:12
Mal wieder ein Hallöchen von mir :)

Wie ihr euch sicherlich denkt, hab ich ein Problem :)
Und zwar folgendes:

Ich starte meinen Lösungsvorgang über einen Button, der dann verschiedene Aktionen duchführt und eine procedure triggert.
In dieser ist eine while Schleife, welche jedoch immer wieder aufgerufen wird nachdem mein Programm eigentlich fertig sein sollte.
Ich hab es schon mit exit und application.ProcessMessages versucht, jedoch keinen Erfolg gehabt. Es scheint fast so als würde er über den Punkt rüber zur letzten Schleife gehen die er findet.

Ich versuche mal wichtigen Quellcode zu posten, wenn was fehlen sollte müsstet ihr mir bescheid sagen.

Delphi-Quellcode:
procedure TForm1.BackTracking(var Nr,INr :integer);
begin

While Nr <> 82 do
begin
ZahlZuKoordinaten(Nr);
b := xKoo-1;
c := yKoo;
if Nr >= 82 then
break;
if INr = 9 then
begin
  Nr := Nr-1;
  INr := Positionsarray[Nr-1,0]+1;
  sudokuarray[b,c] := 0;
  Backtracking(Nr,INr);
end;
if Moeglichkeitenarray [Nr-1,INr] = 0 then
begin
  if INr = 0 then
  begin
    if richtung = 0 then
    begin
      Nr := Nr-1;
      INr := positionsarray[Nr-1,0]+1;
      richtung := 0;
      BackTracking(Nr,INr)
    end
    else
    begin
      Nr := Nr+1;
      INr := 0;
      richtung := 1;
      Backtracking(Nr,INr);
    end;
  end;
  begin
    if Moeglichkeitenarray[Nr-1,0] <> 0 then
    sudokuarray[b,c] := 0;
    Nr := Nr-1;
    INr := (Positionsarray[Nr-1,0])+1;
    Richtung := 0;
    Backtracking(Nr,INr);
  end;
end;
  If Moeglichkeitenarray [Nr-1,INr] <> 0 then
    begin
      sudokuarray[b,c] := Moeglichkeitenarray[Nr-1,INr];
      d := Moeglichkeitenarray[Nr-1,INr];
      
      Reihe(b,c);
      if e = 1 then
      Spalte(b,c);
      if e = 1 then
      Kasten(b,c);
      if e = 1 then
      begin
        Positionsarray[Nr-1,0] := INr;
        Nr := Nr+1;
        INr := 0;
        Richtung := 1;
        BackTracking(Nr,INr);
      end;
    if e <> 1 then
    begin
      if INr <> 8 then
      begin
        INr := INr + 1;
        BackTracking(Nr,INr);
      end
      else
      begin
        Richtung := 0;
        Nr := Nr-1;
        INr := (Positionsarray[Nr-1,0])+1;
        sudokuarray[b,c] := 0;
        Backtracking(Nr,INr);
      end;
    end;
    end;
end;
Application.ProcessMessages;
Uebertragen();
end;
end.
So far...^^
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#2

Re: procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 30. Apr 2010, 19:24
Du kannst mit geschweiften Klammern Blöcke auskommentieren
und so erst einmal den Fehler einkreisen.
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  Mit Zitat antworten Zitat
Olga

Registriert seit: 2. Apr 2010
7 Beiträge
 
#3

Re: procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 30. Apr 2010, 19:29
Das is mir schon klar, nur wenn ich was auskommentiere kommt es 100% zum Stack Überlauf^^ (sprich ich habs schon ausprobiert) :)
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#4

Re: procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 30. Apr 2010, 19:56
Mach mal das hier:
Delphi-Quellcode:
{...}
While Nr < 82 do
{...}
Und deine Abbruchbedingung einfach weglassen....
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Olga

Registriert seit: 2. Apr 2010
7 Beiträge
 
#5

Re: procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 30. Apr 2010, 20:14
Davon abgesehen das "while Nr < 82" wirklich besser ist, klappt es immer noch nicht. Was meintest du mit Abbruchbedingung? Meintest du das Application.ProcessMessages?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 30. Apr 2010, 20:17
Ich will Dir ja nicht zu nahe treten, aber Deine Formatierung ist fürchterlich. Zumindest ich kann auf die Schnelle nicht erkennen, wo die Schleife eigentlich zu Ende sein soll. Und mit der "Abbruchbedingung" ist vermutlich das break gemeint.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Olga

Registriert seit: 2. Apr 2010
7 Beiträge
 
#7

Re: procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 30. Apr 2010, 20:22
Hab fast befürchtet das man auf die Formatierung noch zu sprechen kommt^^ ich werd mir mal dieses "how-to-formatier-deinen-code" reinziehen :) bisher hatte es halt gereicht, das ICH weiß was da steht^^

Jedoch hat sich leider weiterhin nix verändert.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 30. Apr 2010, 20:45
Zitat von Olga:
bisher hatte es halt gereicht, das ICH weiß was da steht^^
Anscheinend weißt du es ja eben nicht, sonst wüsstest du, wo das Problem liegt.

Ich habe eben mal versucht, den Code im Kopf durchzugehen, bin aber zu keinem Ergebnis gekommen, weil ich durch den Spaghetticode nicht durchblicke. Was mir aber aufgefallen ist, sind aber immer wieder ähnliche Muster, z.B.:
Delphi-Quellcode:
      Reihe(b,c);
      if e = 1 then
      Spalte(b,c);
      if e = 1 then
      Kasten(b,c);
      if e = 1 then
      begin
        Positionsarray[Nr-1,0] := INr;
        Nr := Nr+1;
        INr := 0;
        Richtung := 1;
        BackTracking(Nr,INr);
      end;
    if e <> 1 then
    begin
Warum fragst du den Wert von e hier vier mal direkt hintereinander ab? Fasse sowas zusammen, denn solcher Code ist (insbesondere durch die irreführende Einrückung) unleserlich und verwirrend.
Delphi-Quellcode:
    Reihe(b,c);
    if e = 1 then
    begin
      Spalte(b,c);
      Kasten(b,c);
      Positionsarray[Nr-1,0] := INr;
      Nr := Nr+1;
      INr := 0;
      Richtung := 1;
      BackTracking(Nr,INr);
    end
    else
    begin
      ...
Ebenfalls irreführend ist sowas:
Delphi-Quellcode:
    if Moeglichkeitenarray[Nr-1,0] <> 0 then
    sudokuarray[b,c] := 0;
    Nr := Nr-1;
    INr := (Positionsarray[Nr-1,0])+1;
    Richtung := 0;
    Backtracking(Nr,INr);
Auf den ersten Blick könnte man vermuten, dass alle diese Zeile von der Bedigung abhängig sind. Tatsächlich ist es aber nur die erste, die anderen werden immer ausgeführt.

Usw...

Rücke deinen Code ordentlich ein, fasse so weit wie möglich zusammen, und lagere redundante Codeteile in Subroutinen aus - glaub mir, es lohnt sich. Und ich wette, dass dir der Fehler sofort in die Augen springt, wenn du den Code mal ordentlich strukurierst.
  Mit Zitat antworten Zitat
Olga

Registriert seit: 2. Apr 2010
7 Beiträge
 
#9

Re: procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 1. Mai 2010, 14:29
Formatierung des Codes hat geholfen^^ Ich hab ein paar ends falsch gesetzt

Danke euch für eure Hilfe
  Mit Zitat antworten Zitat
Benutzerbild von Wolfgang Mix
Wolfgang Mix

Registriert seit: 13. Mai 2009
Ort: Lübeck
1.222 Beiträge
 
Delphi 2005 Personal
 
#10

Re: procedure abbrechen bzw. warum läuft sie weiter? ^^

  Alt 1. Mai 2010, 14:47
Eine gute Anleitung zur u.a. Codeformatierung findet man hier
Wolfgang Mix
if you can't explain it simply you don't understand it well enough - A. Einstein
Mein Baby:http://www.epubli.de/shop/buch/Grund...41818516/52824
  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 10:37 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