Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

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;

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;

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.

Tackle projects and never again get stuck behind a technical roadblock.

Join Now
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