diff --git a/numbers.c b/numbers.c index df702db..938c6ae 100644 --- a/numbers.c +++ b/numbers.c @@ -5,41 +5,60 @@ #include "numbers.h" #include "bintree.h" -CompareFctType compareFct(const void *arg1, const void *arg2) { - const unsigned int *entry1 = arg1; - const unsigned int *entry2 = arg2; +CompareFctType compareFct(const void *arg1, const void *arg2) +{ + const unsigned int *entry1 = arg1; + const unsigned int *entry2 = arg2; - int result = *entry2 - *entry1; - - return result; + int result = *entry2 - *entry1; + + return result; } -//TODO: getDuplicate und createNumbers implementieren +// TODO: getDuplicate und createNumbers implementieren /* * * Erzeugen eines Arrays mit der vom Nutzer eingegebenen Anzahl an Zufallszahlen. - * Sicherstellen, dass beim Befüllen keine Duplikate entstehen. - * Duplizieren eines zufälligen Eintrags im Array. - * in `getDuplicate()`: Sortieren des Arrays und Erkennen der doppelten Zahl durch Vergleich benachbarter Elemente. */ + * Sicherstellen, dass beim Befüllen keine Duplikate entstehen. + * Duplizieren eines zufälligen Eintrags im Array. + * in `getDuplicate()`: Sortieren des Arrays und Erkennen der doppelten Zahl durch Vergleich benachbarter Elemente. */ // Returns len random numbers between 1 and 2x len in random order which are all different, except for two entries. // Returns NULL on errors. Use your implementation of the binary search tree to check for possible duplicates while // creating random numbers. unsigned int *createNumbers(unsigned int len) { - //hier wird das array angelegt soll Einträge (zahlen) haben die zwichen 1 und 2* len liegen - // ran % 2*len - int *numbers[] = calloc(len, sizeof(int)); - if(!numbers) - return NULL; - srand(time(NULL)); - for(size_t i = 0; i < len; i++) { - numbers[i] = rand() % 2*len + 1; + TreeNode *numbers; + + int isDuplicate = 0; + int number = rand() % (2 * len) + 1; + + numbers = addToTree(NULL, &number, sizeof(int), compareFct, &isDuplicate); + + for (int i = 0; i < len; i++) + { + number = rand() % (2 * len) + 1; + addToTree(numbers, &number, sizeof(int), compareFct, &isDuplicate); + if (isDuplicate == 1) + { + isDuplicate = 0; + i--; + } } + + int duplicatePosition = rand() % len; + TreeNode *duplicate = nextTreeData(numbers); + + for (int i = 0; i < duplicatePosition; i++) + { + duplicate = nextTreeData(NULL); + } + + addToTree(numbers, duplicate->data, sizeof(int), compareFct, NULL); } // Returns only the only number in numbers which is present twice. Returns zero on errors. unsigned int getDuplicate(const unsigned int numbers[], unsigned int len) { - + } \ No newline at end of file