program ketvaltozosfgv; {szintvonalas abrazolas} uses newdelay,crt,graph; const n=100; m=100; path = 'c:\bgi'; ax=3; {teglalap x iranyu arnyeka} ay=3; {teglalap y iranyu arnyeka} kn=400; {maximalis oszlopmagassag} nz=200; {nagyitasi tenyezo} var fgv:array[1..n,1..m] of real; i,j:integer; sx,sy,sdb,odb:word; sk,ok:integer; sor,oszlop:integer; 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; {inicializalja a kezdoertekeket} var c:char; be:string; begin randomize; sx:=getmaxx; sy:=getmaxy; sdb:=n; odb:=m; sk:=round(sy/sdb); ok:=round(sx/odb); rectangle(0,0,(odb-1)*ok,sy); end; Procedure adatfeltoltes; {feltolti az fgv tombot adatokkal} var ii,jj:real; begin for i:=1 to n do for j:=1 to m do begin ii:=-3+i*0.06; jj:=-3+j*0.06; { fgv[i,j]:=sin(ii*ii*ii-jj*jj*jj);} { fgv[i,j]:=sin(ii*ii+jj*jj);} fgv[i,j]:=sin(ii-jj); { fgv[i,j]:=cos(ii*ii+jj*jj);} { fgv[i,j]:=sin(ii*ii*ii*ii-jj*jj*jj*jj);} end; end; procedure teglalaptorles(sor1,oszlop1,sor2,oszlop2:integer); Begin setfillstyle(1,black); bar(sor1,oszlop1,sor2,oszlop2); setfillstyle(1,white); End; procedure arnyekolt_teglalap; {arnnyekolt teglalapos abrazolasi modszer} var sor0:integer; be:string; c:char; begin { sk:= (sy-kn) mod sdb; ok:= (sx-sk*sdb) mod odb;} sk:=round((sy-kn)/sdb); str(sk,be); outtextxy(100,60,be); c:=readkey; ok:=round((sx-sk*sdb)/odb); str(ok,be); outtextxy(200,70,be); c:=readkey; For i:=sdb downto 1 do Begin sor0:=sy-i*sk; For j:=odb downto 1 do Begin oszlop:=i*sk + j*ok; sor:=round(sor0 - fgv[i,j]*nz); teglalaptorles(oszlop+ax-ok,sor-ay,oszlop+ax,sor0-ay); bar(oszlop-ok,sor,oszlop,sor0); End; End; end; Procedure menu; var ch:char; begin repeat clearviewport; outtextxy(100,60,'Ktvltozs fggvnybrzols'); outtextxy(200,130,'Men'); outtextxy(100,160,'1. Szintvonalas brzols'); outtextxy(100,190,'2. Sznezett szintvonalas brzols'); outtextxy(100,220,'3. rnykolt tglalapos brzols'); outtextxy(100,250,'4. Kilps'); ch:=readkey; until ch in ['1'..'4']; clearviewport; rectangle(0,0,(odb-1)*ok,sy); case ch of '1': BEgin end; '2': begin end; '3': arnyekolt_teglalap; end; end; Begin Adatfeltoltes; Grafikusra; init; menu; readkey; szovegesre; End.