← DL-Pascal collection

MATHTOOL.pas

DOWNLOAD ORIGINAL FILE

{ DL-Pascal Unit Implementation: MathTools }
{ Requires MATHTOOL.UNI (compiled interface) }
{ Compile this -> produces MATHTOOL.OLE }

UNIT MathTool;

{ Private helper — not visible outside unit }
FUNCTION IsOdd(n : Integer) : Boolean;
BEGIN
  IsOdd := (n MOD 2) <> 0;
END;

PROCEDURE UTReset;
BEGIN
  CallCount := 0;
END;

FUNCTION UTAdd(a, b : Integer) : Integer;
BEGIN
  Inc(CallCount);
  UTAdd := a + b;
END;

FUNCTION UTMul(a, b : Integer) : LongInt;
BEGIN
  Inc(CallCount);
  UTMul := LongInt(a) * b;
END;

FUNCTION UTMax(a, b : Integer) : Integer;
BEGIN
  Inc(CallCount);
  IF a > b THEN UTMax := a ELSE UTMax := b;
END;

FUNCTION UTMin(a, b : Integer) : Integer;
BEGIN
  Inc(CallCount);
  IF a < b THEN UTMin := a ELSE UTMin := b;
END;

FUNCTION UTAbs(n : Integer) : Integer;
BEGIN
  Inc(CallCount);
  IF n < 0 THEN UTAbs := -n ELSE UTAbs := n;
END;

FUNCTION UTIsPrime(n : Integer) : Boolean;
VAR d : Integer;
BEGIN
  Inc(CallCount);
  IF n < 2 THEN BEGIN UTIsPrime := False; Exit; END;
  IF n = 2 THEN BEGIN UTIsPrime := True;  Exit; END;
  IF NOT IsOdd(n) THEN BEGIN UTIsPrime := False; Exit; END;
  d := 3;
  WHILE d * d <= n DO BEGIN
    IF (n MOD d) = 0 THEN BEGIN UTIsPrime := False; Exit; END;
    Inc(d, 2);
  END;
  UTIsPrime := True;
END;

FUNCTION UTFactorial(n : Integer) : LongInt;
BEGIN
  Inc(CallCount);
  IF n <= 1 THEN UTFactorial := 1
  ELSE UTFactorial := n * UTFactorial(n - 1);
END;

FUNCTION UTGcd(a, b : Integer) : Integer;
BEGIN
  Inc(CallCount);
  IF b = 0 THEN UTGcd := a
  ELSE UTGcd := UTGcd(b, a MOD b);
END;

PROCEDURE UTInitStats(VAR st : TStats);
BEGIN
  Inc(CallCount);
  st.count := 0;
  st.sum   := 0;
  st.min   := 32767;
  st.max   := -32768;
END;

PROCEDURE UTAddStat(VAR st : TStats; val : Integer);
BEGIN
  Inc(CallCount);
  Inc(st.count);
  Inc(st.sum, val);
  IF val < st.min THEN st.min := val;
  IF val > st.max THEN st.max := val;
END;

FUNCTION UTMean(VAR st : TStats) : Real;
BEGIN
  Inc(CallCount);
  IF st.count = 0 THEN UTMean := 0.0
  ELSE UTMean := st.sum / st.count;
END;

BEGIN
  { Unit initialization }
  CallCount := 0;
END.