numbers is done. Unittest is done too. Projekt abgeschlossen
This commit is contained in:
parent
dc7000015c
commit
8ac4cadb09
BIN
highscore.o
Normal file
BIN
highscore.o
Normal file
Binary file not shown.
@ -4,5 +4,6 @@ player_name;9929
|
|||||||
Kamto;7946
|
Kamto;7946
|
||||||
player_name;5987
|
player_name;5987
|
||||||
Warren;4986
|
Warren;4986
|
||||||
|
player_name;4983
|
||||||
player1;3999
|
player1;3999
|
||||||
player_name;2991
|
player_name;2991
|
||||||
|
|||||||
74
numbers.c
74
numbers.c
@ -14,14 +14,72 @@
|
|||||||
// Returns len random numbers between 1 and 2x len in random order which are all different, except for two entries.
|
// 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
|
// Returns NULL on errors. Use your implementation of the binary search tree to check for possible duplicates while
|
||||||
// creating random numbers.
|
// creating random numbers.
|
||||||
unsigned int *createNumbers(unsigned int len)
|
unsigned int *createNumbers(unsigned int len) {
|
||||||
{
|
if (len < 2)
|
||||||
srand(0);
|
return NULL;
|
||||||
int r = rand();
|
|
||||||
|
unsigned int *numbers = malloc(len * sizeof(unsigned int));
|
||||||
|
if (!numbers)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
srand((unsigned int)time(NULL));
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < len - 1; i++) {
|
||||||
|
unsigned int n;
|
||||||
|
int duplicate;
|
||||||
|
do {
|
||||||
|
duplicate = 0;
|
||||||
|
n = rand() % (2 * len) + 1;
|
||||||
|
|
||||||
|
for (unsigned int j = 0; j < i; j++) {
|
||||||
|
if (numbers[j] == n) {
|
||||||
|
duplicate = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (duplicate);
|
||||||
|
|
||||||
|
numbers[i] = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
// zufälliges Duplikat am Ende
|
||||||
|
unsigned int idx1 = rand() % (len - 1);
|
||||||
|
numbers[len - 1] = numbers[idx1];
|
||||||
|
|
||||||
|
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)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
// 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 (!numbers || len < 2) return 0;
|
||||||
|
|
||||||
|
// Kopie erstellen, damit Original nicht verändert wird
|
||||||
|
unsigned int *copy = malloc(len * sizeof(unsigned int));
|
||||||
|
if (!copy) return 0;
|
||||||
|
memcpy(copy, numbers, len * sizeof(unsigned int));
|
||||||
|
|
||||||
|
// Einfacher Bubble Sort oder Insert Sort direkt in dieser Funktion
|
||||||
|
// damit wir keine Hilfsfunktionen brauchen
|
||||||
|
for (unsigned int i = 0; i < len - 1; i++) {
|
||||||
|
for (unsigned int j = 0; j < len - i - 1; j++) {
|
||||||
|
if (copy[j] > copy[j + 1]) {
|
||||||
|
unsigned int tmp = copy[j];
|
||||||
|
copy[j] = copy[j + 1];
|
||||||
|
copy[j + 1] = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// benachbarte Elemente vergleichen
|
||||||
|
for (unsigned int i = 0; i < len - 1; i++) {
|
||||||
|
if (copy[i] == copy[i + 1]) {
|
||||||
|
unsigned int dup = copy[i];
|
||||||
|
free(copy);
|
||||||
|
return dup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(copy);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
45
test_numbers.c
Normal file
45
test_numbers.c
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "numbers.h"
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
unsigned int len = 10; // Beispielgröße
|
||||||
|
unsigned int *numbers = createNumbers(len);
|
||||||
|
|
||||||
|
if (!numbers) {
|
||||||
|
printf("Fehler: Konnte Zahlen nicht erzeugen.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1 Test: Alle Zahlen ausgeben
|
||||||
|
printf("Erzeugtes Array:\n");
|
||||||
|
for (unsigned int i = 0; i < len; i++) {
|
||||||
|
printf("%u ", numbers[i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
|
||||||
|
// 2 Test: Prüfen, ob genau ein Duplikat vorhanden ist
|
||||||
|
unsigned int duplicate = getDuplicate(numbers, len);
|
||||||
|
if (duplicate == 0) {
|
||||||
|
printf("Fehler: Kein Duplikat gefunden.\n");
|
||||||
|
} else {
|
||||||
|
printf("Gefundenes Duplikat: %u\n", duplicate);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3 Test: Prüfen, ob nur ein Duplikat existiert
|
||||||
|
unsigned int count = 0;
|
||||||
|
for (unsigned int i = 0; i < len; i++) {
|
||||||
|
if (numbers[i] == duplicate)
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
if (count == 2) {
|
||||||
|
printf("Test bestanden: Genau ein Duplikat vorhanden.\n");
|
||||||
|
} else {
|
||||||
|
printf("Test fehlgeschlagen: Duplikatanzahl = %u\n", count);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Speicher freigeben
|
||||||
|
free(numbers);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
BIN
test_numbers.exe
Normal file
BIN
test_numbers.exe
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user