numbers.c korrektur(final) numbersTests.c fertig bintree.c/.h vergleichsfunktion änderungen

This commit is contained in:
Ben Skuppin 2025-12-08 17:16:36 +01:00
parent 2ae4ca5cbe
commit 7b33c465a7
4 changed files with 62 additions and 27 deletions

View File

@ -100,8 +100,12 @@ unsigned int treeSize(const TreeNode *root)
int compareFct(const void *a, const void *b){
if(*a>*b)return -1;
if(*b>*a)return 1;
if(*a==*b)return 0;
unsigned int A = *(unsigned int *)a;
unsigned int B = *(unsigned int *)b;
int result= 0;
if(A>B)result = -1; //logik vertauscht?
if(B>A)result = 1; //logik vertauscht?
if(A==B)result = 0;
return result;
}

View File

@ -24,4 +24,6 @@ void clearTree(TreeNode *root);
// Returns the number of entries in the tree given by root.
unsigned int treeSize(const TreeNode *root);
int compareFct(const void *a, const void *b);
#endif

View File

@ -19,33 +19,41 @@ unsigned int *createNumbers(unsigned int len)
srand(time(NULL));
unsigned int* numbers =malloc(sizeof(unsigned int) * len);
unsigned int numberTemp;
unsigned int* numbTempPtr = &numberTemp;
//unsigned int* numbTempPtr = &numberTemp;
int generated = 0;
int isDuplicate = 0;
TreeNode* root = NULL;
if(numbers == NULL)return NULL;
while(genreated<len){
numberTemp = (rand() % 2*len)+1;
root = addToTree( root, numbTempPtr, sizeof(unsigned int), compareFct, isDuplicate );
while(generated<len){
numberTemp = (rand() % (2*len))+1;
isDuplicate = 0;
root = addToTree( root, &numberTemp, sizeof(unsigned int), compareFct, &isDuplicate );
if(!isDuplicate){
numbers[genreated] = numberTemp;
genreated++;
numbers[generated] = numberTemp;
generated++;
}
}
int DuplicateId;
int DuplicatePlace;
do{
DuplicateId = rand()%len;
DuplicatePlace = rand() % len;
}while(DuplicateId != DuplicatePlace);
numbers[DuplicatePlace] = numbers[DuplicteId];
do{
DuplicateId = rand() % len;
DuplicatePlace = rand() % len;
}while(DuplicateId == DuplicatePlace);
numbers[DuplicatePlace] = numbers[DuplicateId];
clearTree(root);
return numbers;
}
@ -53,19 +61,21 @@ unsigned int *createNumbers(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)
{
unsigned int duplicate;
unsigned int duplicateId;
unsigned int duplicatePlace;
unsigned int duplicate = 0;
unsigned int* numbersCopy = malloc(sizeof(unsigned int) * len);
duplicateId = rand() % len;
duplicate = numbers[duplicateId];
if(numbersCopy == NULL)return 0;
do{
duplicatePlace = rand() % len;
}while(duplicatePlace == duplicateId);
memcpy(numbersCopy, numbers, sizeof(unsigned int) * len);
numbers[duplicatePlace] = duplicate;
qsort(numbersCopy, len, sizeof(unsigned int), compareFct);
for(int i=1; i<len; i++){
if(numbersCopy[i-1]==numbersCopy[i])duplicate = numbersCopy[i];
}
free(numbersCopy);
return duplicate;
}

View File

@ -1,12 +1,30 @@
#include <stdio.h>
#include "unity/unity.h"
#include "numbers.h"
#include <string.h>
void setUp(void){}
void tearDown(void){}
void TEST_ZERO_DUPLICATE(){
unsigned int input[9] = {1,2,3,4,5,6,7,8,9};
TEST_ASSERT_EQUAL_INT(0, getDuplicate(input, 9));
}
void TEST_ONE_DUPLICATE(){
unsigned int input[9] = {1,2,3,4,5,6,7,2,9};
TEST_ASSERT_EQUAL_INT(2, getDuplicate(input, 9));
}
int main(){
@ -14,9 +32,10 @@ int main(){
printf("\n============================\nnumbers tests\n============================\n");
RUN_TEST(TEST_CREATE_STACK);
RUN_TEST(TEST_STACK_POP);
RUN_TEST(TEST_STACK_PUSH);
RUN_TEST(TEST_ZERO_DUPLICATE);
RUN_TEST(TEST_ONE_DUPLICATE);
//RUN_TEST();
return UNITY_END();
}
}
//Befehl zum Kompilieren: gcc numbers.h numbers.c numbersTests.c bintree.h bintree.c unity/unity.c