project end
This commit is contained in:
commit
ba032b7ef3
@ -51,7 +51,6 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc
|
|||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Iterates over the tree given by root. Follows the usage of strtok. If tree is NULL, the next entry of the last tree given is returned in ordering direction.
|
// Iterates over the tree given by root. Follows the usage of strtok. If tree is NULL, the next entry of the last tree given is returned in ordering direction.
|
||||||
// Use your implementation of a stack to organize the iterator. Push the root node and all left nodes first. On returning the next element,
|
// Use your implementation of a stack to organize the iterator. Push the root node and all left nodes first. On returning the next element,
|
||||||
// push the top node and push all its left nodes.
|
// push the top node and push all its left nodes.
|
||||||
@ -90,7 +89,6 @@ void *nextTreeData(TreeNode *root) {
|
|||||||
return node->data;
|
return node->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Releases all memory resources (including data copies).
|
// Releases all memory resources (including data copies).
|
||||||
void clearTree(TreeNode *root) {
|
void clearTree(TreeNode *root) {
|
||||||
if (root == NULL)
|
if (root == NULL)
|
||||||
|
|||||||
@ -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