diff --git a/highscores.txt b/highscores.txt index 4edd5a7..37d6057 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1 +1,2 @@ +Jakob;4974 player1;3999 diff --git a/numbers.c b/numbers.c index f615fcb..f3d8d50 100644 --- a/numbers.c +++ b/numbers.c @@ -16,22 +16,107 @@ unsigned int RANDOM_SEED = 0; // 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 setSeed(seed) +{ + RANDOM_SEED = seed; +} + +unsigned int createchecknumber(unsigned int len, unsigned int *numbers) +{ + for (unsigned int i = 0; i < len; i++) + { + unsigned int same = 0; + + do + { + unsigned int value = 0; + value = (rand() % (len * 2) + 1); + + same = 0; + + for (unsigned int j = 0; j < i; j++) + { + if (numbers[j] == value) + { + same = 1; + break; + } + } + + if (same == 0) + { + numbers[i] = value; + } + + } while (same == 1); + } +} + unsigned int *createNumbers(unsigned int len) { - - unsigned int *numbers = malloc(sizeof(unsigned int) * len); - if (RANDOM_SEED == 0) { srand(time(NULL)); } else { - srand(12345); + srand(RANDOM_SEED); } + + unsigned int *numbers = malloc(sizeof(unsigned int) * len); + if (numbers == NULL) + { + return NULL; + } + + createchecknumber(len, numbers); + + unsigned int i = 0; + unsigned int j = 0; + + do + { + i = 0; + j = 0; + + i = rand() % len; + j = rand() % len; + + } while (i == j); + + numbers[i] = numbers[j]; +} + +unsigned int *sortnumbers(unsigned int numbers[], unsigned int len) +{ + for (unsigned int j = 0; j < len - 1; j++) + { + for (unsigned int i = 0; i < len - 1 - j; i++) + { + unsigned int temp = 0; + if (numbers[i] > numbers[i + 1]) + { + temp = numbers[i]; + numbers[i] = numbers[i + 1]; + numbers[i + 1] = temp; + } + } + } + return numbers; } // 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) { + sortnumbers(numbers, len); + + for (unsigned i = 0; i < len - 1; i++) + { + if (numbers[i] == numbers[i+1]) + { + return numbers[i]; + } + } + return 0; } diff --git a/numbers.h b/numbers.h index 845bedb..ee567c9 100644 --- a/numbers.h +++ b/numbers.h @@ -7,6 +7,8 @@ extern unsigned int RANDOM_SEED; // Returns NULL on errors. Use your implementation of the binary search tree to check for possible duplicates while // creating random numbers. +unsigned int setSeed(seed); + unsigned int *createNumbers(unsigned int len); //funktion mit srand(time) diff --git a/test__numbers.c b/test__numbers.c index bc3e2ad..a6ba333 100644 --- a/test__numbers.c +++ b/test__numbers.c @@ -4,16 +4,19 @@ #include "numbers.h" void test_enough_numbers() { + setSeed(1); unsigned int len = 20; unsigned int *numbers = createNumbers(len); - if(*numbers == NULL) + if(numbers == NULL) { return; } -} + free(numbers); +} + void test_no_duplicates_except_one() { }