Contributor: SWAG SUPPORT TEAM        

CONST e = 2.7182818;

Function Exponent(Base: Real; Power: Integer): Real;
{Base can be real, power must be an integer}
  VAR
      X: INTEGER;
      E: REAL;

BEGIN;
  E:=1;
  If Power = 0 then E:=1
  Else If Power = 1 then E:=Base
       Else For X:=1 to ABS(Power) do E:=E*Base;
  If Power < 0 then E:=1/E;
  Exponent:=E;
END;

Function Log(Base, Expnt: Real): Real;
{returns common (base 10) logarithm}
Begin;
  Log:=ln(Expnt)/ln(Base);
End;

Function Prime(N: LongInt): Boolean;
{Determines if argument is prime}
  Var C: LongInt;
      S: Real;
      X: Boolean;
Begin;
  N:=ABS(N);
  S:=SQRT(N);
  X:=( (N<=2) OR (ODD(N)) AND (S <> INT(S) ) );
  If X then Begin
    C:=3;
    While (X AND (C < Int(S))) do Begin
      X:=((N Mod C) > 0);
      C:=C+2;
    End; {While}
  End; {If X}
  Prime:=X;
End; {Prime}

Function Whole(X: Real): Boolean;
Begin;
  Whole:=INT(X) = X;
End;

Function Seconds_to_Words(Sec: LongInt): String;
  CONST
       SecDay=86400;
        SecHr=3600;
       SecMin=60;
  VAR
       Days, Hours, Minutes, Seconds: LONGINT;
                                   L: BYTE;
                                T, X: STRING;

BEGIN;

  Days:=Sec DIV SecDay;
  Sec:=Sec-(SecDay*Days);
  Hours:=Sec DIV SecHr;
  Sec:=Sec-(SecHr*Hours);
  Minutes:=Sec DIV SecMin;
  Sec:=Sec-(SecMin*Minutes);
  Seconds:=Sec;

  T:='';

  If Days > 0 then Begin
    Str(Days,T);
    T := T + ' Day';
    If Days > 1 then T := T + 's';
    T := T + ', ';
  End; {If Days}

  If Hours > 0 then Begin
    Str(Hours,X);
    T := T + X + ' Hour';
    If Hours > 1 then T := T + 's';
    T := T + ', ';
  End; {If Hours}

  If Minutes > 0 then Begin
    Str(Minutes,X);
    T := T + X + ' Minute';
    If Minutes > 1 then T := T + 's';
    T := T + ', ';
  End; {If Minutes}

  If Seconds > 0 then Begin
    Str(Seconds,X);
    T := T + X + ' Second';
    If Seconds > 1 then T := T + 's';
  End; {If Seconds}

  L:=Length(T)-1;

  If T[L] = ',' then T:=Copy(T,1,(L-1));

  Seconds_To_Words:=T;

END; {Seconds to Words}

Function DegToRad(D: Real): Real;
Begin;
  DegToRad:=D*Pi/180;
End; {DegToRad}

Function GradToRad(G: Real): Real;
Begin;
  GradToRad:=G*Pi/200;
End; {GradToRad}

Function DegToGrad(D: Real): Real;
Begin;
  DegToGrad:=D/0.9;
End; {DegToGrad}

Function RadToDeg(R: Real): Real;
Begin;
  RadToDeg:=R*180/Pi;
End; {RadToDeg}

Function RadToGrad(R: Real): Real;
Begin;
  RadToGrad:=R*200/Pi;
End;

Function GradToDeg(G: Real): Real;
Begin;
  GradToDeg:=G*0.9;
End; {GradToDeg}

Function Tan(R: Real): Real;
Begin;
  Tan:=Sin(R) / Cos(R);
End; {Tan}

Function Csc(R: Real): Real;
Begin;
  Csc:=1 / Sin(R);
End; {Csc}

Function Sec(R: Real): Real;
Begin;
  Sec:=1 / Cos(R);
End; {Sec}

Function Cot(R: Real): Real;
Begin;
  Cot:=Cos(R) / Sin(R);
End; {Cot}

Function Hypotenuse_Equilateral_Triangle(S: Real): Real;
Begin;
  Hypotenuse_Equilateral_Triangle:=( SQRT(3) * S ) / 2;
End;

Function Pythagoras(A, B: Real): Real;
Begin;
  Pythagoras:=Sqrt((A*A)+(B*B));
End; {Pythagoras}

Function Triangle_Area(B, H: Real): Real;
Begin;
  Triangle_Area:=0.5 * B * H;
End; {Triangle Area}

Function Equilateral_Triangle_Area(S: Real): Real;
Begin;
  Equilateral_Triangle_Area:=( SQRT(3) * (S*S) ) / 4;
