Code Translation

Can someone translate the code below to VB/ VBA?

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;

c[0] = -1;
for i=1 to M by 1     /* loop sets initial subset and its SUM */
{
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;
}

next_update:                /* goto label */
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]];
}

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;
}

print "the number of subsets is," count;
Who is Participating?

Commented:
Try this (I have not tested this but it should be mostly there)

Dim N as integer
Dim M as Integer
Dim P as Integer      /* the given values of N, M, and P */
Dim SUM as Ingteger      /* current sum */
Dim tsum as Integer      /* temporary for a partial sum of newly added elements */
Dim count as Integer      /* number of subsets whose SUM is < P
Dim i as Integer
Dim j as Integer
Dim S() as Integer      /* Given set S -- not using array element 0 */
Dim c() as Integer

ReDim S(N+1)
ReDim c(M+1)            /* indicates which indexes are in the current subset */

j = 1
count = 0
Sum = 0
c(1) = -1

for i= 1 to M            /* loop sets initial subset and its SUM */
c(i) = i
SUM = SUM + S(i)
next

do while j > 0 AND SUM < P
count = count + 1
j = M

do while c(j) = (N - M + j)   /* back up throwing elements out */
SUM = SUM - S(c(j]))
j = j - 1
loop

next_update:                /* goto label */

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

tsum = S[c[j]];
for i = j+1 to M       /* advance adding elements in */
c(i) = c(i-1) + 1
tsum = tsum + S(c(i))
next

if SUM + tsum >= P then
j = j - 1             /* backup 1 level */
if j <= 0 then
Exit Do
end if                 /* break out of while loop */

goto next_update
end if

SUM = SUM + tsum
loop

MsgBox "the number of subsets is," & count
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.