{************************************************
                 Hugo Eti,vant
    http://www.multimania.com/cyberzoide/
     e-mail : cyberzoide@multimania.com
    (pour une aide en Turbo Pascal 7.0)
*************************************************}
(************************************************
   TRAC D'UNE FRACTALE COMPOSE DE CERCLES
         par un algorithme rcursif

ALGO : si le rang de prcision n'est pas dpass
alors on trace un cercle principal de rayon R au
sein duquel on trace 4 autres petits cercles de
rayon r  maximum c'est--dire telque
r:=R/(1+Sqrt(2)). Le trac de chaque petit cercle
se fait par rappel de la procdure rcursive.
*************************************************)

program fractale;

uses graph;

procedure cercle(x,y,rayon:real; n:integer);
var a,b:real;
begin
if n>0 then
      begin
      circle(round(x),round(y),round(rayon)); {cercle principal}
      rayon:=rayon/(1+sqrt(2)); {dcrmentation gomtrique du rayon}
      dec(n); {dcrmentation du rang}
{ Pour des cercles plus petits au milieu de chaque quadruplets :
  circle(round(x),round(y+rayon*sqrt(2)),round(rayon));
  circle(round(x+rayon*sqrt(2)),round(y),round(rayon));
  circle(round(x),round(y-rayon*sqrt(2)),round(rayon));
  circle(round(x-rayon*sqrt(2)),round(y),round(rayon)); }
{trac des quatres petits cercles par appel rcursif : ...}
      cercle(x,y+rayon*sqrt(2),rayon,n);
      cercle(x+rayon*sqrt(2),y,rayon,n);
      cercle(x,y-rayon*sqrt(2),rayon,n);
      cercle(x-rayon*sqrt(2),y,rayon,n);
      end;
end;

var pilote,mode,n:integer;
    rayon,x,y:real;

BEGIN
{initialisation du mode graphique : ...}
pilote:=detect;
initgraph(pilote,mode,'c:\bp\bgi');
{initialisation des valeurs initiales : ...}
rayon:=getmaxy/2; {rayon le plus grand possible}
x:=getmaxx/2; y:=getmaxy/2;   {centre de l'cran graphique courant}
n:=5; {choix du nombre d'itrations}
cercle(x,y,rayon,n); {appel de la procdure rcursive de trac des cercles}
readln;  {pause}
closegraph; {quitte le mode graphique}
END.