Program Wykres_Funkcji; uses crt,graph,strings; const nx=5; ny=5; var xmin,xmax,ymin,ymax,dzx,dzy,dx,x,y:real; n,k,karta,tryb,dlx,dly,x0,y0:integer; Function funkcja(x:real):real; Begin funkcja:=x*x-1; End; Procedure przelicz(xmin,xmax,ymin,ymax:real;var dzx,dzy:real; var dlx,dly:integer); Begin dzx:=(getmaxx-150)/(xmax-xmin); dzy:=(getmaxy-100)/(ymax-ymin); dlx:=(getmaxx-150) div nx; dly:=(getmaxy-100) div ny; End; Procedure osie(xmin,xmax,ymin,ymax,dzx,dzy:real;var x0,y0:integer); Begin if (xmin<0) and (xmax>=0) then x0:=50+round(abs(dzx*xmin)); if (xmin>=0) then x0:=50; if (xmax<0) then x0:=getmaxx-50; if (ymin<0) and (xmax>=0) then y0:=50+round(getmaxy-50-abs(dzy*ymin)); if (ymin>=0) then y0:=getmaxy-50; if (ymax<=0) then y0:=50; line(x0,25,x0,getmaxy-20); { os pionowa } line(x0-3,25,x0+3,25); { strzalka pionowa } line(x0-3,25,x0,15); { strzalka pionowa } line(x0+3,25,x0,15); { strzalka pionowa } line(50,y0,getmaxx-25,y0); { os pozioma } line(getmaxx-25,y0-3,getmaxx-25,y0+3); { strzalka pozioma } line(getmaxx-25,y0-3,getmaxx-15,y0); { strzalka pozioma } line(getmaxx-25,y0+3,getmaxx-15,y0); { strzalka pozioma } End; Procedure podzialka(xmin,xmax,ymin,ymax,dzx,dzy:real;dlx,dly,x0,y0:integer); var napis1,napis2,stx,sty:string; potx,poty:string; x,y,k,a:integer; skx,sky:array[0..5] of real; Begin napis1:='t[s]*1E'; napis2:='v[m/s]*1E'; potx:=''; poty:=''; k:=0; x:=x0; if dlx<100 then a:=100 else a:=dlx; if (abs(xmax-xmin)>1e-3) and (abs(xmax-xmin)<1e3) then potx:=potx+'0'; if abs(xmax-xmin)>=1000 then potx:=potx+'+3'; if abs(xmax-xmin)<=1e-3 then potx:=potx+'-3'; while x<getmaxx-a do begin line(x,y0-5,x,y0+5); if xmin>=0 then skx[k]:=xmin+k*dlx/dzx else skx[k]:=k*dlx/dzx; if abs(xmax-xmin)>=1000 then skx[k]:=skx[k]/1000; if abs(xmax-xmin)<=1e-3 then skx[k]:=skx[k]*1000; str(skx[k]:3:2,stx); if k>0 then outtextxy(x,y0+10,stx) else outtextxy(x+4,y0+10,stx); k:=k+1; x:=x0+k*dlx; end; k:=0; x:=x0; if dlx<50 then a:=50 else a:=dlx; while x>a do begin line(x,y0-5,x,y0+5); if xmax<=0 then skx[k]:=xmax-k*dlx/dzx else skx[k]:=-k*dlx/dzx; if abs(xmax-xmin)>=1000 then skx[k]:=skx[k]/1000; if abs(xmax-xmin)<=1e-3 then skx[k]:=skx[k]*1000; str(skx[k]:3:2,stx); if (k>0) or (xmax<0) then outtextxy(x,y0+10,stx); k:=k+1; x:=x0-k*dlx; end; k:=0; y:=y0; if dly<50 then a:=50 else a:=dly; if (abs(ymax-ymin)>1e-3) and (abs(ymax-ymin)<1e3) then poty:=poty+'0'; if abs(ymax-ymin)>1000 then poty:=poty+'+3'; if abs(ymax-ymin)<=1e-3 then poty:=poty+'-3'; while y<getmaxy-a do begin line(x0-5,y,x0+5,y); if ymax<0 then sky[k]:=ymax-k*dly/dzy else sky[k]:=-k*dly/dzy; if abs(ymax-ymin)>1000 then sky[k]:=sky[k]/1000; if abs(ymax-ymin)<=1e-3 then sky[k]:=sky[k]*1000; str(sky[k]:2:3,sty); if k>0 then outtextxy(x0-50,y-10,sty) else outtextxy(x0+4,y-10,sty); k:=k+1; y:=y0+k*dly; end; k:=0; y:=y0; while y>a do begin line(x0-5,y,x0+5,y); if ymin>0 then sky[k]:=ymin+k*dly/dzy else sky[k]:=k*dly/dzy; if abs(ymax-ymin)>=1000 then sky[k]:=sky[k]/1000; if abs(xmax-xmin)<=1e-3 then sky[k]:=sky[k]*1000; str(sky[k]:2:3,sty); if (k>0) then outtextxy(x0+5,y-10,sty); k:=k+1; y:=y0-k*dly; end; napis1:=napis1+potx; outtextxy(getmaxx-80,y0+40,napis1); napis2:=napis2+poty; outtextxy(x0,5,napis2); end; Procedure rysuj_fun(xmin,xmax,ymin,ymax,dzx,dzy:real;x0,y0,n:integer); var k,i:integer; x,y:array[0..700] of real; dx:real; begin dx:=(xmax-xmin)/n; for k:=0 to n do begin x[k]:=xmin+k*dx; y[k]:=funkcja(x[k]); end; if xmax<0 then x0:=round(x0-xmax*dzx); if xmin>0 then x0:=round(x0-xmin*dzx); if ymax<0 then y0:=round(y0-ymax*dzy); if ymin>0 then y0:=round(y0-ymin*dzy); for k:=0 to n-1 do begin line(round(x0+x[k]*dzx),round(y0-y[k]*dzy), round(x0+x[k+1]*dzx),y0-round(y[k+1]*dzy)); end; end; BEGIN n:=500; clrscr; write('xmin=');readln(xmin); write('xmax=');readln(xmax); dx:=(xmax-xmin)/n; ymin:=funkcja(xmin); ymax:=funkcja(xmax); for k:=0 to n do begin x:=xmin+k*dx; y:=funkcja(x); if ymin>y then ymin:=y; if ymax<y then ymax:=y; end; detectgraph(karta,tryb); initgraph(karta,tryb,'c:\szkola\bp\bgi'); przelicz(xmin,xmax,ymin,ymax,dzx,dzy,dlx,dly); osie(xmin,xmax,ymin,ymax,dzx,dzy,x0,y0); podzialka(xmin,xmax,ymin,ymax,dzx,dzy,dlx,dly,x0,y0); rysuj_fun(xmin,xmax,ymin,ymax,dzx,dzy,x0,y0,n); readkey; closegraph; END.