Program Egyvaltozosfgv; uses newdelay,crt,graph; const path = 'c:\langs\tp70\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:integer; xmax,xmin,ymax,ymin:real; nx,ny:real; dx,dy:real; esor,eoszlop:integer; sor,oszlop:integer; kilep:boolean; Procedure maxmin(var xmax,xmin,ymax,ymin:real); var i:integer; begin xmax:=x[1]; xmin:=x[1]; ymax:=y[1]; ymin:=y[1]; For i:=2 to db do Begin if xmaxx[i] then xmin:=x[i]; if ymaxy[i] then ymin:=y[i]; End; end; Procedure Szovegesre; begin CloseGraph; {lezarja a grafikus uzemmodot} RestoreCrtMode; {Visszaallitja az InitGraph meghivasa elotti kepernyokezelesi modot} end; Procedure Grafikusra; Var gd,gm : integer; Begin DetectGraph(gd,gm); {detektalja a grafikus eszkozt} InitGraph(gd,gm,path); {inicializalja a grafikus rendszert} End; procedure init; begin sx:=getmaxx; sy:=getmaxy; end; procedure pontrajzol(x,y:real); begin sor:=oy-round(y); oszlop:=ox+round(x); {koordinata-tengely -> kepernyokezeles} if ( (sor>=0) and (sor<=sy) and (oszlop<=sx) and (oszlop>=0) ) then Begin putpixel(oszlop,sor,white); end; end; Procedure koordinatatengelyek(ox,oy:integer); {koordinata tengelyek kirajzolasa} var i,sv:integer; begin line(ox,0,ox,sy); line(0,oy,sx,oy); { sv:=oy; While sv>=0 do Begin sv:=round(sv-ny); line(ox-2,sv,ox+2,sv); End; sv:=ox; While sv<=sx do Begin sv:=round(sv+nx); line(sv,oy-2,sv,oy+2); End;} end; Procedure rajzolas; var i:integer; Begin ox:=round(sx/2); oy:=round(sy/2); nx:=10; ny:=10; koordinatatengelyek(ox,oy); For i:=1 to db do Begin pontrajzol(nx*x[i],ny*y[i]); End; End; procedure pontrajzol2(x,y:real); begin sor:=oy-round(y); oszlop:=ox+round(x); putpixel(oszlop,sor,white); 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); koordinatatengelyek(ox,oy); for i:=1 to db do begin pontrajzol2(nx*x[i],ny*y[i]); end; end; Procedure tartomany(var dx,dy:real); begin 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 pontrajzol3(x,y:real); begin sor:=round(oy-y); oszlop:=round(ox+x); putpixel(oszlop,sor,white); eoszlop:=oszlop; esor:=sor; end; Procedure rajzolas3; Var i:integer; begin tartomany(dx,dy); nx:=round(sx/2*dx); ny:=round(sy/2*dy); if nx>ny then nx:=ny else ny:=nx; ox:=round(sx/2); oy:=round(sy/2); koordinatatengelyek(ox,oy); for i:=1 to db do begin pontrajzol3(nx*x[i],ny*y[i]); end; end; procedure szakaszrajzol(x,y:real); begin sor:=round(oy-y); oszlop:=round(ox-x); line(oszlop,sor,eoszlop,esor); eoszlop:=oszlop; esor:=sor; end; Procedure rajzolas4; 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:=round(sx/2); oy:=round(sy/2); koordinatatengelyek(ox,oy); for i:=2 to db do begin szakaszrajzol(nx*x[i],ny*y[i]); end; end; Procedure teglalaprajzolas(x,y:real;szel,alja:integer); begin end; Procedure rajzolas5; Begin 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.