{************************************************
                 Hugo Eti‚vant
      http://cyberzoide.developpez.com
      
      (pour une aide en Turbo Pascal 7.0)
*************************************************}

(************************************************
    DESSIN D'UNE FRACTALE COMPOSEE DE CERCLES
    par un algorithme it‚ratif.

  ALGORITHME :
  Tous les d‚placement se font selon l'axe des X.
  On trace un cercle principal de rayon R dans
  lequel on place Z cercles c“tes … c“tes et de
  rayon R/Z. On recommence en consid‚rant chaque
  nouveau cercle comme cercle principal jusqu'…
  que le rayon devienne suffisament petit.
*************************************************)

program cercles;

uses graph;

const min=7; {limite inf‚rieure du rayon}
      Z=3;   {raison g‚om‚trique de la fractale}

var pilote,mode,ro,xo,yo,b:integer;
    a,r:real;

BEGIN
xo:=320; {GetMaxX div 2}
yo:=240; {GetMAxY div 2}
ro:=yo;
r:=ro;
{initialisation graphique :...}
pilote:=detect;
initgraph(pilote,mode,'c:\bp\bgi');
setcolor(9);
repeat  {pour chaque it‚ration, c'est-…-dire pour chaque valeur de rayon}
 b:=yo;
 a:=r;
   repeat  {pour chaque cercle}
   circle(round(a+xo-ro),b,round(r)); {trac‚ du cercle}
   a:=a+2*r; {incr‚mentation de l'abscisse par le diamŠtre}
   until a>=2*ro; {jusqu'… ce que l'abscisse d‚passe l'‚cran}
 r:=r/Z; {d‚cr‚mentation g‚om‚trique du rayon … chaque it‚ration}
until r<min; {jusqu'… ce que le rayon soit suffisament petit}
readln;  {pause}
cleardevice;
END.