End;

Function Circle_Area(R: Real): Real;
Begin;
  Circle_Area:=Pi*(R*R);
End;

Function Ellipse_Area(A, B: Real): Real;
Begin;
  Ellipse_Area:=Pi*A*B;
End;

Function Square_Area(S: Real): Real;
Begin;
  Square_Area:=(S*S);
End;

Function Rectangle_Area(X, Y: Real): Real;
Begin;
  Rectangle_Area:=X*Y;
End;

Function Cube_Surface_Area(S: Real): Real;
Begin;
  Cube_Surface_Area:=6*(S*S);
End;

Function Rectangular_Prism_Surface_Area(H, W, L: Real): Real;
Begin;
  Rectangular_Prism_Surface_Area:=(2*H*W) + (2*H*L) + (2*L*W);
End;

Function Sphere_Surface_Area(R: Real): Real;
Begin;
  Sphere_Surface_Area:=4*Pi*(R*R);
End;

Function Cylinder_Surface_Area(R, H: Real): Real;
Begin;
  Cylinder_Surface_Area:=(2*Pi*R*H) + (2*Pi*(R*R));
End;

Function Cone_Surface_Area_Without_Base(R, H: Real): Real;
Begin;
  Cone_Surface_Area_Without_Base:=Pi*R*SQRT((R*R) + (H*H) );
End;

Function Cone_Surface_Area_With_Base(R, H: Real): Real;
Begin;
  Cone_Surface_Area_With_Base:=(Pi*R*SQRT((R*R) + (H*H)) ) + (Pi*(R*R));
End;

Function Sector_Area(R, A: Real): Real;
Begin;
  Sector_Area:=0.5*(R*R)*A;
End;

Function Trapezoid_Area(A, B, H: Real): Real;
Begin;
  Trapezoid_Area:=(H / 2) * (A + B);
End;

Function Circle_Circumference(R: Real): Real;
Begin;
  Circle_Circumference:=2*Pi*R;
End;

Function Ellipse_Circumference(A, B: Real): Real;
Begin;
  Ellipse_Circumference := (2*Pi) * ( SQRT( ( (A*A) + (B*B) ) / 2 ) );
End;

Function Cube_Volume(S: Real): Real;
Begin;
  Cube_Volume:=S*S*S;
End;

Function Rectangle_Volume(X, Y, Z: Real): Real;
Begin;
  Rectangle_Volume:=X*Y*Z;
End;

Function Sphere_Volume(R: Real): Real;
Begin;
  Sphere_Volume:=(4/3)*Pi*(R*R*R);
End;

Function Cylinder_Volume(R, H: Real): Real;
Begin;
  Cylinder_Volume:=Pi*(R*R)*H;
End; {Cylinder Volume}

Function Cone_Volume(R, H: Real): Real;
Begin;
  Cone_Volume:=(Pi*(R*R)*H)/3;
End;

Function Prism_Volume(B, H: Real): Real;
Begin;
  Prism_Volume:=B*H;
End; {Prism Volume}

Function Distance(X1, X2, Y1, Y2: Real): Real;
Begin;
  Distance:=Sqrt(Sqr(Y2-Y1)+Sqr(X2-X1));
End; {Distance}

Function Factorial(N: LongInt): LongInt;
  Var X, Y: LongInt;
Begin;
  If N <> 0 then Begin
    X:=N;
    For Y:=(N-1) downto 2 do X:=X*Y;
    Factorial:=X;
  End {If}
  Else Factorial:=1;
End; {Factorial}

Function GCF(A, B: LongInt): LongInt;
  {finds the Greatest Common Factor between 2 arguments}
  Var X, High: LongInt;
Begin;
  High:=1;
  For X:=2 to A do If (A MOD X = 0)  AND  (B MOD X = 0) then High:=X;
  GCF:=High;
End; {GCF}

Function LCM(A, B: LongInt): LongInt;
  {finds the Least Common Multiple between 2 arguments}
  Var Inc, Low, High: LongInt;
Begin;
  If A > B then Begin
    High:=A;
    Low:=B;
  End {If}
  Else Begin
    High:=B;
    Low:=A;
  End; {Else}
  Inc:=High;
  While High MOD Low <> 0 do High:=High+Inc;
  LCM:=High;
End; {LCM}

Procedure ISwap(Var X, Y: LongInt);
 {swaps 2 Integer or LongInteger variables}
 Var Z: LongInt;
Begin;
 Z:=X;
 X:=Y;
 Y:=Z;
End;

Procedure RSwap(Var X, Y: Real);
 {swaps 2 REAL variables}
 Var Z: Real;
Begin;
 Z:=X;
 X:=Y;
 Y:=Z;
End;