Entwickler-Ecke
Algorithmen, Optimierung und Assembler - rekursive Procedure zum Zeichnen (delphi 7)
Tigu - Mi 15.03.06 16:23
Titel: rekursive Procedure zum Zeichnen (delphi 7)
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:
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
Tino: Topic aus VCL (Visual Component Library) verschoben am Do 16.03.2006 um 10:54
digi_c - Mi 15.03.06 16:28
Was willst du denn rekursiv machen? Kreise zeichnen und den Radius bis 0 runterdrehen?
Tigu - Mi 15.03.06 16:30
Kreise zeichnen, den Radius herhöhen bis MaxValue ist rekursiv.
F34r0fTh3D4rk - Mi 15.03.06 16:38
Titel: Re: rekursive Procedure zum Zeichnen (delphi 7)
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
Tigu - Mi 15.03.06 16:46
@F34r0fTh3D4rk,
kannst du mir bitte sagen, was an der Programmierung rekursiv werden soll?
Was ist mit
Delphi-Quelltext
1:
| form1.canvas.rectangle(l, t, r, b); |
? Müsste da nicht eher Elipse oder circle hin?
F34r0fTh3D4rk - Mi 15.03.06 16:54
wie was rekursiv werden soll ?
das ist rekursion ^^
jetzt ist das auch mit ellipse
mkinzler - Mi 15.03.06 16:56
Zitat: |
wie was rekursiv werden soll ? |
Die Funktion ruft sich selbst auf!
F34r0fTh3D4rk - 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:
Delphi-Quelltext 1: 2: 3: 4:
| procedure a(); begin a(); end; |
eine andere Möglichkeit ist die indirekte Rekursion:
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:
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; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!