AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Turm von Hanoi

Ein Thema von Revoks · begonnen am 7. Mär 2024 · letzter Beitrag vom 13. Mär 2024
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.557 Beiträge
 
Delphi 12 Athens
 
#1

AW: Turm von Hanoi

  Alt 8. Mär 2024, 16:42
Hat er (sieht man nur nicht, da der CODE-Block fehlt), aber besser wird es nicht wirklich.
Delphi-Quellcode:
unit u_HanoiKlasse;

{$mode ObjFPC}{$H+}

interface
type
    TTurm= class
   Scheiben: array [1..n] TTurm
    Position : integer;
uses
  Classes, SysUtils, Dialogs;




implementation

{ TScheibe }




end.
Wenn schon dann richtig halbwegs vernünftig einzurücken.


Pascal (Delphi) wurde ja mal ursprünglich als "einfachere" Sprache erfunden, um leichter zu lernen, aber ein paar Grundkenntnisse wären angebracht, sie sich vorher zu verinnerlichen, um wenigstens die Syntax erstmal zu verstehen und anwenden zu können.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 8. Mär 2024 um 16:45 Uhr)
  Mit Zitat antworten Zitat
Revoks

Registriert seit: 7. Mär 2024
 
#2

AW: Turm von Hanoi

  Alt 8. Mär 2024, 17:00
