home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / PASWIZ13.ZIP / CALC.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1992-08-16  |  2.3 KB  |  71 lines

  1. { This is a demonstration of the expression evaluator
  2.   provided by the Pascal Wizard's Library }
  3.  
  4.  
  5.  
  6. PROGRAM Calc;
  7.  
  8. USES
  9.    ExtMath;
  10.  
  11. VAR
  12.    Expr, StrResult: String;
  13.    Result: Real;
  14.    tmp, ErrCode: Integer;
  15.  
  16. BEGIN
  17.    IF (ParamCount = 0) THEN BEGIN
  18.       WriteLn('CALC  Demo for the PasWiz Library expression evaluator');
  19.       WriteLn;
  20.       WriteLn('Syntax:');
  21.       WriteLn('   CALC expression');
  22.       WriteLn;
  23.       WriteLn('Expressions may use the following operators:');
  24.       WriteLn('   +      add');
  25.       WriteLn('   /      divide');
  26.       WriteLn('   *      multiply');
  27.       WriteLn('   -      subtract');
  28.       WriteLn('   ^      raise to a power (** also works)');
  29.       WriteLn;
  30.       WriteLn('A number of functions are also provided:');
  31.       WriteLn('   ABS    absolute value         INT    integer');
  32.       WriteLn('   ACOS   inverse cosine         LOG    natural log');
  33.       WriteLn('   ASIN   inverse sine           PI     3.141593');
  34.       WriteLn('   ATAN   inverse tangent        SIN    sine');
  35.       WriteLn('   COS    cosine                 SQRT   square root');
  36.       WriteLn('   FRAC   fraction               TAN    tangent');
  37.       WriteLn;
  38.       WriteLn('Trig functions expect angles in radians.');
  39.    END
  40.    ELSE BEGIN
  41.       Expr := '';
  42.       FOR tmp := 1 TO ParamCount DO
  43.          Expr := Expr + ParamStr(tmp);
  44.       Evaluate(Expr, Result, ErrCode);
  45.       IF (ErrCode = 0) THEN BEGIN
  46.          Str(Result:10:6, StrResult);
  47.          WHILE (StrResult[Length(StrResult)] = '0') DO
  48.             Delete(StrResult, Length(StrResult), 1);
  49.          IF (Length(StrResult) = 0) THEN
  50.             StrResult := '0';
  51.          IF (StrResult[Length(StrResult)] = '.') THEN
  52.             Delete(StrResult, Length(StrResult), 1);
  53.          IF (StrResult[1] = ' ') THEN BEGIN
  54.             Delete(StrResult, 1, 1);
  55.             IF (StrResult[1] = ' ') THEN
  56.                Delete(StrResult, 1, 1);
  57.          END;
  58.          WriteLn(Expr, ' = ', StrResult);
  59.       END
  60.       ELSE
  61.          CASE ErrCode OF
  62.             1: WriteLn('Argument expected');
  63.             2: WriteLn('Missing number');
  64.             3: WriteLn('Unknown function');
  65.             4: WriteLn('Unbalanced parentheses');
  66.             9: WriteLn('Division by zero');
  67.             ELSE WriteLn('Error');
  68.          END;
  69.    END;
  70. END.
  71.