Program Egyvaltozosfgv; uses crt,graph; const path = 'c:\langs\tp\bgi'; {Bgi utvonala} maxp = 400; {ennyi pont lehet osszesen} db=15; {ennyi pontot abrazolunk} x:array [1..db] of real=(-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3.5,4.5); y:array [1..db] of real=(-19,-17,5.5,1.7,8,-19,-17,5,1,8,-19,-17,5,1.5,7.333); Var sx,sy,ox,oy:word; xmax,xmin,ymax,ymin:real; nx,ny:real; dx,dy:real; esor,eoszlop:integer; kilep:boolean; Procedure maxmin(var xmax,xmin,ymax,ymin:real); var i:integer; begin xmax:=x[1]; xmin:=x[1]; For i:=2 to db do If x[i]>xmax then xmax:=x[i] else If x[i]ymax then ymax:=y[i] else If y[i]=0 do Begin sv:=sv-ny; line(ox-2,round(sv),ox+2,round(sv)); End; sv:=ox; While sv<=sx do Begin sv:=sv+nx; line(round(sv),oy-2,round(sv),oy+2); End; sv:=oy; While sv<=sy do Begin sv:=sv+ny; line(ox-2,round(sv),ox+2,round(sv)); End; sv:=ox; While sv>=0 do Begin sv:=sv-nx; line(round(sv),oy-2,round(sv),oy+2); End; end; procedure pontrajzol(x,y:Real); Var sor, oszlop : integer; begin sor:=Round(oy-y); oszlop:=Round(ox+x); If (sor>=0) and (sor<=sy) and (oszlop>=0) and (oszlop<=sx) then PutPixel(oszlop,sor,15); end; Procedure rajzolas; Var i : integer; Begin ox:=sx div 2; oy:=sy div 2; nx:=10; ny:=10; koordteng(ox,oy); For i:=1 to db do pontrajzol(nx*x[i],ny*y[i]); End; procedure pontrajzol2(x,y:real); Var sor, oszlop : integer; begin sor:=oy-Round(y); oszlop:=ox+Round(x); PutPixel(oszlop,sor,15); end; Procedure rajzolas2; {kepernyore normalas} Var i: Integer; Begin maxmin(xmax,xmin,ymax,ymin); nx:=sx / (xmax-xmin); ny:=sy / (ymax-ymin); If nx>ny then nx:=ny else ny:=nx; ox:=round((0-xmin)*nx); oy:=round(sy-(0-ymin)*ny); koordteng(ox,oy); For i:=1 to db do pontrajzol2(nx*x[i],ny*y[i]); End; Procedure tartomany(var dx,dy:real); {az brzolsi tartomny meghatrozsa} begin maxmin(xmax,xmin,ymax,ymin); If abs(xmax)>abs(xmin) then dx:=abs(xmax) else dx:=abs(xmin); If abs(ymax)>abs(ymin) then dy:=abs(ymax) else dy:=abs(ymin); end; Procedure rajzolas3; {kepernyore normalas origo helybenhagyasaval} Var i: Integer; Begin tartomany(dx,dy); nx:=sx/2/dx; ny:=sy/2/dy; If nx>ny then nx:=ny else ny:=nx; ox:=sx div 2; oy:=sy div 2; koordteng(ox,oy); For i:=1 to db do pontrajzol2(nx*x[i],ny*y[i]); End; procedure pontrajzol3(x,y:real); Var sor, oszlop : integer; begin sor:=oy-Round(y); oszlop:=ox+Round(x); PutPixel(oszlop,sor,15); eoszlop:=oszlop; esor:=sor; end; procedure szakaszrajzol(x,y:real); Var sor, oszlop : integer; begin sor:=oy-Round(y); oszlop:=ox+Round(x); Line(oszlop,sor,eoszlop,esor); eoszlop:=oszlop; esor:=sor; end; Procedure rajzolas4; {kepernyore normalas origo helybenhagyasaval, pontok osszekotesevel} Var i: Integer; Begin tartomany(dx,dy); nx:=sx/2/dx; ny:=sy/2/dy; If nx>ny then nx:=ny else ny:=nx; ox:=sx div 2; oy:=sy div 2; koordteng(ox,oy); pontrajzol3(nx*x[1],ny*y[1]); For i:=2 to db do szakaszrajzol(nx*x[i],ny*y[i]); End; Procedure teglalaprajzolas(x,y:real;szel,alja:integer); Var sor, oszlop : integer; begin sor:=oy-Round(y); oszlop:=ox+Round(x); bar(oszlop-(szel div 2),sor,oszlop+(szel div 2),alja); end; Procedure rajzolas5; {kepernyore normalas origo helybenhagyasaval, teglalapokkal} Var i: Integer; Begin tartomany(dx,dy); nx:=sx/2/dx; ny:=sy/2/dy; If nx>ny then nx:=ny else ny:=nx; ox:=sx div 2; oy:=sy div 2; koordteng(ox,oy); For i:=1 to db do teglalaprajzolas(nx*x[i],ny*y[i],round(0.5*nx),oy); End; Procedure menu; {men kiirsa} var ch:char; begin Repeat clrscr; writeln('Krem vlasszon az albbi menpontok kzl!'); writeln; writeln('1. Ahogy jn...'); writeln('2. Kpernyre normls'); writeln('3. Normls orig helybenhagysval.'); writeln('4. Normls orig helybenhagysval, szakaszrajzolssal'); writeln('5. Normls orig helybenhagysval, tglalaprajzolssal'); writeln('6. Kilps'); ch:=readkey; Until ch in ['1'..'6']; Grafikusra; Init; Case ch of '1':Rajzolas; '2':Rajzolas2; '3':Rajzolas3; '4':Rajzolas4; '5':Rajzolas5; '6':kilep:=true; end; end; BEGIN { foprogram } kilep:=false; repeat Menu; if not kilep then readkey; Szovegesre; until kilep; END.