AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Türme von Hanoi, richtiger Algorythmus?
Thema durchsuchen
Ansicht
Themen-Optionen

Türme von Hanoi, richtiger Algorythmus?

Ein Thema von condor · begonnen am 18. Dez 2006 · letzter Beitrag vom 1. Feb 2007
Antwort Antwort
condor

Registriert seit: 24. Okt 2006
27 Beiträge
 
#1

Türme von Hanoi, richtiger Algorythmus?

  Alt 18. Dez 2006, 20:22
Hi, ich habe die Türme von Hanoi schon fast fertig. Die Bewegung an sich dürfte auch nicht schwer fallen, aber ich hätte da eine Frahe zum Algorythmus:
Was ist an dem falsch? Wenn ich ihn ausführe, dann wird jedes Mal die oberste Scheibe bewegt und mehr nicht.

Delphi-Quellcode:
procedure TForm1.umsetzen(anzahl, von, nach, hilf : integer);
   var lauf: integer;
       s: string;
   begin
   Application.ProcessMessages;
   if aborted=1 then exit;
   s:='';
   for lauf:=0 to 0+anzahl do s:=s+' ';
   memo1.Lines.add(s+'umsetzen('+inttostr(anzahl)+','+
                   inttostr(von)+','+inttostr(nach)+','+
                   inttostr(hilf)+')');
   if anzahl=1 then setze_eine(von,nach)
   else begin
       umsetzen(anzahl-1,von,hilf,nach);
       umsetzen(1,von,nach,hilf);
       umsetzen(anzahl-1,hilf,nach,von);
       end;
   end;

procedure TForm1.setze_eine(von,nach : integer);
  var jetzt:integer;
   begin
   inc(versuch);
   progressbar1.position:=versuch+1;
   tturmx[nach].steine[spinedit1.Value-1]:=tturmx[von].steine[spinedit1.Value-1];
   tturmx[nach].steine[spinedit1.Value-1].Parent:=tturmx[nach];
   memo2.Lines.add(inttostr(versuch)+ ': '+inttostr(von)+' -> '+inttostr(nach));
        Jetzt := GetTickCount + SpinEdit2.value;
        REPEAT
            Application.ProcessMessages;
        UNTIL GetTickCount > Jetzt;
   end;
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Türme von Hanoi, richtiger Algorythmus?

  Alt 19. Dez 2006, 08:35
Bemühe doch mal den Herrn Google.
Der Findet sicher eine Million Einträge zu diesem Thema.
Und es gibt sicher auch Musterlösungen...
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#3

Re: Türme von Hanoi, richtiger Algorythmus?

  Alt 19. Dez 2006, 08:49
Schonmal hier nach Hier im Forum suchenHanoi gesucht?
Offenbar nicht, sonst hättest Du Matze's Beispielcode in der OpenSource Sparte gefunden...
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
SeriousToni

Registriert seit: 12. Jan 2007
39 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Türme von Hanoi, richtiger Algorythmus?

  Alt 1. Feb 2007, 19:41
Ich habe eine etwas andere Variante gefunden:
Code:
procedure Hanoi(n,nr:integer; von,nach,uber:char; ausgabe:string);
begin
nr:=n;
if n>0 then
  begin
  Hanoi(n-1,nr,von,uber,nach,ausgabe);
  ausgabe:='Verschiebe Scheibe '+inttostr(nr)+' von '+von+' nach '+nach;
  form1.listbox1.Items.add(ausgabe);
  Hanoi(n-1,nr,uber,nach,von,ausgabe);
  nr:=nr-1;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var anz,num:integer;ausg:string;
begin
anz:=strtoint(form1.Edit1.Text);
Hanoi(anz,num,'A','C','B',ausg);
form1.Label4.Caption:=inttostr(form1.ListBox1.Count);
end;

end.
Ich sitze jetzt schon andert halb Stunden hier und versuche nachzuvollziehen, wie das Programm diese Procedur abarbeitet und wie sich die Variablen bei jedem Durchlauf ändern, aber ich bekomme es nicht raus. Erklärt sich vielleicht jemand bereit hier mit diesem Code einen kleinen Durchlauf mit mir zu machen? Das Programm funktioniert aber ich kann nicht nachvollziehen wie?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Türme von Hanoi, richtiger Algorythmus?

  Alt 1. Feb 2007, 20:31
Alte Erinnerungen werden wach...
Damals, als es noch (fast) kein Internet gab, hat ich mir den algorithmus selber aus den Fingern gesogen und meine Info-Lehrer überrascht

Also, das ganze ist rekursiv und geht so:

Der Usprungsauftrag lautet für insgesamt 5 Scheiben :
>>Verschiebe 5 Scheiben von A nach C (über B)

Was macht nun diese Funktion Verschiebe: [1. Funktionsaufruf / 1.rekursive Instanz]
Sie sagt sich: "Das geht doch ganz einfach" und macht folgendes:
>>jemand muss erstmal die oberen 4 Scheiben nach B [das "über"] verschieben
>>dann verschiebe ich 1 Scheibe von A nach C
>>dann muss der jemand die 4 Scheiben noch von B nach C schieben

Und wer verschiebt die 4 Scheiben? Na die eigene Funktion ein zweites mal (aus sich sebst heraus) aufgerufen [2. rekursive Instanz]:
Und die hat natürlich den selben Befehlssatz, nur die Eingangsparameter lauten jetzt:
Verschiebe 4 Scheiben von A nach B
>>also die oberen 3 Scheiben erstmal von A nach C
>>eine Scheibe von A nach B
>>die 3 beiseite gelegten Scheiben von C nach B

usw.
Miniaturansicht angehängter Grafiken
hanoi_974.png  
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:34 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