Autor Beitrag
Tigu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Mi 15.03.06 16:23 
Hallo ihr!

Wir haben heute im Unterricht mit rekursiven Proceduren begonnen.
Dabei haben wir proceduren zum rechnen programiert.
Nun sollen wir diese Procedur so umschreiben, dass eine Elipsen-/ oder Kreisschar gezeichnet wird, wobei der Programmbenutzer in einem SpinEdit den Anfangsradius aussuchen soll. Mir ist klar, das ich für die Programmierung einen Radius und einen Abstand zwischen den Elipsen/Kreisen benötige, der der als integer deklariert ist.
Laut meinem Lehrer ist der Quelltext ganz kurz und dauert nur 10 Minuten. :gruebel:
Mir ist nur nicht klar, wie ich die vorhandene Procedure so umschreiben kann, dass das funktioniert. Auch für einen Neuanfang fehlt mir eine Idee.
Könnte ihr mir bitten einen Denkanstoß geben, wie man das machen kann.

Schon einmal Danke für die Hilfe

Tigu

Quelltext meines vorhandenen Buttons:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.BnrekursivClick(Sender:TObjekt);
var zeile:integer;
    procedure rekursivezeile (i:integer; var zeile:integer);
    begin
    if i=1 then
     zeile:=1
     else
     begin
     rekursivezeile(i-1,zeile);
     zeile:=zeile+1;
     end;
    end;

begin
rekursivezeile(spinediteingabe.Value,zeile);
Ausgabe.Text:=IntToStr(zeile);
end;



Moderiert von user profile iconTino: Topic aus VCL (Visual Component Library) verschoben am Do 16.03.2006 um 10:54
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mi 15.03.06 16:28 
Was willst du denn rekursiv machen? Kreise zeichnen und den Radius bis 0 runterdrehen?
Tigu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Mi 15.03.06 16:30 
Kreise zeichnen, den Radius herhöhen bis MaxValue ist rekursiv.


Zuletzt bearbeitet von Tigu am Mi 15.03.06 16:48, insgesamt 2-mal bearbeitet
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 15.03.06 16:38 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure Kreise(l, t, r, b, imax: integer);
begin
  if imax > 1 then
    Kreise(l + 1, t - 1, r + 1, b - 1, imax - 1);
  form1.canvas.ellipse(l, t, r, b);
end;


sollte so gehen, als max dann zb 100 angeben


Zuletzt bearbeitet von F34r0fTh3D4rk am Mi 15.03.06 16:53, insgesamt 1-mal bearbeitet
Tigu Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 93

XP
Delphi 7
BeitragVerfasst: Mi 15.03.06 16:46 
@F34r0fTh3D4rk,

kannst du mir bitte sagen, was an der Programmierung rekursiv werden soll?
Was ist mit
ausblenden Delphi-Quelltext
1:
form1.canvas.rectangle(l, t, r, b);					

? Müsste da nicht eher Elipse oder circle hin?
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 15.03.06 16:54 
wie was rekursiv werden soll ?

das ist rekursion ^^

jetzt ist das auch mit ellipse
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mi 15.03.06 16:56 
Zitat:
wie was rekursiv werden soll ?

Die Funktion ruft sich selbst auf!

_________________
Markus Kinzler.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mi 15.03.06 16:59 
<- der da hat folgendes geschrieben:
1. Was ist Rekursion ?

Rekursion oder auch Rekurrenz oder Rekursivität leitet sich von dem lateinischen Begriff recurrere (zurücklaufen) ab und ist ein algorithmisches Prinzip zur Lösung von Problemen, durch das Zerlegen in Teilprobleme um zu einer eleganten Lösung zu gelangen, dabei werden öfter vorkommende Segmente durch wiederholten Selbstaufruf zusammengefasst.

Dies funktioniert folgendermaßen:

Eine Funktion oder Prozedur ruft sich selbst auf:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure a();
begin
  a();
end;


eine andere Möglichkeit ist die indirekte Rekursion:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure a();
begin
  b();
end;

procedure b();
begin
  a();
end;


so kannst du das auch machen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure Kreise(radius, x, y, abstand, imax: integer);
begin
  if imax > 1 then
    Kreise(radius - abstand, x, y, imax - 1);
  form1.canvas.ellipse(x - radius, y - radius, x + radius, y + radius);
end;