unit u_Turm;
//Julian Lärz
{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;

type

{ Tfrm_TurmvonHanoi }

Tfrm_TurmvonHanoi = class(TForm)
btn_starten: TButton;
btn_schritt: TButton;
btn_schliessen: TButton;
Shape1: TShape;
procedure btn_schliessenClick(Sender: TObject);
procedure btn_startenClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormPaint(Sender: TObject);
private

public

end;

var
frm_TurmvonHanoi: Tfrm_TurmvonHanoi;
vAnzahlscheiben:integer;

implementation

{$R *.lfm}

{ Tfrm_TurmvonHanoi }

procedure Tfrm_TurmvonHanoi.btn_startenClick(Sender: TObject);
var
i: Integer;
x, y, size: Integer;
shape: TShape;
begin //zeichnen von Türmen


vAnzahlscheiben:= strtoint(Inputbox('Eingabe der Scheiben', 'Gib die Anzahl der Scheiben von Hanoi ein!','')); // Aufruf zum eingeben der zu zeichnenden Scheiben

// Setze die Anfangskoordinaten und Größe der Vierecke
x := 50;
y := 50;
size := 30;

for i := 1 to vAnzahlscheiben do
begin
// Erstelle ein neues TShape
shape := TShape.Create(Self);
shape.Parent := frm_TurmvonHanoi;

// Setze die Eigenschaften des TShape
shape.Shape := stRectangle;
shape.Left := x;
shape.Top := y;
shape.Width := size;
shape.Height := size;
shape.Brush.Color := clLime; // Farbe nach Bedarf anpassen

// Beschrifte das Viereck mit einem Namen
shape.Name := 'Rectangle' + IntToStr(i);
shape.Caption := 'Viereck ' + IntToStr(i);

// Passe die Koordinaten für das nächste Viereck an
x := x + size + 5;
end;

end;

procedure Tfrm_TurmvonHanoi.FormCreate(Sender: TObject);
begin

end;

procedure Tfrm_TurmvonHanoi.FormPaint(Sender: TObject); // in form paint geschrieben, damit keine fehler auftreten und damit ich 2 Ebenen habe und nicht mmeine türme beeinflussen
begin
Canvas.Brush.Color := clBlue; // Farbe für die Türme
Canvas.Pen.Color := clBlack; // Farbe für die Konturen

// Erster Turm
Canvas.Rectangle(150, 50, 200, 400);

// Zweiter Turm
Canvas.Rectangle(450, 50, 500, 400);

// Dritter Turm
Canvas.Rectangle(750, 50, 800, 400);

// Erster Turm
Canvas.Brush.Color := clWhite; // Farbe für den Text
Canvas.TextOut(175, 420, 'A');

// Zweiter Turm
Canvas.TextOut(475, 420, 'B');

// Dritter Turm
Canvas.TextOut(775, 420, 'C');
end;





procedure Tfrm_TurmvonHanoi.btn_schliessenClick(Sender: TObject);
begin
close;
end;

end.
hier wäre ein neuer quellcode, der erzeugt jetzt immerhin die grafischen sachen, jetzt geht es aber noch um das sortieren und die positionen der shapes, wie könnte ich jetzt hier weiter vorgehen, die andere Variante war mir dann doch leider zu kompliziert
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#3

AW: Turm von Hanoi

  Alt 8. Mär 2024, 17:25
Zitat:
hier wäre ein neuer quellcode
Den wird sich keiner freiwillig ansehen. Schon mehrfach wurde erwähnt doch bitte Delphi-Code-Tags zu nutzen.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.493 Beiträge
 
Delphi 12 Athens
 
#4

AW: Turm von Hanoi

  Alt 11. Mär 2024, 15:50
Mit der Darstellung und Steuerung der Anwendung sollte man sich eigentlich erst beschäftigen, wenn man ein fertiges Model der Daten hat.
Das ist aber ein Fehler den jeder Anfänger macht.

Welche Klassen werden benötigt, um jeden Zustand des Spiel darzustellen?
- Scheiben
- Türme

Zusätzlich eine eigene Klasse die Elemente des Spiels uns die fachliche Logik des Spiels zusammne hält.
Dadurch kann man die Darstellung und Steuerung von den Logik und den Methoden des Spiels besser trennen.
- HanoiGame

Welche Eigenschaften hat eine Scheibe?
Für die Grundfunktion des Spiels genügt einfach der Durchmesser im Verhältnis zu anderen Scheiben.
Dafür reicht eine Ganzzahl (z.B. 1 für die kleinste, 2 für die nächst größere, usw.).
Wie groß die eine Scheibe der Größe später gezeichnet wird ist Darstellung, nicht Teil der Spiellogik.
Delphi-Quellcode:
TScheibe = class(TObject)
private
  FSize: Integer;
published
  property Size: Integer read FSize write FSize;
end;
Wie stellt man einen Turm dar?
Das ist eigentlich nur eine Liste von Scheiben.
Die erste Scheibe liegt ganz unten, die nächste Scheibe darüber, usw. und die letze Scheibe ganz oben.
Delphi-Quellcode:
TTurm = class(TObjectList<TScheibe>)
end;
Die eigentliche Spielklasse definiert 3 Türme, Methoden die die Aktionen im Spiel darstellen und den Status des Spiels.
(alles ungetestet)
Delphi-Quellcode:
THanoiGame = class(TObject)
  constructor Create;
  destructor Destroy; override;
private
  FTurm0: TTurm;
  FTurm1: TTurm;
  FTurm2: TTurm;
public
  {gibt zurück, ob das Spiel erfolgreich beendet wurde, alle Scheiben auf Turm2}
  function IsFinished: Boolean;
  {bewegt die oberste Scheibe zwischen zwei Türmen}
  function Move(AFrom, ATo: TTurm): Boolean;
  {ACount gibt die Anzahl der Scheiben an, alle Scheiben auf Turm0}
  procedure NewGame(ACount: Integer);
published
  property Turm0: TTurm read FTurm0;
  property Turm1: TTurm read FTurm1;
  property Turm2: TTurm read FTurm2;
end;

implementation

constructor THanoiGame.Create;
begin
  inherited;
  FTurm0 := TTurm.Create;
  FTurm1 := TTurm.Create;
  FTurm2 := TTurm.Create;
end;

destructor THanoiGame.Destroy;
begin
  inherited;
  FTurm0.Free;
  FTurm1.Free;
  FTurm2.Free;
end;

procedure THanoiGame.NewGame(ACount: Integer);
var
  n: Integer;
  Item: TScheibe;
begin
  FTurm0.Clear;
  FTurm1.Clear;
  FTurm2.Clear;
  for n := ACount downto 1 do
  begin
    Item := TScheibe.Create;
    Item.Size := n;
    FTurm0.Add(Item);
  end;
end;

function THanoiGame.IsFinished: Boolean;
begin
  Result := (FTurm0.Count = 0) and (FTurm1.Count = 0);
end;

function THanoiGame.Move(AFrom, ATo: TTurm): Boolean;
var
  Item: TScheibe;
begin
  Result := False;
  if Assigned(AFrom) and Assigned(ATo) and (AFrom <> ATo) and (AFrom.Count > 0) then
  begin
    {die oberste Scheibe, muss kleiner sein als die oberste Scheibe des Ziels}
    Item := AFrom[AFrom.Count - 1];
    if ATo.Count = 0 then
      Result := True
    else
      Result := Item.Size < ATo[To.Count - 1].Size;

    if Result then
    begin
      AFrom.Extract(Item);
      ATo.Add(Item);
    end;
  end;
end;
Was bleibt ist die Klassen zu verstehen, die Spielklasse in der Oberfläche zu erzeugen und darzustellen und auf Eingaben des Spielers zu reagieren (Methoden der Spielklasse aufzurufen).
Wer das schafft hat sich so viel Hilfe bei den Hausaufgaben verdient und sollte bei der nächsten ähnlichen Aufgabe nicht scheitern.

Geändert von Blup (11. Mär 2024 um 16:12 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#5

AW: Turm von Hanoi

  Alt 11. Mär 2024, 18:01
Zitat:
Wer das schafft hat sich so viel Hilfe bei den Hausaufgaben verdient und sollte bei der nächsten ähnlichen Aufgabe nicht scheitern.
Dein Code wird vermutlich einfach nur kopiert und damit hat sich die Sache für den TE erledigt.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.058 Beiträge
 
Delphi 12 Athens
 
#6

AW: Turm von Hanoi

  Alt 12. Mär 2024, 12:18
Ja aber so sind wir ihn los.
Wie willst du einem der nichtmal Krabeln kann Stabhochsprung beibringen?
Er ist ja auch komplett lern unwillig.
Allerdings normalerweise geben wir fertige Lösungen nur an Mädchen, aber Blup ist vermutlich so alt , dass solche unbewusten Wertungen nicht mehr in seine Entscheidungen einfließen.
Andreas
Nobody goes there anymore. It's too crowded!
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
750 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Turm von Hanoi

  Alt 12. Mär 2024, 15:53
Fertig ist das was Blup geliefert hat nicht. Bei weitem nicht. Steht ja auch so geschrieben.

Ich glaube allerdings auch das Refoxs nur darauf wartet das wir hier aus lauter langer weile Hausaufgaben lösen.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von milos
milos

Registriert seit: 14. Jul 2008
Ort: Bern (CH)
512 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Turm von Hanoi

  Alt 12. Mär 2024, 22:39
Ich finde es eher schlimm wie manche Leute hier offensichtlich jüngeren Anfängern antworten... Wenn man schon nichts Vernünftiges zur Frage beizusteuern hat, muss man wirklich solch dumme Kommentare stehen lassen? Wir wissen nicht wie sein Kenntnisstand bzgl. Delphi oder Computer allgemein ist und dürfen nicht von jedem erwarten alles einfach schon zu können. Mal ganz davon abgesehen das BB-Codes mittlerweile schon uralte Syntax ist und die Jugend von heute wenn dann nur Markdown kennt...

Delphipraxis ist mittlerweile das einzige deutschsprachige Delphi Forum und wenn man hier auch so blöde angemacht wird, kann ich gut verstehen wieso die heutige Jugend schon gar nicht erst mit Delphi anfangen will...
Milos

Geändert von milos (12. Mär 2024 um 22:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
172 Beiträge
 
Delphi 12 Athens
 
#9

AW: Turm von Hanoi

  Alt 13. Mär 2024, 10:25
Ich verstehe Euch nicht. Sich hier im Forum anzumelden und Fragen zu stellen, zeigt doch gerade, dass keine fertige Lösung über Google oder eine KI gesucht wurde.
Da kann ich nur unterstreichen, was milos schreibt. Wenn ich als Anfänger so überheblich begrüsst werde, würde ich dem Altherrenclub auch nicht beitreten wollen.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.375 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Turm von Hanoi

  Alt 13. Mär 2024, 11:30
Ich verstehe Euch nicht. Sich hier im Forum anzumelden und Fragen zu stellen, zeigt doch gerade, dass keine fertige Lösung über Google oder eine KI gesucht wurde.
Da kann ich nur unterstreichen, was milos schreibt. Wenn ich als Anfänger so überheblich begrüsst werde, würde ich dem Altherrenclub auch nicht beitreten wollen.
Du meinst sicher, dass keine gefunden wurde.
Ganz ehrlich: Ich habe es gerade einfach probiert und der zweite Treffer war eine Lösung in der DP aus dem Jahr 2007. Die anderen Treffer habe ich nicht weiter geprüft, werden aber sicher einige brauchbare dabei gewesen sein.
Eine Frage bei der KI liefert eine Lösung auf Basis eines DP-Eintrags von 2010.

Ja, ich bin auch ein alter Sack, habe aber schon Anwendungsentwickler ausgebildet in Delphi.
Was der TE als Ansatz abliefert, ist Arbeitsverweigerung.
Das Thema ist "rekursive Programmierung" und somit kein völliges Anfängerthema! Da erwarte ich, dass grundlegende Kenntnisse vorhanden sind. Die sind hier nicht erkennbar.

Betrachtet das mal insgesamt. Keine Eigenleistung (nicht mal danach gesucht), aber am liebsten eine fertige Lösung haben wollen.
Dass wir arroganten Altherrenclub-Mitglieder da etwas empfindlich reagieren, ist hoffentlich nachvollziehbar. Jeder der Einsatz zeigt und Eigenleistung bringt, bekommt hier auch Hilfe. Und Vorschläge, wie man mit dem Programm anfängt hat es mehrere gegeben.
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 18:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz