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;
tli99Asked:
Who is Participating?
 
Julian HansenConnect With a Mentor 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.

All Courses

From novice to tech pro — start learning today.