program Bresenham_algoritmus_kruznice;
uses Graph;

var
 grDriver: Integer;
 grMode: Integer;
 ErrCode: Integer;

 dvex, dvey, p, r, x, y: real;


 function fx (x:real):integer;
  begin
    fx:=round (GetMaxX/2+x);
  end;

 function fy (y:real):integer;
 begin
    fy:=round (GetMaxY/2-y);
 end;

begin
 grDriver := Detect;
 InitGraph(grDriver, grMode,' ');
 ErrCode := GraphResult;
 if ErrCode = grOk then
 begin
      r:=100;
      dvex:=3; dvey:=2*r-2;
      x:=0; y:=r;

     while (x<=y) do begin
      {     writeln ('vykresli osm bodu symetrickych s x, y:', x, ' ', y);
       }
           PutPixel(fx(x),fy(y),white);
           PutPixel(fx(y), fy(x), white);
           PutPixel(fx(-y), fy(x), white);
           PutPixel(fx(-x), fy(y), white);
           PutPixel(fx(-x), fy(-y), white);
           PutPixel(fx(-y), fy(-x), white);
           PutPixel(fx(y), fy(-x), white);
           PutPixel(fx(x), fy(-y), white);
           if (p>0) then begin
              p:=p-dvey;
              dvey:=dvey-2;
              y:=y-1;
           end;
           p:=p+dvex;
           dvex:=dvex+2;
           x:=x+1;
     end;





   Readln;
   CloseGraph;
 end
 else
   Writeln('Problem s grafikou, chyba:', GraphErrorMsg(ErrCode));
end.
