AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Sich selbst aufrufender Algorithmus

Sich selbst aufrufender Algorithmus

Ein Thema von Flo.Hoe · begonnen am 25. Apr 2007 · letzter Beitrag vom 25. Apr 2007
Antwort Antwort
Flo.Hoe

Registriert seit: 28. Sep 2006
Ort: Berlin
73 Beiträge
 
Turbo C++
 
#1

Sich selbst aufrufender Algorithmus

  Alt 25. Apr 2007, 20:20
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;
Miniaturansicht angehängter Grafiken
fraktal_212.jpg  
Florian
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Sich selbst aufrufender Algorithmus

  Alt 25. Apr 2007, 20:23
Wo ist denn das Problem? Ruf die Funktion doch einfach ganz normal auf.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von R2D2
R2D2

Registriert seit: 20. Jan 2006
Ort: München
253 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Sich selbst aufrufender Algorithmus

  Alt 25. Apr 2007, 20:24
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;
if then then then = else else else = then;

Meine Webseite
  Mit Zitat antworten Zitat
Benutzerbild von CK_CK
CK_CK

Registriert seit: 31. Aug 2005
Ort: Dortmund, Germany
388 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: Sich selbst aufrufender Algorithmus

  Alt 25. Apr 2007, 20:24
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
Chris
» «
Mehr von mir (Programme, etc.): http://www.kroegerama.de
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.604 Beiträge
 
#5

Re: Sich selbst aufrufender Algorithmus

  Alt 25. Apr 2007, 20:27
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
Sebastian Gingter
Phoenix - 不死鳥
Mein Blog: http://gingter.org
  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 19:43 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