begin
library A0, A6;

   comment program to integrate f(x,y) over triangle (0,0), (1,0), (1,1);
   comment extra parameter to intint makes it work;

   real procedure f(x, y);
   value x,y;  real x,y;
      f:= x + x + y + y;

   real procedure int(a, b, f);
   comment integrates f(x) over range a to b;
   value a, b; real a, b;  real procedure f;
   begin  comment adding extra parameter makes it work;
      real procedure intint(a, b, fa, fb, d);
      value a, b, fa, fb, d;  real a, b, fa, fb;
      integer d;
      begin
         real c, fc, ff;
         c := (a + b) * 0.5;
         fc := f(c);
         ff := (fa + 4.0*fc + fb);
         comment answer is good enough if simrule no better than trapezoidal;
         if abs( (fa + fb)*3.0 - ff ) < 0.001
         then
            intint := ff * (b - a)  * 0.16666666667
         else
            intint := intint(a, c, fa, fc, d-1) + intint(c, b, fc, fb, d-1);
      end;
      int := intint(a, b, f(a), f(b), 5);
   end;

   real procedure intfy(x);
   comment integral 0 to x of ff(x,y) dy;
   value x;  real x;
   begin
      real procedure fx(y);
      value y;  real y;
         fx := f(x,y);
      intfy := int(0, x, fx);
   end;

   real procedure minitest(x);
   value x;  real x;
   begin
      minitest := x*x*x;
   end;

   real answer, pi;
   integer ii;

   writetext(30, {minitest$0$to$2$x^3$=$});
   answer := int(0, 2, minitest);
   output(30, answer);
   writetext(30, {Now$for$the$square$root });
   output(30, sqrt(answer));
   pi := answer*arctan(1.0);
   writetext(30, {This$is$the$value$of$pi$calculated$using$arctan$});
   output(30, pi);
   answer := sin(pi/6.0);
   writetext(30, {sin$pi/6$which$should$be$a$half$});
   output(30, answer);
   answer := cos(pi/6.0);
   writetext(30, {cos$pi/6$which$should$be$a$the$same$as$the$next$result$});
   output(30, answer);
   writetext(30, {should$be$same$as$the$previous$});
   answer := sqrt(3.0)/2.0;
   output(30, answer);

   writetext(30, {Now$square$it$to$get$3/4$});
   output(30, answer^2);

   ii := 3;
   writetext(30, {3^3$=$});
   output(30, ii^ii);
   writetext(30, {Integer$divide$3$squared$by$2$});
   output(30, ii^2 % 2);

   writetext(30, {Calculate$e$using$exp$});
   answer := exp(1.0);
   output(30, answer);
   writetext(30, {...$and$take$its$log$});
   output(30, ln(answer));

   writetext(30, {{c}fulltest$0$to$1$triangle$=$});
   answer := int(0, 1, intfy);
   output(30, answer);

   writetext(30, {Testing$exponentiation:$2 ^ 4$=$});
   answer := 4.0;
   output(30, 2^answer);
   writetext(30, {Testing$exponentiation:$2 ^ 4.0$=$});
   output(30, 2.0^answer);

end
|