program
funzione;
uses Crt, Graph;
var
driver_grafico, modo_grafico,x_schermo,y_schermo:integer;
x,y,x1,y1,incremento:real;
st:string[4];
begin
driver_grafico:=9;
modo_grafico:=2;
InitGraph(driver_grafico,modo_grafico, 'c:\tp\bgi');
(*if GraphResult<> grOk then
Halt(1);*)
line(0,240,639,240); (* asse x *)
line(320,0,320,479); (* asse y *)
line(625,235,639,240); (* orientamento asse x *)
line(625,245,639,240);
line(315,14,320,0) ; (* orientamento asse y *)
line(325,14,320,0) ;
x:=-90; (* valore iniziale di x *)
incremento:=0.01; (* incremento dei succesivi valori di x *)
repeat
y:=54*sin(x)/(x-12)-2; (* equazione della funzione *)
y1:=y+20; (* fattore di scala per x *)
if abs(y1)<240 then (* salta il blocco delle istruzioni *)
begin (* se il punto Š fuori schermo *)
y_schermo:=round(y1);
y_schermo:=240-y_schermo;
x1:=x*5; (* fattore di scala per x *)
x_schermo:=round(x1);;
x_schermo:=320+x_schermo;
putpixel(x_schermo,y_schermo,5);
if abs(x)<0.0000 then (*
approssimazione di x=0 *)
begin
str(y:3:1,st);
outtextxy(280,y_schermo,st);
line(316,y_schermo,324,y_schermo);
end;
if abs(y)<0.00001 then (* approssimazione di y=0 *)
begin
str(x:3:1,st);
outtextxy(x_schermo,225,st);
line(x_schermo,236,x_schermo,244);
end;
end;
x:=x+incremento;
until x>90;
outtextxy(590,245,'asse x');
outtextxy(330,1,'asse y');
readln;
closegraph;
end.