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
|
||||
player_name;5987
|
||||
Warren;4986
|
||||
player_name;4983
|
||||
player1;3999
|
||||
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 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(0);
|
||||
int r = rand();
|
||||
unsigned int *createNumbers(unsigned int len) {
|
||||
if (len < 2)
|
||||
return NULL;
|
||||
|
||||
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