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

Optional Arguments
 

Here is a one-line function definition using an optional argument:

ucDefineFunction "abc(x, y=10) = x + y"
MsgBox ucEval("abc(5)-abc(3,4)")

In the following example, the last two arguments of the Sum function are defined as optional. Sample #3 explains other features that the Sum function demonstrates.

Visual Basic

Private Sub Form_Load()
   ucDefineFunction _
      "Sum(Expr&,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 sstep As Double, Total 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(Expr&,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| | Dacorbi Pattern Search| | 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