From 16f3961eb4ad6a77097331c287ad1f2babc6251c Mon Sep 17 00:00:00 2001 From: Kristin Date: Mon, 15 Dec 2025 16:28:23 +0100 Subject: [PATCH] =?UTF-8?q?unn=C3=B6tige=20Bedingung=20entfernt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- highscores.txt | 3 +++ numbers.c | 30 ++++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/highscores.txt b/highscores.txt index e69de29..63a5728 100644 --- a/highscores.txt +++ b/highscores.txt @@ -0,0 +1,3 @@ +krisp3;6987 +krisp2;4985 +krisp;3991 diff --git a/numbers.c b/numbers.c index 97f526c..d02217d 100644 --- a/numbers.c +++ b/numbers.c @@ -16,13 +16,15 @@ // implementation of the binary search tree to check for possible duplicates // while creating random numbers. +// typedef int (*CompareFctType)(const void *arg1, const void *arg2); // vergleicht zwei Werte: ab: 1 a=b: 0 int compareUnsignedInt(const void *a, const void *b) { unsigned int x = *(unsigned int *)a; unsigned int y = *(unsigned int *)b; return (x < y) ? -1 : (x > y); } - +// numbers = createNumbers(numberOfElements); +// es wird die angefragte Länge des Arrays übergeben unsigned int *createNumbers(unsigned int len) { if (len < 2) // Duplikat bei einem Eintrag sinnlos return NULL; @@ -30,13 +32,19 @@ unsigned int *createNumbers(unsigned int len) { unsigned int *numbersArray = malloc( sizeof(unsigned int) * len); // Speicher für das Ausgabearray reservieren: // Größe eines Eintrags * Größe des Arrays - if (!numbersArray) // Speicher konnte nicht reserviert werden + if (numbersArray == NULL) // Speicher konnte nicht reserviert werden return NULL; + /*typedef struct node { + void *data; + struct node *left; + struct node *right; + } TreeNode;*/ + TreeNode *root = NULL; // Binärbaum zum Generieren der Zufallszahlen ohne Duplikate - for (unsigned int i = 0; i < len; i++) { + for (unsigned int i = 0; i < len; i++) { // angefordertes Array füllen unsigned int currentNumber; int isDuplicate; do { // mindestens eine Zufallszahl erzeugen @@ -48,7 +56,10 @@ unsigned int *createNumbers(unsigned int len) { // bei Vergleichen übergeben } while (isDuplicate); // wenn isDuplicate gesetzt wird, muss eine neue Zahl // erzeugt werden, die Schleife wird wiederholt - numbersArray[i] = currentNumber; + numbersArray[i] = + currentNumber; // Schleife konnte verlassen werden -> kein Duplikat + // gefunden, Zahl für den aktuellen Iterationsschritt + // wird im Array gespeichert } // Ein zufälliges Duplikat erzeugen @@ -63,8 +74,9 @@ unsigned int *createNumbers(unsigned int len) { numbersArray[newIndex] = numbersArray[duplicateIndex]; // Wert vom ersten Index kopieren - clearTree(&root); // Speicher wieder freigeben, wird nicht mehr benötigt - return numbersArray; + clearTree(&root); // Speicher wieder freigeben, wird nicht mehr benötigt + return numbersArray; // numbers wird zum pointer auf in der Funktion + // erstelltes Array } // Returns only the only number in numbers which is present twice. Returns zero @@ -72,13 +84,15 @@ unsigned int *createNumbers(unsigned int len) { unsigned int getDuplicate( const unsigned int *numbers, unsigned int len) { // array numbers, sowie die Länge wird übergeben + if (!numbers || len < 2) return 0; // fehlerhaftes Array TreeNode *root = NULL; // leerer Baum unsigned int duplicateValue = 0; // Wert des Duplikats - for (unsigned int i = 0; i < len && duplicateValue == 0; i++) { // Schleife + for (unsigned int i = 0; i < len && duplicateValue == 0; + i++) { // Schleife bricht ab, sobald das Duplikat gefunden wurde int isDuplicate = 0; // Zahl in den Baum einfügen @@ -86,7 +100,7 @@ unsigned int getDuplicate( compareUnsignedInt, &isDuplicate); // Duplikat erkannt - if (isDuplicate && duplicateValue == 0) { + if (isDuplicate == 1) { duplicateValue = numbers[i]; // Duplikat merken, for-Schleife wird beendet } }