Announcement

Collapse
No announcement yet.

Rekursive Prozedur mit Abbruchbedingung

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Rekursive Prozedur mit Abbruchbedingung

    Hallo,
    ich kenne mich nicht wirklich gut aus mit Delphi, weil ich es nur im Informatikunterricht behandle, und deshalb habe ich ein Problem, was für euch sicher eine Kleinigkeit darstellt. Und zwar muss ich ein programm erstellen, welches éine canvasfläche enthält und eun eingabefeld. wenn man z.b. in die editbox die zahl 5 eingibt, soll in der canvasfläche 5mal ein kreis in eimen rechteck gezeichnet werden, und zwar in sich selbst, sozusagen immer kleiner werdend. die 5 ist die Abbruchbedingung. Kann mir jemand helfen?? z.b. einen quelltext posten?? wäre sehr freundlich!!
    thx, hansi2k

  • #2
    <pre>
    var i,zaehler : integer;

    zaehler := StrToInt(edit1.text);
    for i := 1 to zaehler do
    begin
    ...
    end;
    </pre>
    Gruß Ul

    Comment


    • #3
      Hallo Hansi2k,<br>Uli's Vorschlag ist eigentlich der Vorschlag den Du brauchst. Da Du aber nach einem rekursivem Aufruf gefragt hast, habe ich Dir hier ein kleines Beispiel zusammengestellt.
      <pre>
      unit Unit1;

      interface

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

      type
      TForm1 = class(TForm)
      Edit1: TEdit;
      PaintBox1: TPaintBox;
      Button1: TButton;
      procedure Button1Click(Sender: TObject);
      private
      { Private-Deklarationen }
      procedure PaintCircle(C : TCanvas; aRect : TRect; RDec : Integer);
      public
      { Public-Deklarationen }
      end;

      var
      Form1: TForm1;

      implementation

      {$R *.DFM}

      procedure TForm1.Button1Click(Sender: TObject);
      var
      CircleRect : TRect;
      RadiusDecrement : Integer;
      begin
      CircleRect:=Rect(10,10,210,210); // bestimme das Zielrechteck
      //Berechne das RadiusDecrement: D.h. teile den Durchmesser durch die Anzahl der zu zeichnenden Kreise
      RadiusDecrement:=(CircleRect.Right-CircleRect.Left+1) div StrToInt(Edit1.Text);
      // Von RadiusDecrement darf jedoch nur die Hälfte verwendet werden.
      // Siehe Kommentar zu InflateRect.
      RadiusDecrement:=RadiusDecrement div 2;
      If RadiusDecrement>0 then
      PaintCircle(PaintBox1.Canvas,CircleRect,RadiusDecr ement);
      end;

      procedure TForm1.PaintCircle(C: TCanvas; aRect: TRect; RDec: Integer);
      {
      C : ist die Zeichenfläche
      aRect : in diesem Rechteck wird der Kreis gezeichnet
      RDec : um diesen Wert wird der Radius verrignert
      }
      begin
      If aRect.Right-aRect.Left<=0 then Exit; // Abbruchbedingung
      With C do
      Ellipse(aRect);
      InflateRect(aRect,-RDec,-RDec); // verkleine das Rechteck um RDec
      // Inflate Rect vergrößert hier Left und Top um RDec
      // und verkleinert Right und Bottom um RDec.
      PaintCircle(C,aRect,RDec); // Hier ist die Rekursion
      end;

      end.
      </pre&gt

      Comment


      • #4
        vielen dank euch beiden!

        Comment

        Working...
        X