From d391d60597b3c05415de2cbdc1c69daa77408ef6 Mon Sep 17 00:00:00 2001 From: Florian Wetzel Date: Fri, 12 Dec 2025 21:37:00 +0100 Subject: [PATCH] Anpassungen in numbers.c und in den entsprechenden Tests --- bintree.o | Bin 2656 -> 2712 bytes highscores.txt | 2 ++ numbers.c | 74 +++++++++++++++++++++++++------------------------ numbers.o | Bin 2048 -> 2072 bytes test_numbers.c | 64 +++++++++++++----------------------------- 5 files changed, 60 insertions(+), 80 deletions(-) diff --git a/bintree.o b/bintree.o index 1b425843d25b868272a0de6e535129507023a6d1..8515a537d5a4df30f6d7c8a928c3dc3c87fd147c 100644 GIT binary patch delta 646 zcmZ{hJxc>Y5QcYe^C@CHJ;7j+*jNZhQV4;77$Kbj6Sc5Yv`J}U8Bnn>MT#8Tq!A)0 zoWvp_Cm68s2Uwh#B6b!Q7B+TC=ew5)f*%7r?>sZJd&AtTQJbk|^q!x2*5gBUt-^|a zk#a-)VJ=&y7oZ8C)#soTcWpoe_t-rq&pFUZ6q>}B&?#`8xHi<~3UQhA7&?Z&67iwr zp|g3H{&)*xPoOg5hGKlWDX&9`JqMApG)@FVWQh-mi^S)|dAy{of}{Go#EZnEW$qIv KeeHC3fqwx>VP_El delta 607 zcmY+BK}!Nr5XawhO?N{w&C2MIK|utI27wes1`$Oz(BKz{RkGYd1LGulgB=VHwP=EW=b>DYT~v6JB6 zV*sgT-)FgFzwJ&`sgk1hLWnU99dlxxXAMhdYy{SH&v=3_a`uF_#8)`?-D0dm`7?5q z@E*nc`BZ-!c}qL&%Y0KTXpIMuHCkek$6baU&_GLNtU8 zyCt(ci^zEpGolhs>LhuuRQqRLvW!>jlhvfvd$0&&W(SOdH^efCmCX_u28+ZLh~>=> zj1mJIAa=~xz+rfm{1}YG%j6}Wt3~pH&vy%i#^Ct;Hx7JvuMC6#0Lw;J AegFUf diff --git a/highscores.txt b/highscores.txt index 4edd5a7..9a6b2a2 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1 +1,3 @@ +àoï;0 +test;9238 player1;3999 diff --git a/numbers.c b/numbers.c index ec96255..f41573a 100644 --- a/numbers.c +++ b/numbers.c @@ -23,13 +23,21 @@ static int compareUInt(const void *a, const void *b) if (A > B) return 1; return 0; } -// Sortiervergleich für qsort -int compareQsort(const void *a, const void *b) + +static int existsInTree(TreeNode *root, unsigned int value) { - unsigned int A = *(const unsigned int*)a; - unsigned int B = *(const unsigned int*)b; - if (A < B) return -1; - if (A > B) return +1; + if (!root) return 0; + + unsigned int *data; + + // Traversierung initialisieren + nextTreeData(root); + + while ((data = nextTreeData(NULL)) != NULL) + { + if (*data == value) + return 1; + } return 0; } @@ -39,56 +47,50 @@ unsigned int *createNumbers(unsigned int len) srand((unsigned int)time(NULL)); - // Speicher für das Array unsigned int *numbers = malloc(sizeof(unsigned int) * len); if (!numbers) return NULL; - TreeNode *root = NULL; // Baumwurzel + TreeNode *root = NULL; unsigned int value; - int isDuplicate; - //Array mit eindeutigen Zufallszahlen füllen + // Array mit eindeutigen Zufallszahlen füllen for (unsigned int i = 0; i < len; i++) { - while (1) + do { - value = (rand() % (2 * len)) + 1; // Zufallszahl 1..2*len - isDuplicate = 0; - - TreeNode *newRoot = addToTree( - root, - &value, - sizeof(unsigned int), - compareUInt, - &isDuplicate - ); - - if (!isDuplicate) - { - // Neue Zahl - akzeptieren - root = newRoot; - numbers[i] = value; - break; - } - // Sonst neue Zahl generieren + value = (rand() % (2 * len)) + 1; } + while (existsInTree(root, value)); + + // Baum wie highscore benutzen (immer NULL) + root = addToTree( + root, + &value, + sizeof(unsigned int), + compareUInt, + NULL + ); + + numbers[i] = value; } - //genau eine Zufallszahl duplizieren + // genau eine Zufallszahl duplizieren unsigned int idx1 = rand() % len; - unsigned int idx2 = rand() % len; + unsigned int idx2; - while (idx2 == idx1) + do + { idx2 = rand() % len; + } + while (idx2 == idx1); numbers[idx2] = numbers[idx1]; - // Baum wieder freigeben clearTree(root); - 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) { @@ -101,7 +103,7 @@ unsigned int getDuplicate(const unsigned int numbers[], unsigned int len) memcpy(copy, numbers, len * sizeof(unsigned int)); // Sortieren - qsort(copy, len, sizeof(unsigned int), compareQsort); + qsort(copy, len, sizeof(unsigned int), compareUInt); // Doppelte Zahl finden unsigned int duplicate = 0; diff --git a/numbers.o b/numbers.o index bd2248ec86f177c6ea314a4e4afaa90f9e844085..61da6c8b9ccf667c032194d567c2d0da93e1a69c 100644 GIT binary patch delta 963 zcmZWnO=uHA6n>jcnxtF1iKc2%SfPsbCtxi?1w$88q(To>Tg8K{Y0aUS#?s`FkVAq| z=^=+MlY`#sL2Qo22-#Bu@z{fU5W!1&OFVjNz;yj)cSBnoc=Nr#dGC8OQwY2btgFEZ zH(6^$<^&3MoK(FXy%d0v@e*wSCCDsP`Xoi(D*U=!LdDtpsFQ=$&U;J%im z8kMM4^9lav3oPrp@}wo(k*1_}c4gH-qw>>z^9IkheB-3Qq{4SFUtc8B-OzbX6IId8 zXrtqAR2|J;uJt*k^rOsv;M?T6VQOzx_5i==Y~yI_x*4rXpBwIPQ&uf=PS&3L-p6sc1X zsA`cA)s9cF=o|bp-V<5mMyYUr6Gd?Gp+Ba1Y8$#mq@mTix!V;G`1DcS5^k2@#d4nC z(yh($6JCL@|KcI0dlaF>wmeF{j7#+sg--(qfFU4WdnRCGL$ z3MzZ-RoENvgGfBHluD=WCg)b;ane$&vE(z-?0q?wNW54iEg8?Gd3Y+8j!`1LyfS9( G82KNbhR>S- delta 843 zcmY*XO=uHQ5T2J!y1N=}W1|5BZY6<6CD8f<6)Y~qLk~q-s27FC5DS*3TCE2|kj6%# z;-$+I>>-CJ6*iy;5g`kL7Y_;^)SKX;g&wxvg#--i_x1;yVfTIW_r96g*^Pnfz`7or z2$L&o%)<#|`r_eF(tl?N>bD3{%y@Ms_Sp|qy*N!7ySWqnFmB338^HZ|r~IJE4c~Yf$g3QuPNKS}zhA z=;zs%OdUI^TNy^@TozgH*kH9au%Y5_ux839TlfU=9mh!om6Qm@Y*hZqpM;X!3}vnz zXI|HW)$K$1a#VSsCKXZ^Y>BKtxGiSbm32!g&$nE5$zvCtiF+b$Vro&PQOmcxl}k-0 z$KE}c-m>%ekwHTwmeC`wAD-8^1@V{Z>h6)|4^OlaO(!;y>qcpD%~zp>E7bfsC$lp!