PROGRAM funcgen;
{ Create a Graph3D data file of function z=f(x,y) }

CONST x0=-1; x1=9; dx=0.25;
      y0=-4; y1=4; dy=0.25;
      title='function f(r)=sin(r)/r';
      quantity='f(r)';

FUNCTION f(x,y: Real): Real;
VAR r: Real;
BEGIN
  r := Sqrt(Sqr(x)+Sqr(y));
  IF r=0 THEN f := 1 ELSE
    f := Sin(r)/r;
END;

VAR datei: Text;
    nx,ny,i,j: Integer;
    x,y: Real;

BEGIN
  nx := Round((x1-x0)/dx)+1;
  ny := Round((y1-y0)/dy)+1;
  ReWrite(datei,'RAM:function.3D');
  WriteLn(datei,title);
  WriteLn(datei,quantity);
  WriteLn(datei);
  WriteLn(datei,ny);
  FOR j := 1 TO ny DO BEGIN
    y := y0 + (j-1)*dy;
    IF Abs(y-Round(y))<dy/4 THEN WriteLn(datei,Round(y))
      ELSE WriteLn(datei);
  END;
  WriteLn(datei);
  WriteLn(datei,nx);
  FOR i := 1 TO nx DO BEGIN
    x := x0 + (i-1)*dx;
    IF Abs(x-Round(x))<dx/4 THEN WriteLn(datei,Round(x))
      ELSE WriteLn(datei);
    FOR j := 1 TO ny DO BEGIN
      y := y0 + (j-1)*dy;
      WriteLn(datei,f(x,y))
    END;
    WriteLn(datei);
  END;
END.

