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){
|
int compareFct(const void *a, const void *b){
|
||||||
|
|
||||||
if(*a>*b)return -1;
|
unsigned int A = *(unsigned int *)a;
|
||||||
if(*b>*a)return 1;
|
unsigned int B = *(unsigned int *)b;
|
||||||
if(*a==*b)return 0;
|
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.
|
// Returns the number of entries in the tree given by root.
|
||||||
unsigned int treeSize(const TreeNode *root);
|
unsigned int treeSize(const TreeNode *root);
|
||||||
|
|
||||||
|
int compareFct(const void *a, const void *b);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
50
numbers.c
50
numbers.c
@ -19,33 +19,41 @@ unsigned int *createNumbers(unsigned int len)
|
|||||||
srand(time(NULL));
|
srand(time(NULL));
|
||||||
unsigned int* numbers =malloc(sizeof(unsigned int) * len);
|
unsigned int* numbers =malloc(sizeof(unsigned int) * len);
|
||||||
unsigned int numberTemp;
|
unsigned int numberTemp;
|
||||||
unsigned int* numbTempPtr = &numberTemp;
|
//unsigned int* numbTempPtr = &numberTemp;
|
||||||
int generated = 0;
|
int generated = 0;
|
||||||
int isDuplicate = 0;
|
int isDuplicate = 0;
|
||||||
TreeNode* root = NULL;
|
TreeNode* root = NULL;
|
||||||
|
|
||||||
|
if(numbers == NULL)return NULL;
|
||||||
|
|
||||||
while(genreated<len){
|
|
||||||
|
|
||||||
numberTemp = (rand() % 2*len)+1;
|
while(generated<len){
|
||||||
root = addToTree( root, numbTempPtr, sizeof(unsigned int), compareFct, isDuplicate );
|
|
||||||
|
numberTemp = (rand() % (2*len))+1;
|
||||||
|
|
||||||
|
isDuplicate = 0;
|
||||||
|
|
||||||
|
root = addToTree( root, &numberTemp, sizeof(unsigned int), compareFct, &isDuplicate );
|
||||||
|
|
||||||
if(!isDuplicate){
|
if(!isDuplicate){
|
||||||
|
|
||||||
numbers[genreated] = numberTemp;
|
numbers[generated] = numberTemp;
|
||||||
genreated++;
|
generated++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int DuplicateId;
|
int DuplicateId;
|
||||||
int DuplicatePlace;
|
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;
|
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.
|
// 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 getDuplicate(const unsigned int numbers[], unsigned int len)
|
||||||
{
|
{
|
||||||
unsigned int duplicate;
|
unsigned int duplicate = 0;
|
||||||
unsigned int duplicateId;
|
unsigned int* numbersCopy = malloc(sizeof(unsigned int) * len);
|
||||||
unsigned int duplicatePlace;
|
|
||||||
|
|
||||||
duplicateId = rand() % len;
|
if(numbersCopy == NULL)return 0;
|
||||||
duplicate = numbers[duplicateId];
|
|
||||||
|
|
||||||
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;
|
return duplicate;
|
||||||
}
|
}
|
||||||
@ -1,12 +1,30 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "unity/unity.h"
|
#include "unity/unity.h"
|
||||||
#include "numbers.h"
|
#include "numbers.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void setUp(void){}
|
void setUp(void){}
|
||||||
void tearDown(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(){
|
int main(){
|
||||||
@ -14,9 +32,10 @@ int main(){
|
|||||||
|
|
||||||
printf("\n============================\nnumbers tests\n============================\n");
|
printf("\n============================\nnumbers tests\n============================\n");
|
||||||
|
|
||||||
RUN_TEST(TEST_CREATE_STACK);
|
RUN_TEST(TEST_ZERO_DUPLICATE);
|
||||||
RUN_TEST(TEST_STACK_POP);
|
RUN_TEST(TEST_ONE_DUPLICATE);
|
||||||
RUN_TEST(TEST_STACK_PUSH);
|
//RUN_TEST();
|
||||||
|
|
||||||
return UNITY_END();
|
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