Home
News
Products
     uCalc Fast Math Parser
     uCalc Language Builder
     Windows Calculator
     DOS Calculator
Downloads
Message Forums
Satisfaction Survey
FAQ
Contact
Privacy Statement
Testimonials
Purchase

Special Argument Types
 

The user-defined Sum function in this sample demonstrates many features, including an unusual but powerful concept, where an expression can be passed as an argument (note: this is different than simply passing the resulting value of the expression).  It also demonstrates variable type arguments, as well as optional arguments.  Expressions such as the following can be evaluated:

Sum(x^2+5, 1, 10)
Sum(x - 6, 2, 8, .5)
Sum(4q+3, 1, 100, , q)
Sum(MyExpression, Sum(x+1,1,3), Sum(x,1,55), 1, MyVar)

Visual Basic

Private Sub Form_Load()
   ucDefineFunction _
      "Sum(Expression&,start,finish,step=1,var@=x)", _
      AddressOf ucalcSum
   ucDefineVariable "MyVar = 'z' "
   ucDefineVariable "MyExpression = '2*z^2 +10' "
End Sub

Private Sub Command1_Click()
   Expression$ = InputBox("Enter an expression",, _
                          "Sum(x^2+5, 1, 10)")
   MsgBox ucEvalStr(Expression$)
End Sub

Function ucalcSum() As Double
   Dim ExpressionPtr As Long, VariablePtr As Long
   Dim Total As Double, sstep As Double
   Dim Start As Double, Finish As Double
    
   ExpressionPtr = ucParam(1)
   Start = ucParam(2)
   Finish = ucParam(3)
   sstep = ucParam(4)
   VariablePtr = ucParam(5)
    
   For x = Start To Finish Step sstep
      ucSetVariableValue VariablePtr, x
      Total = Total + ucEvaluate(ExpressionPtr)
   Next

   ucalcSum = Total
End Function

VC++ or C++ Builder

#include <iostream>
#include "ucalc.cpp"

using namespace std;

long double ucalcSum();

int main()
{
  char Expression[80];

  ucDefineFunction(
     "Sum(Expression&,start,finish,step=1,var@=x)",
     reinterpret_cast<long>(ucalcSum));
  ucDefineVariable("MyVar = 'z' ");
  ucDefineVariable("MyExpression = '2*z^2 +10' ");

  while(1)
  {
    cout << "Enter an expression: " << endl;
    cin.getline(Expression, 80, '\n');
    cout << "Answer:  " << ucEvalStr(Expression)
         << endl;
  }

  return 0;
}

long double ucalcSum()
{
  long ExpressionPtr, VariablePtr;
  long double x, sstep, Start, Finish, Total;

  ExpressionPtr = ucParam[1];
  Start = ucParam[2];
  Finish = ucParam[3];
  sstep = ucParam[4];
  VariablePtr = ucParam[5];

  Total = 0;
  x = Start;

  while (x <= Finish)
  {
    ucSetVariableValue(VariablePtr, x);
    Total = Total + ucEvaluate(ExpressionPtr);
    x = x + sstep;
  }

  return Total;
}

Delphi

procedure TForm1.FormCreate(Sender: TObject);
begin
  ucDefineFunction(
     'Sum(Expr&,start,finish,step=1,var@=x)',
     Longword( @ucalcSum ));
  ucDefineVariable('MyVar = "z" ');
  ucDefineVariable('MyExpression = "2*z^2 +10" ');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Expression: string;
begin
  Expression := InputBox('', 'Enter an expression:',
                         'Sum(x^2+5, 1, 10)');
  Edit1.Text := ucEvalStr(Expression);
end;

function ucalcSum: Extended;
var
  ExpressionPtr, VariablePtr: Longint;
  x, sstep, Start, Finish, Total: Extended;
begin
  ExpressionPtr := Trunc(ucParam[1]);
  Start := ucParam[2];
  Finish := ucParam[3];
  sstep := ucParam[4];
  VariablePtr := Trunc(ucParam[5]);

  Total := 0;
  x := Start;

  while x <= Finish do
  begin
    ucSetVariableValue(VariablePtr, x);
    Total := Total + ucEvaluate(ExpressionPtr);
    x := x + sstep;
  end;

  ucalcSum := Total;
end;

 


 

Download fastmath.zip (~145K)






|Home| |News| |Products| | uCalc Fast Math Parser| | uCalc Language Builder| | Windows Calculator| | DOS Calculator| |Downloads| |Message Forums| |Satisfaction Survey| |FAQ| |Contact| |Privacy Statement| |Testimonials| |Purchase|


Copyright © 2006 by Daniel Corbier