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)
