generated from freudenreichan/info2Praktikum-DobleSpiel
numbers.c korrektur(final) numbersTests.c fertig bintree.c/.h vergleichsfunktion änderungen
This commit is contained in:
parent
2ae4ca5cbe
commit
7b33c465a7
10
bintree.c
10
bintree.c
@ -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;
|
||||
}
|
||||
@ -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
|
||||
50
numbers.c
50
numbers.c
@ -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;
|
||||
}
|
||||
@ -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
|
||||
Loading…
x
Reference in New Issue
Block a user