From 4473f64904831047d6d6502051079ac48fa4dcd4 Mon Sep 17 00:00:00 2001 From: Bienert Date: Thu, 27 Nov 2025 15:27:58 +0100 Subject: [PATCH] =?UTF-8?q?K=C3=B6nnte=20fertig=20sein?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Double | 1 + bintree.c | 61 ++++++++++++++++++++++++++++++++++-- bintree.o | Bin 0 -> 2134 bytes doble.exe | Bin 0 -> 147104 bytes highscore.o | Bin 0 -> 3713 bytes highscores.txt | 3 ++ main.o | Bin 0 -> 2564 bytes numbers.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++--- numbers.o | Bin 0 -> 2176 bytes stack.c | 26 ++++++++++------ stack.h | 4 +++ stack.o | Bin 0 -> 1205 bytes timer.o | Bin 0 -> 1117 bytes 13 files changed, 161 insertions(+), 17 deletions(-) create mode 160000 Double create mode 100644 bintree.o create mode 100644 doble.exe create mode 100644 highscore.o create mode 100644 main.o create mode 100644 numbers.o create mode 100644 stack.o create mode 100644 timer.o diff --git a/Double b/Double new file mode 160000 index 0000000..92bb8b7 --- /dev/null +++ b/Double @@ -0,0 +1 @@ +Subproject commit 92bb8b73d30806f24e365607346c2fa96a54d850 diff --git a/bintree.c b/bintree.c index 5cf82a9..638f8e5 100644 --- a/bintree.c +++ b/bintree.c @@ -1,3 +1,4 @@ +#include #include #include "stack.h" #include "bintree.h" @@ -12,7 +13,32 @@ // if isDuplicate is NULL, otherwise ignores duplicates and sets isDuplicate to 1 (or to 0 if a new entry is added). TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFctType compareFct, int *isDuplicate) { + if (root == NULL) { + TreeNode *node = (TreeNode *)malloc(sizeof(TreeNode)); + if (node == NULL) return NULL; + node->data = malloc(dataSize); + if (node->data == NULL) { free(node); return NULL; } + memcpy(node->data, data, dataSize); + node->left = node->right = NULL; + if (isDuplicate) *isDuplicate = 0; + return node; + } + int cmp = compareFct(data, root->data); + if (cmp < 0) { + root->left = addToTree(root->left, data, dataSize, compareFct, isDuplicate); + } else if (cmp > 0) { + root->right = addToTree(root->right, data, dataSize, compareFct, isDuplicate); + } else { // cmp == 0 -> duplicate + if (isDuplicate) { + *isDuplicate = 1; + return root; + } else { + // accept duplicates when isDuplicate == NULL: insert to the right subtree + root->right = addToTree(root->right, data, dataSize, compareFct, NULL); + } + } + 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. @@ -20,17 +46,48 @@ TreeNode *addToTree(TreeNode *root, const void *data, size_t dataSize, CompareFc // push the top node and push all its left nodes. void *nextTreeData(TreeNode *root) { + static StackNode *iterStack = NULL; + if (root != NULL) { + // (re)initialize iterator for new tree + clearStack(iterStack); + iterStack = NULL; + TreeNode *cur = root; + while (cur != NULL) { + iterStack = push(iterStack, cur); + cur = cur->left; + } + } + + if (iterStack == NULL) return NULL; + + TreeNode *node = (TreeNode *)top(iterStack); + iterStack = pop(iterStack); + void *ret = node->data; + + // push right subtree (and all its left descendants) + TreeNode *cur = node->right; + while (cur != NULL) { + iterStack = push(iterStack, cur); + cur = cur->left; + } + + return ret; } // Releases all memory resources (including data copies). void clearTree(TreeNode *root) { - + if (root == NULL) return; + clearTree(root->left); + clearTree(root->right); + free(root->data); + free(root); } // Returns the number of entries in the tree given by root. unsigned int treeSize(const TreeNode *root) { - + if (root == NULL) return 0; + return 1 + treeSize(root->left) + treeSize(root->right); } \ No newline at end of file diff --git a/bintree.o b/bintree.o new file mode 100644 index 0000000000000000000000000000000000000000..5d9c075cfc6a4cb3b3efe04744e36600e698f82f GIT binary patch literal 2134 zcmZ`*--{bn6h5<=Z9^+I54NtYltI>-Vx7iN5u}B2yFis^_zCfR|1GZ0w5oD`915dC4w^+8M)l`h*$m7tQ~Jr6om+O!u}R+73* za-r~-%)2@6FbCbdiW!?YlymInBrgE(+iA&q0Tc61o{FvH%>KTa@KW(uKe6~bcH>#S$!!0qo~_Tvm*J$B=T?f{AbwfFtN>n9(fGG63bUf5NHpRgQw zVMa_5dAB#)hond{q@5-01|Aqu(ek2&nGeEWwHJ1=?TAuIKPBleETs`XN5MXbbK9H( zhaWt-CjnSYoGCHZgNbSpN>{IAj7U879@yv&U=KyKI}=a%Wet3tyIvQoSCw&!OpFsK-I)y`W9U&5sG zvvX-{tUuh7;6pDGz1G#*p57UaM(j+Oh3>F_EapTDL(L1NS>z765a{I)2@k1#KPIDB zdqscxE3ruT)$L7)Vt3H+$#{(DfDS6?4w4z*IK-zTHW{c4)M-KnFi-9mEx~yd`#mFe zB{J^z9$}|yjX2%jZ+eXsR21&C!hK@{ZY`9tj6xFp@) zeK-ualtlRHLSj7VY#Q*C{p8Zt#@H~@sp)jfOc^Dj37l8*{pRcYQ+wv7a?B$7n$L!s zH>QaAo8|d$Jp8TkoX79ZEbzIrXWz537yKLf6V_b2Ru8PjRjXM3xSY3|t;T15H8^g) zeag<;Igl}q<9P{>N#`}H1M%;cNgH?{66ky6z;R8w3-q!;zi8P*js61SoJ{&h%l4|A zO**X6Ye26E-dkGs4$xsCJFR7(YIF@qdTwah??5ushZ?~FrSYVYLyUO+qLA?(q&A}w z?_X-!ztp~}k)^dM27VuLLc56Y+N~Ioyx&aat|;u1y(ljw`WRuGH&|YAi+#=?eB9uZdW) z>@QcFtFeqFJkG@e!D+Tvu4#dg1dZmdKyoG|7r?Mve5cN?t*udIY3X9)BFDdu{{al< c`JS%@eybc*s-NRCtJeKWOHdMaLMRyYA75swF8}}l literal 0 HcmV?d00001 diff --git a/doble.exe b/doble.exe new file mode 100644 index 0000000000000000000000000000000000000000..6120469cf37c0435c32faf43881411a34ca3e8b6 GIT binary patch literal 147104 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 Gu>S!SW!_!@ literal 0 HcmV?d00001 diff --git a/highscore.o b/highscore.o new file mode 100644 index 0000000000000000000000000000000000000000..ffbf6b0ce497d506b63d0dff58e0b5554a4d8dcf GIT binary patch literal 3713 zcmc&%Z){Ul6u*zQFqo!Q!3+?1NT*{Pbxtru)U>h}E{4U*)&$}RD{c2j%G$IY3}iu4 zW_)>RBue5J6B7O67yMviGKePKm<}R|CGG=>nk*)m3K*8Tn0=Vw@7(v^?JHR{e&QzY zo!|YPbI(2Z+;eYVScU9uahcGv~of~VRz$XbGdbhTYKO!h5h%#AfrtHUGgGSzlr ztYH*(&W8Ac&uw)wjJ2R!W3AQJkX?l9H+lX}kn8O}u1D&)p+Rahkadt{$g&Y$2{B^? zS8g8HBMbTA1vdBuHzK5*;rdva9O~MFp)K(IMDW1n2c5R*n#w1&X|jV9_LJHSbq!6` zwK<+2u4B11@L9(T+H`1iC0SaYztjF?+(3ASHZ5k=6|TQoV@@6-+E$)E99VnLH!K5Nc+9#hCrv#dbuoj4+^C+)r zBQj-ZQ@i!6Asy!MyGr;qt9uU}gZ7dk(qHC!r+>Ql16oY%3Rp^J1DXsg7TD0l+@$7@xU&F8f_B|kj3{M0g0v4iK% zBFjT>$*m2FTY%0}Vb!b7Y3L#lrFnRfy(zlyNoD(GJz$BOAH)lIA$xrdL z0h9b555i>`wnNO*P>L9{IosWGnZR(Gjf?NE2BZ>W1!P3>S!^^JkXY|{#MQh@rb z5GT=B>$fy!Rfxv8ivBTHpWRU(w|*~K@Ppv4ojYGr8}=rSwl=G;4fZE<>Y?Lmd&mBc zRyCbTy`6~VHmlEX4YUSY%ynxJYw)<)dA!#O^fTU13bYM7Yob?xo)X+a$@K!Q6I@1e zrzH0|(0ZYr0P+d+8_))U{*YXaRXJ|94rrs$_5+zC3?OsFhmyMhWJWbA(PfE#0eV_^ z`3uPOat~;e;MThAv73PWg6oo8Tyn#b8)P4+P=H&vAIrb}{XN29?l0#RVO&504M)dRXI3AbK(8+ZP z4<@4P)zs2CHaUvYM5@&KCD$NPv(&aoZmUFe=1tEpOD-r;o78g2?U5)fwVjgNCsCKw z273CF3G}Gl!>!n>^!4}lWn-yKA`mla@%CC6+k(|oqpGE*FqOGbiHo&uAnC>vHp1X_ zysuR;`_ZG@k8Dt4XnlC-4y-VPVCW{SFlWHfeOO^W0zk6cPO-c&J_7I1u{)2BK8>{PTB^qB?e z--=6Vswga!&1GUo(l$+51v3y!AGauCdQ$1cfNdf&51U--uuWN`a;c<~A^e3+h*3Sg ziCpCmjqn^xrm}WP*`AY?$;gJf2yFm=DhagFpGGl4(Ek80RqP`G literal 0 HcmV?d00001 diff --git a/highscores.txt b/highscores.txt index 4edd5a7..b89d2a8 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1 +1,4 @@ +player_name;11898 +Test;9953 +player_name;9927 player1;3999 diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..93deeece68ee40d0b661aa3fa5d5040c41645e5e GIT binary patch literal 2564 zcmZuzO>7%Q6rQ!+Hl#qJs)Z2#28czXwu>93J){(wmW4$kRTN_?eu}eMkL@Mv^=g0O zG*Y0*D$>e|lmmwzkT`JQSczK^hmaP9Ly>&UArg@gQcysuI3ORQhWBQ?n@yZ2?aVjd z`{uowx8qqCzdA?d9x;^Jz<2w~dOO=U;DtuCFs#k1iW zq*jygb@avb4P{3H=|yG0`R#5mIC%QyPR1PUrlKyHL({@@X?!pluYLoAAw*{+tH&}GHft+WD5Oya- zo`+cHbV=>|d<9asVsk)70%fDAtY1_%d<8uJ_Vp_*2)XrU&?@x}{~A_1P#!e%4?=G% z^5WZG?qtJg+k?$K#sdL=1DHCD0bw78SgiCQ(Rru%MjQ7lA78(>+_AJv(muKBS7(^x zjuVwX`aGqnA{Sa>dna4s&I%^Xt84Fgj;2lhKc~ipebM z)=ccmY=IeNkJgz}WY##vEudXvrd|?k@?<=Y+}>kG5jJAD9;z%u zuXtf}nNH!*DAT&e9EScft238bFkR|N9_g7%C8bHSA0JP#Gd<1(O^IJyexWsY)yUf~EDf)`j4Vuz>)(370QOv2kAA>6C*V(o+%_aG3B zymHAf8H~^#?GjR!s+wWRx?uKNybjSMSZ@OMd6;3f@RV>3!8oYGGa{Jy7ZF1wB|JM= zyFH744Z#VTJzt38UqZOp4%fuKf>^VpM7tuzzkqlrC#9h%q@k+Bb_~lag(75JU9%#BYs$>iE1J_0@mc;srnD~*YS7fq z9FYqLA9OKV7c<+%%y%)jx|pxKnD4rnANDb;FcSYGC;hj&+ XnzlD`dE&?kLv4=5hPuf#CpP{c&)@Y= literal 0 HcmV?d00001 diff --git a/numbers.c b/numbers.c index f59d9a2..26c5c7d 100644 --- a/numbers.c +++ b/numbers.c @@ -5,22 +5,95 @@ #include "numbers.h" #include "bintree.h" -//TODO: getDuplicate und createNumbers implementieren -/* * * Erzeugen eines Arrays mit der vom Nutzer eingegebenen Anzahl an Zufallszahlen. - * Sicherstellen, dass beim Befüllen keine Duplikate entstehen. - * Duplizieren eines zufälligen Eintrags im Array. - * in `getDuplicate()`: Sortieren des Arrays und Erkennen der doppelten Zahl durch Vergleich benachbarter Elemente. */ +static int compareUnsigned(const void *a, const void *b) +{ + unsigned int va = *(const unsigned int *)a; + unsigned int vb = *(const unsigned int *)b; + if (va < vb) return -1; + if (va > vb) return 1; + return 0; +} // 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 // creating random numbers. unsigned int *createNumbers(unsigned int len) { + if (len < 2) return NULL; + unsigned int *arr = (unsigned int *)malloc(len * sizeof(unsigned int)); + if (arr == NULL) return NULL; + + TreeNode *root = NULL; + /* create len-1 unique values in range [1, 2*len] */ + srand((unsigned int)time(NULL)); + + while (treeSize(root) < len - 1) { + unsigned int v = (unsigned int)(rand() % (2 * len)) + 1; + int isDup = 0; + TreeNode *newRoot = addToTree(root, &v, sizeof(unsigned int), compareUnsigned, &isDup); + if (newRoot == NULL && root != NULL) { // allocation failed + clearTree(root); + free(arr); + return NULL; + } + root = newRoot; + /* if duplicate, addToTree left tree unchanged; loop continues */ + } + + /* extract values from tree (in-order) into arr[0..len-2] */ + unsigned int idx = 0; + void *data = nextTreeData(root); // initializes iterator + while (data != NULL && idx < len - 1) { + arr[idx++] = *(unsigned int *)data; + data = nextTreeData(NULL); + } + + if (idx != len - 1) { + clearTree(root); + free(arr); + return NULL; + } + + /* pick a random existing index and duplicate it */ + unsigned int dupIndex = (unsigned int)(rand() % (len - 1)); + arr[len - 1] = arr[dupIndex]; + + /* free tree memory */ + clearTree(root); + + /* shuffle array */ + for (unsigned int i = len - 1; i > 0; --i) { + unsigned int j = (unsigned int)(rand() % (i + 1)); + unsigned int tmp = arr[i]; + arr[i] = arr[j]; + arr[j] = tmp; + } + + return arr; } // 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 == NULL || len < 2) return 0; + TreeNode *root = NULL; + for (unsigned int i = 0; i < len; ++i) { + unsigned int v = numbers[i]; + int isDup = 0; + TreeNode *newRoot = addToTree(root, &v, sizeof(unsigned int), compareUnsigned, &isDup); + if (newRoot == NULL && root != NULL) { // allocation failed + clearTree(root); + return 0; + } + root = newRoot; + if (isDup) { + clearTree(root); + return v; + } + } + + clearTree(root); + return 0; } \ No newline at end of file diff --git a/numbers.o b/numbers.o new file mode 100644 index 0000000000000000000000000000000000000000..fa6b51a833b9e797a0aeb65130958933639358d5 GIT binary patch literal 2176 zcmai0-)kII6uz^&sZlH0w$ZM&;%FmS)NPDGNb{1|TpY2{#dIEu7TxSl!^-}MyR%vY zfzYwaFpLyI@U1@h;vXPHEoIvVHb@_~QY6%uJgl&B^I~1-J_O@;?wy^TZ5F&RcfNbh zcg{WM+_Q5x{lz{;V;rxi1d6b@XBtB&18Vr4^FW} zB|cv&_0t7qE5y6d>u>~w?;}ALV^eH&D!#avw+`N2FTRIiLc9~>y|$xRZtwAzn9?=- zPtDqnYW6H1J*GK4>M)z{0K^Ei9lkTk+ogwAcQKm7SWbu~io%)$tF(<~twqn>l&;oR z;K^E!DxW?gbX#wR7=u&o`esP8uQvqW<{O%|yur#I=Xr3nDsPkWCz=G!V{bWK0UXV^ z!^~d)nOM{J@7cHQb*rM-{A!iUSX})oVsC5i?5bv;9#K!bj~zzj)2ozyAc6`asIc;J zyxPosPS|wfa}b}0WfGqwTQDjb3KC>Gder($nWzn2d=Gn6d5gjd5@671jyk;MCKOw5 z*%i$lzT}ZMH01`k4U{?5&6+F_Q-hh0B3rAWOz>9mnh*ak(z|djt9Ju7uC{B}M6K@s zZR>X&ey4Z;noPj{O>_5uBg4`W)~^&&Fb%oA&FjsQ@4W76O2B!|;q?cdqknEWy!N12 z2XW7Kdw7WdmL0Nkb;Vk)v+|dS2VJwh(&@DA1T`)7EZU8k`>f@d-*ngL7`%q^PG!r5 z3hXG&Z;IqyL?(M@v(r0&?DXj!c|heOvUd&zD<%4+ISo;Rn#JLpmn!Cg zAOm%3K5Oxof?y_jZ0O=5eQd2I&fUDM42A~=4@SaDf-!;b1@PArQ|NEeghB5g z@oU=ey|3W=6$5_b)Txu|3-21AjJ>43Ue07qb^bGTcJA!ln7UXjd}O4|IxpfNMU0p6 z(CJA@@Gc@3VTDeUPNh47_YnE$w^#5Ef`k5?!2Lrt3o9etO*|C5d+5569J+CO$4PG~ zs;Io!tHkO9Gm|r3>t0YHmP=-{1;2n)jZ!h0Py3c6=@Ix9<2@W&ywf8&Uo<+$1v&XK zA(_i8dD2eh&-Pkj6))0FJF>L2#8QRaVzOxH`BG*fZ=_kOXe3SJZF%r)!7yjai`h&H dvY=Hmojy}IL;I()MzSbS9{(-~%+SAw{{Ug1*g^mR literal 0 HcmV?d00001 diff --git a/stack.c b/stack.c index e3a90d4..6970da5 100644 --- a/stack.c +++ b/stack.c @@ -1,33 +1,39 @@ #include #include "stack.h" -//TODO: grundlegende Stackfunktionen implementieren: -/* * `push`: legt ein Element oben auf den Stack, - * `pop`: entfernt das oberste Element, - * `top`: liefert das oberste Element zurück, - * `clearStack`: gibt den gesamten Speicher frei. */ - // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data) { - + StackNode *node = (StackNode*)malloc(sizeof(StackNode)); + if (node == NULL) return stack; // allocation failed, return unchanged stack + node->data = data; + node->next = stack; + return node; } // Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be // freed by caller.) StackNode *pop(StackNode *stack) { - + if (stack == NULL) return NULL; + StackNode *next = stack->next; + free(stack); + return next; } // Returns the data of the top element. void *top(StackNode *stack) { - + return (stack != NULL) ? stack->data : NULL; } // Clears stack and releases all memory. void clearStack(StackNode *stack) { - + while (stack != NULL) + { + StackNode *next = stack->next; + free(stack); + stack = next; + } } \ No newline at end of file diff --git a/stack.h b/stack.h index f7d542d..8f8824b 100644 --- a/stack.h +++ b/stack.h @@ -8,6 +8,10 @@ The latest element is taken from the stack. */ #include //TODO: passenden Datentyp als struct anlegen +typedef struct StackNode { + void *data; + struct StackNode *next; +} StackNode; // Pushes data as pointer onto the stack. StackNode *push(StackNode *stack, void *data); diff --git a/stack.o b/stack.o new file mode 100644 index 0000000000000000000000000000000000000000..a4b3089dee7b2615d259d248918627d55eb135f6 GIT binary patch literal 1205 zcmaJ>L2DCH5T4C$+7%QR)DpCZcc@S?tTFV|)6!CW2MbF>4ju%z=~k;NS(1&^K%o#2 zmt67-y!J2XP0@=#!MlPG4<0<^q|W!=X1gn`1M}v4^Ua$#nYWX@R|^DLGKsD!WRaVM zhl#>^`N_sIh>k0I&!Hs9f8_23NuXWlt{(aC-Q9lw+<=TYM%-aJVV${Od~Z=aYIts3 zj%#p$;M(3~^!PZA-{&tm2b*XOlm`c000G-SH%$h2L1=P>&n5i;GH$r=D7tY(vJUlnqx;@PI%5XTOP80^c7J6Uw{sl2HuFe1e literal 0 HcmV?d00001 diff --git a/timer.o b/timer.o new file mode 100644 index 0000000000000000000000000000000000000000..248a165b8d3224fbe150478d13b515f8b714e491 GIT binary patch literal 1117 zcmZ`&O>0v@6ur|)G?kXufAzY=qF(MZp%+^i`ry5|XF1SxBH% zC@$Kc;llr5qy_aqxD^BoN>*JI<2^Ia*LkKMxc8lV@0pL>x!HJgk$`t2L{|*UkdA__ z$Z+er{FxC%*H{DO*c4Ts=#6SrHJSfApDI1Q-fp{!2{(v&7rL$VhErU7&*!@EDevp% zudGA|!=U9D*d@l=sP~JIGtA}wV zZz`MK&tBiV(|c#30>3*Acji%*0#l!cJMWk&t3ij( zpq*Jay%Xr-Fyf~r{OhH-J0z%ujoR}h%N?V89NFD(bUGbsN7YtTgsN@%GTwn{qiLC= F{R7q)hn@fc literal 0 HcmV?d00001