uses graph; {Szamosk”zi P‚ter} const ie=-1; iv=2; {az intervallum ket vege} ih=abs(ie-iv); var blokk:integer; {640/ih} function GraphInit:boolean; var gd,gm:integer; utv:string; begin utv:=''; DetectGraph(gd,gm); {$I-} InitGraph(gd,gm,utv); while (GraphResult<>grOK) and (utv<>'exit') do begin {writeln('K‚rem az utvonalat a BGI filehoz vagy exit');} {utv:='c:\langs\tp7\egavga.bgi';} utv:='.'; {readln(utv);} DetectGraph(gd,gm); Initgraph(gd,gm,utv); end; GraphInit:=(utv<>'exit'); {$I+} end; function f(x:integer):integer; var sv:integer; begin if ih<>0 then begin sv:=(-1)+(x div blokk); sv:=sv+(x mod ih); f:=sv end; end; function egyenlet(const x:integer):integer; var sv:real; begin if (1-f(x))=0 then egyenlet:=240 else if 1-(f(x))<0 then egyenlet:=240 else sv:=sqrt( x * x * (1+f(x)) / (1-f(x)) ); egyenlet:=round(sv); end; procedure rajzol(const x,y:integer); var svx,svy:integer; gmx2,gmy2:integer; begin (* svx:=abs(ie-iv); gmx2:=GetMaxX div 2; gmy2:=getMaxY div 2; if svx<>0 then svx:=trunc(GetMaxX/svx) {ha "van" intervallum} else svx:=gmx2; {ha csak egy pont} svx:=x+svx; svy:=y+gmy2; {az x-tengely kozepen legyen} putpixel(svx,svy,white); *) putpixel(x,y+240,white); end; procedure alakzatrajz; var x,y:integer; {a valodi pontok} fx,fy:integer; {a fuggveny pontjai} procedure ertekad; begin x:=0; y:=egyenlet(x); if ih<>0 then blokk:=640 div ih; end; function egx(const x:integer):integer; (* egyenlet(x+1) *) var sv1,sv2:integer; begin sv1:=f(x); sv2:=egyenlet(sv1); egx:=sv2; end; begin ertekad; while ((x>=0) and (x=0 do begin rajzol(x,y); rajzol(x,-y); rajzol(-x,y); rajzol(-x,-y); if ( (x+1)*(x+1)+(y*y) ) <=rr {a kor egyenlete igaz-e a pontnal?} then begin x:=x+1; end; {ha igen, akkor jobbra} else begin y:=y-1; {kulonben le} if ( (x+1)*(x+1)+(y*y) ) <=rr {...es ott?} then x:=x+1; {ha igaz, akkor jobbra is} end; end; *) begin graphinit; if ih<>0 then blokk:=(GetMaxX div ih); alakzatrajz; readln; closegraph; end.