I have a bunch of C++ files containing math processing functions,

which I need to convert to pascal.

But I have never programmed C++ (only ANSI C some 15 years ago) and I

am stuck because of the syntax differences. It is all about the

handling of data in arrays and I would be grateful for some hints on

how to convert it.

Below is an example function from this file set.

I have deduced that the variables named g<something> are globally

defined, but I don't know how to handle the following:

1) The second line in the loop contains the command std::max, how can

that be translated? I have not found any class definition for "std"

with a method "max"....

2) The parameter into the function is a pointer *A of type double. To

me that indicates a value of some kind, but in the code it suddenly

seems to appear as an array with indexing. What would be the proper

pascal translation of this?

void ForwardModel::Decompose(double *A)

{

int i, j, k, jBegin, band;

__int64 jPos, kPos;

double sum;

band = gNumNodeYZ;

kPos = 0;

for (k=1; k<=gNumNodes; ++k)

{

kPos += band;

jBegin = std::max(k-band, 1);

jPos = (jBegin-1) * band;

for (j=jBegin; j<k; ++j)

{

jPos += band;

sum = 0.0;

for (i=jBegin; i<j; ++i) sum += A[kPos+i-1] * A[jPos+i-1];

A[kPos+j-1] = (A[kPos+j-1] - sum) / A[jPos+j-1];

}

sum = 0.0;

for (j=jBegin; j<k; ++j) sum += A[kPos+j-1] * A[kPos+j-1];

A[kPos+k-1] = sqrt(A[kPos+k-1] - sum);

}

}

Crudely translated:

procedure Decompose(var A: double); <<== Should it be an array here?

var

i, j, k, jBegin, band: integer;

jPos, kPos: Int64;

sum: double;

begin

band = gNumNodeYZ;

kPos = 0;

for k:=1 to gNumNodes do

begin

kPos := kPos + band;

jBegin := std::max(k-band, 1); <<== what to do here?

jPos := (jBegin-1) * band;

for j := jBeginto k-1 do

begin

jPos := jPos + band;

sum := 0.0;

for i := jBegin to j-1 do

sum := sum + A[kPos+i-1] * A[jPos+i-1]; <<== array????

A[kPos+j-1] := (A[kPos+j-1] - sum) / A[jPos+j-1];

end

sum := 0.0;

for j := jBegin to k-1 do

sum := sum + A[kPos+j-1] * A[kPos+j-1]; <<== array????

A[kPos+k-1] := sqrt(A[kPos+k-1] - sum);

end

end;

--

Bo Berglund

Developer in Sweden

_______________________________________________

fpc-pascal maillist -

[hidden email]
http://lists.freepascal.org/mailman/listinfo/fpc-pascal