{ Programm zum Zeichnen von Funktionen }
	{***********************************************************}
		  {**** geschrieben von RenÉ Scholz **** }


{$E+,N-}
uses  Graph,crt;
var   x,y,h,XF,YF,XS,XE,SW         :real;
      grdriver, grmode, errcode    :integer;

procedure lesen;
begin
   ClrScr;
     Writeln('X-Faktor      = ');readln(XF);
     Writeln('Y-Faktor      = ');readln(YF);
     Writeln('X-Start       = ');readln(XS);
     Writeln('X-Ende        = ');readln(XE);
     Writeln('Schrittweite  = ');readln(SW);
   ClrScr;
     XF:=XF*46.7;if XF=0 then XF:=46.7;
     YF:=YF*30;if YF=0 then YF:=30;
     XS:=XS*XF;if (XS<-359) or (XS=0) then XS:=-359;
     XE:=XE*XF;if (XE>359)  or (XE=0) then XE:=359;
	       if SW=0                then SW:=1;
     Writeln('X-Faktor     = ', XF);
     Writeln('Y-Faktor     = ', YF);
     Writeln('X-Start      = ', XS);
     Writeln('X-Ende       = ', XE);
     Writeln('Schrittweite = ', SW);
   readln;
end;

procedure Grafik;
begin
	 grDriver:=Detect;
	 InitGraph(grDriver,grMode,'');
	 errCode:=Graphresult;
	 if errCode <> grOk then writeln
	 ('Graphics ERROR : ',GraphErrorMsg(errCode));
end;

procedure Achsenkreuz;
begin
     line(0,174,719,174);                           { X-Achse }
     line(round(359-XF),168,round(359-XF),180);   {  1 auf der }
     line(round(359+XF),168,round(359+XF),180);   {  X-Achse   }
     line(359,0,359,347);                           { Y-Achse }
     line(350,round(174-YF),368,round(174-YF));   {  1 auf der }
     line(350,round(174+YF),368,round(174+YF));   {  Y-Achse   }
end;

procedure zeichnen;
begin
     h:=XS;
     repeat
	h:=h + SW;
	x:=h/XF;
	y:=sin(x)*(1/x);             { Hier Funktion eingeben ! }
	y:=y*YF;
	PutPixel(round(h+359),round(174-y),1);
     until ( h >= XE);
   readln;
end;

 {**************************************************************************}

begin                           { Main Program }
     lesen;
     Grafik;
     Achsenkreuz;
     zeichnen;

     closeGraph;
end.