Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Sich selbst aufrufender Algorithmus (https://www.delphipraxis.net/90901-sich-selbst-aufrufender-algorithmus.html)

Flo.Hoe 25. Apr 2007 19:20


Sich selbst aufrufender Algorithmus
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe Ein kleines Programm erstellt, mit dem ein Fraktal gezeichnet werden kann.
(Ein Fraktal ist dadurch gekennzeichnet, dass seine einzelnen Bestandteile die selbe Erscheinung haben, wie das Gesamtbild).

Meine Frage ist: Wie kann ich eine Prozedur/Funktion in sich selbst aufrufen lassen.


Bisher habe ich das Problem gelöst indem ich viele Einzelne Prozeduren erschaffen habe, aber dadurch wird der Quelltext ziemlich unübersichtlich.

Delphi-Quellcode:
    Procedure Zeichnen1(x,y:integer;a:real);
    Procedure Zeichnen2(x,y:integer;a:real);
    Procedure Zeichnen3(x,y:integer;a:real);
    ......
Delphi-Quellcode:
Procedure TForm1.Zeichnen1(x,y:integer;a:real);
begin
Dreieck(x,y,a);
Dreieck(round(x+a),y,a);
Dreieck(round(x+a/2),y-round(sqrt(3)*a/2),a);
end;



Procedure TForm1.Zeichnen2(x,y:integer;a:real);
begin
Zeichnen1(x,y,a/2);
Zeichnen1(round(x+a),y,a/2);
Zeichnen1(round(x+a/2),y-round(sqrt(3)*a/2),a/2);
end;


Procedure TForm1.Zeichnen3(x,y:integer;a:real);
begin
Zeichnen2(x,y,a/2);
Zeichnen2(round(x+a),y,a/2);
Zeichnen2(round(x+a/2),y-round(sqrt(3)*a/2),a/2);
end;



Procedure TForm1.Zeichnen4(x,y:integer;a:real);
begin
Zeichnen3(x,y,a/2);
Zeichnen3(round(x+a),y,a/2);
Zeichnen3(round(x+a/2),y-round(sqrt(3)*a/2),a/2);
end;

3_of_8 25. Apr 2007 19:23

Re: Sich selbst aufrufender Algorithmus
 
Wo ist denn das Problem? Ruf die Funktion doch einfach ganz normal auf.

R2D2 25. Apr 2007 19:24

Re: Sich selbst aufrufender Algorithmus
 
Das was du suchst ist eine rekursive Funktion.

Ein einfaches Beispiel:

Delphi-Quellcode:
function Zaehle (Zahl: Integer): Integer;
begin
if Zahl < 20 then result := zaehle(Zahl)+1;
end;

CK_CK 25. Apr 2007 19:24

Re: Sich selbst aufrufender Algorithmus
 
Hi!
Das geht ganz einfach und nennt sich rekursiver Aufruf...
Delphi-Quellcode:
procedure Test(Int: Integer);
begin
  if Int > 1 then Test(Int - 1);
end;
Dies ist natürlich nur ein Beispiel, hat also keinen Sinn ;)

Chris

EDIT: Sorry, es kam keine rote Box :stupid:

Phoenix 25. Apr 2007 19:27

Re: Sich selbst aufrufender Algorithmus
 
Wichtig bei der Rekursion ist eigentlich nur eines:

Die Abbruchbedingung. Will heissen: Wann entscheidet die Funktion, dass sie sich eben NICHT mehr selber aufrufen muss sondern einfach nur zurückkehrt. Das ganze sollte tunlichst passieren, bevor es zu einem Stacküberlauf kommt ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:05 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