#include #include #include #include #include "numbers.h" #include "bintree.h" //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. */ // 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) { srand(time(NULL)); unsigned int *numbers = malloc (sizeof(unsigned int) * (len+1)); unsigned int newNumber; for (unsigned int i = 0; i < len; i++) { int unique = 0; while (!unique) { unique = 1; newNumber = rand () % (2*len) + 1; for (unsigned int j = 0; j < i; j++) { if (numbers[j] == newNumber) { unique = 0; break; } } } numbers[i] = newNumber; } unsigned int duplicate = numbers[rand () % len]; numbers[len] = duplicate; return numbers; } int compare (const void *a, const void *b) { unsigned int *x = a; unsigned int *y = b; if (*x < *y) { return -1; } else if (*x > *y) { return 1; } else { return 0; } } // Returns only the only number in numbers which is present twice. Returns zero on errors. unsigned int getDuplicate(unsigned int numbers[], unsigned int lenPlusOne) { if (lenPlusOne < 2) { return 0; } qsort(numbers,lenPlusOne, sizeof(unsigned int), compare); for (int i = 0; i < lenPlusOne-1; i++) { if (numbers[i] == numbers [i+1]) { return numbers[i]; } } return 0; }