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.