#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. srand(time(NULL)); // Generator initialisieren int zufallsZahl = rand(); // Zufallszahl generieren */ // 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 *arr = malloc(len * sizeof(unsigned int)); if(arr == NULL) return NULL; for(int i = 0; i < len; i++) arr[i] = 0; for(int j = 0; j < len; j++) { do { arr[j] = (rand() % (2 * len)) + 1; if (j >= 1) { for (int k = 0; k < j; k++) { if (arr[j] == arr[k]) { arr[j] = 0; break; } } } } while (arr[j] == 0); } unsigned int strc = 0; unsigned int strv = 0; do { strv = rand() % len; strc = rand() % len; } while (strv == strc); arr[strv] = arr[strc]; return arr; } // 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) { unsigned int duplicate = 0; unsigned int counter = 0; for(int i = 0; i < (len - 1); i++) { for(int j = 1; j < (len - i); j++) { if(numbers[i] == numbers[i+j]) { duplicate = numbers[i]; counter++; } } } if(counter != 1) duplicate = 0; return duplicate; }