Grafische Rekursion. BITTE HELFEN!!!

Amorewer

Grünschnabel
hi leute,
eine aufgabe an euch.. die ist ein hammer!
{----------------------------------}
bei dieser aufgabe soll ein MUSTER, das aus quadraten besteht, REKURSIV GEZEICHNET werden.


AUFBAU DES MUSTERS:

1. der mittelpunkt des grössten quadrats (urquadrat) entspricht dem mittelpunkt der zeichenfläche (textbildschirm).
die kantenlänge des urquadrats entspricht dem ergebnis der ganzzahligen division der kantenlänge der zeichenfläche durch zwei.
2.wenn die hälfte der kantenlänge des urquadrats ein vom benutzer anzugebendes minimum nicht unterschreitet, dann bildet jeder der 4 eckpunkte des urquadrats den mittelpunkt für je ein neues quadrat (ab jetzt folgequadrat genannt) mit einer kantenlänge, die der hälfte der kantenlänge des urquadrats entspricht.
je ein viertel der 4 folgequadrate wird vom urquadrat überdeckt.
3. schritt 2 wird unter berücksichtigung der dort genannten abbruchbedingung wiederholt, indem die 4 folgequadrate jeweils die rolle eines urquadrates einnnehmen.

hier zur verdeutlichung DIE ERSTEN 3 REKURSIONSSTUFEN als bilder!
aufg2.bmp

{----------------------------------}

das habe ich bis jetzt geschafft: jetzt muss nur noch jedes quadrat in alle 4 ecken gezeichnet werden...:
code:

Code:
program kante;
uses crt;

function urquad(seitenlaenge,mitte_x,mitte_y,minimum:word):word;
var i,j,x:word;
begin
   if seitenlaenge>=minimum then x:=urquad(seitenlaenge div 2,mitte_x - seitenlaenge div 2-1,
                                                              mitte_y - seitenlaenge div 2,minimum)
                           else

   {*** obere Linie ***}
   gotoxy((mitte_x - seitenlaenge div 2),(mitte_y - seitenlaenge div 2));
   for i:=0 to seitenlaenge+2 do
      if i=0 then begin gotoxy((mitte_x - seitenlaenge div 2+i),(mitte_y - seitenlaenge div 2+i)); write(chr(218)); end
       {eck lo}
             else if i=seitenlaenge+2 then write(chr(191))  {eck ro}
                                      else write(chr(196)); {waage}


   {*** senkrechte Linien ***}
   for i:=1 to seitenlaenge-1 do
   begin
     gotoxy((mitte_x - seitenlaenge div 2),(mitte_y - seitenlaenge div 2 + i));
     for j:=0 to seitenlaenge+2 do
        if j=0 then write(chr(179)) {senk}
               else if j=seitenlaenge+2 then write(chr(179))  {senk}
                                        else write(chr(32));  {leer}
   end;

   {*** untere Linie ***}
   gotoxy((mitte_x - seitenlaenge div 2),((mitte_y + seitenlaenge div 2)));
   for i:=0 to seitenlaenge+2 do
      if i=0 then write(chr(192))   {eck lu}
             else if i=seitenlaenge+2 then write(chr(217))   {eck ru}
                                      else write(chr(196))   {waage}
end;

var x,minimum:word;
begin
  clrscr;
  minimum:=8;
  x:=urquad(20,40,25,minimum);
  readln;
end.


ich habe versucht das bild dazu, vom zettel, abzumalen.
vielen dank schonma! die aufgabe find ich echt schwer, nun zeigt mal, was ihr hier so alles drauf habt.

[*code]-Tags ergänzt.
 
Zuletzt bearbeitet von einem Moderator:

Patrick Kamin

Erfahrenes Mitglied
-

Ui, das kommt mir aber bekannt vor :)

Du musst innerhalb deiner if-Anweisung alle vier Richtungen aufrufen.
Code:
urquad(seitenlaenge div 2,mitte_x - seitenlaenge div 2, mitte_y - seitenlaenge div 2,minimum);                                                              mitte_y - seitenlaenge div 2,minimum)
urquad(seitenlaenge div 2, mitte_x + seitenlaenge div 2, mitte_y - seitenlaenge div 2, minimum);
urquad(seitenlaenge div 2, mitte_x - seitenlaenge div 2, mitte_y + seitenlaenge div 2, minimum);
urquad(seitenlaenge div 2, mitte_x + seitenlaenge div 2, mitte_y + seitenlaenge div 2, minimum);

Schönen Gruß nach Wedel ;-)

P.s. In TP ist das echt eine schweine Arbeit :eek: