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.