ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Can you help with the correct translation of this code? (https://www.excelbanter.com/excel-programming/311983-can-you-help-correct-translation-code.html)

Just For Fun...

Can you help with the correct translation of this code?
 

I've try to translate the code below to VBA.
Can someone help to correct the rest of the code?
C code is provided.

TIA
John




'Modification of algorithm given in "Combinatorial Algorithms"
'by Reingold, Nievergelt, and Deo


'int N, M, P; /* the given values of N, M, and P */
'int S[N+1]; /* Given set S -- not using array element 0 */
'int c[M+1]; /* indicates which indexes are in the current subset */
'int SUM = 0; /* current sum */
'int tsum; /* temporary for a partial sum of newly added elements */
'int count = 0; /* number of subsets whose SUM is < P
'int i;
'int j=1;

Sub Test()

Dim N%, M%, P&
Dim S()
Dim c()
Dim SUM&, tsum&, count&, I, J

N = 20
M = 5
P = 36
ReDim S(N + 1)
ReDim c(M + 1)
SUM = 0
count = 0
J = 1




'c[0] = -1;
'for i=1 to M by 1 /* loop sets initial subset and its SUM */
' {
' c[i] = i;
' SUM = SUM + S[i];
' }
c(0) = -1
For I = 1 To M
c(I) = I
SUM = SUM + S(I)




''While (J 0 And SUM < P)
' {
' count = count + 1;
' j = M;

' while (c[j] == N - M + j) /* back up throwing elements out */
' {
' SUM = SUM - S[c[j]];
' j = j - 1;
' }

While (J 0 And SUM < 0)
count = count + 1
J = M
While (c(J) = N - M + J)
SUM = SUM - S(c(J))
J = J - 1


'next_update: /* goto label */
'SUM = SUM - S[c[j]];
'c[j] = c[j] + 1;

SUM = SUM - S(c(J))
c(J) = c(J) + 1




'tsum = S[c[j]];
'for i = j+1 to M by 1 /* advance adding elements in */
' {
' c[i] = c[i-1] + 1;
' tsum = tsum + S[c[i]];
' }

tsum = S(c(J))
For I = J + 1 To M
c(I) = c(I - 1) + 1
tsum = tsum + S(c(I))



if (SUM + tsum = P)
{
j = j - 1; /* backup 1 level */
if (j <= 0) break; /* break out of while loop */
goto next_update;
}

SUM = SUM + tsum;
}

If (SUM + tsum = P) Then
J = J - 1
If (J <= 0) Then Exit Sub

SUM = SUM + tsum




'Print "the number of subsets is,"; count;

Debug.Print count

End Sub


All times are GMT +1. The time now is 02:29 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com