Problem mit meiner Kombinationsfunktion!



  • Hey Leute,
    habe folgenden Code geschrieben:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define size_array(x) (sizeof x / sizeof *x)
    
    int indix (int number)
    {
        int save=0;
        int steps=0;
        save = number;
        if (save == 1)
        {
            return 0;
        }
        else
        {
           while (save != 1)
           {
               save >>= 1;
               steps++;
           }
           return steps;
        }
    }
    
    int* next (int array[], int limit)
    {
        int i;
        for (i=0;i<size_array(array);i++)
        {
            if (i==0)
            {
                array[i] <<= 1;
            }
    
            if (indix(array[i]) == limit)
            {
                if (i==size_array(array))
                {
                    continue;
                }
    
                array[i] = 0x1;
                array[i+1] <<= 1;
            }
    
        }
        return array;
    }
    
    int main ()
    { 
        int Array[] = {0x1,0x1,0x1};
        int a;
    
        for (a=0;a<25;a++)
        {
            printf("(%d/%d/%d)\n",Array[0],Array[1],Array[2]);
            next(Array,3);
        }
        return 0;
    }
    

    Dabei kommt folgender Ablauf:
    (1/1/1)
    (2/1/1)
    (4/1/1)
    (1/2/1)
    (2/2/1)
    (4/2/1)
    (1/4/1)
    (2/4/1)
    (4/4/1) <-- hier wird es falsch!
    (1/8/1) <-- das soll so nicht sein!!!
    Eigentlich sollte hier (1/1/2) kommen!
    Aber ich denke es hängt an
    folgender Stelle:

    if (indix(array[i]) == limit)
    {
        if (i==size_array(array))
        {
            continue;
        }
    
        array[i] = 0x1;
        array[i+1] <<= 1;
    }
    

    MfG Jonas 🙂



  • In next() ist "array" nur ein Zeiger und kein Array, daher funktioniert size_array nicht so, wie du denkst, wahrscheinlich liefert es immer 1. Du musst die Größe des Arrays als Parameter an func() mitgeben.


Anmelden zum Antworten