From b6de4670e64d8ccb831d49bc63168e4840a5d4fa Mon Sep 17 00:00:00 2001 From: "dietrichsi98865@th-nuernberg.de" Date: Thu, 11 Dec 2025 09:25:06 +0100 Subject: [PATCH] =?UTF-8?q?Unittest=20f=C3=BCr=20numbers=20geschrieben=20u?= =?UTF-8?q?nd=20bestanden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- numbers.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 9 deletions(-) diff --git a/numbers.c b/numbers.c index 4707bcc..aca949d 100644 --- a/numbers.c +++ b/numbers.c @@ -1,3 +1,4 @@ + #include #include #include @@ -14,23 +15,69 @@ // 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. + +int compare(const void* a, const void* b) { + return (*(unsigned int*)a - *(unsigned int*)b); +} + unsigned int *createNumbers(unsigned int len) { -if(len < 2) + //array erstellen + if(len < 2) return NULL; - + + unsigned int *arr = malloc(sizeof(unsigned int)*len); + + //sicherstellen dass zahlen einmalig vorkommen srand(time(NULL)); - - int count = 0; - while(count < len - 1){ - int value = (rand() % (2 * len)) + 1; - - + for(int i = 0; i < len; i++){ + while(1){ + unsigned int value = (rand() % (2 * len)) + 1; + int alreadyUsed = 0; + for(int j = 0; j < i; j++) { + if(arr[j] == value) { + alreadyUsed = 1; + break; + } + } + if(!alreadyUsed) { + arr[i] = value; + break; + } + } } + + //eine zahl duplizieren und irgendwo hinkopieren + int dupIndex = rand() % len; + int targetIndex; + do{ + targetIndex = rand() % len; + }while (targetIndex == dupIndex); + arr[targetIndex] = arr[dupIndex]; + + 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) { + if(len < 2){ + return 0; + } -} \ No newline at end of file + unsigned int *copy = malloc(sizeof(unsigned int)*len); + + memcpy(copy, numbers, len * sizeof(unsigned int)); + + qsort(copy, len, sizeof(unsigned int), compare); + + unsigned int duplicate = 0; + for(int i = 1; i < len; i++){ + if(copy[i] == copy[i-1]){ + duplicate = copy[i]; + break; + } + } + free(copy); + return duplicate; +}