Info2P5/modus.c
2025-04-11 07:32:46 +02:00

83 lines
2.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void randomnumbergenerator(int *randomnumbers, int length);
int comp(const void* a,const void* b);
int findMostFrequent(int randomnumbers[], int n);
int counted = 0;
int main() {
int length = 0;
int validInput = 0;
while (!validInput) {
printf("Wieviele Zufallswerte (1..10000): ");
scanf("%d", &length);
while (getchar() != '\n'); // Eingabepuffer leeren
if (length <= 0 || length > 10000) {
printf("Ungueltige Eingabe. Bitte geben Sie eine Zahl zwischen 1 und 10000 ein.\n");
} else {
validInput = 1;
}
}
int randomnumbers[length]; // Array für die Zufallszahlen
// Zufallszahlengenerator initialisieren
srand(time(NULL));
// Zufallszahlen erstellen
randomnumbergenerator(randomnumbers, length);
printf("Erzeugte Zufallszahlen: \n");
for (int i = 0; i < length; i++) {
printf("%d ", randomnumbers[i]);
}
qsort(randomnumbers, length, sizeof(int), comp); // array, die Länge, Bits, vergleichsfunktion
printf("\nSortierte Zufallszahlen: \n");
for (int i = 0; i < length; i++) {
printf("%d ", randomnumbers[i]);
}
int result = findMostFrequent(randomnumbers, length);
printf("\nModus: %d\nHaeufigkeit: %d\n", result, counted);
return 0;
}
void randomnumbergenerator(int *randomnumbers, int length) { // Zeiger, da man keinen neuen Speicher erstellen will sondern direkt auf die Stellen von randomnumbers zugreifen möchte
for (int i = 0; i < length; i++) {
*(randomnumbers + i) = rand() % 99 + 1; // randomnumbers bekommt an jede i´te Stelle eine Zufallszahl
}
}
int comp(const void* a,const void* b) { // 1. Zahl und 2. Zahl
return *(int*)a - *(int*)b; // >0 wenn a größer b, <0 wenn b größer a, =0 wenn a gleich b
}
int findMostFrequent(int randomnumbers[], int n) {
int maxCount = 0;
int mostFrequent = randomnumbers[0];
for (int i = 0; i < n; i++) {
int count = 0;
for (int j = 0; j < n; j++) {
if (randomnumbers[j] == randomnumbers[i]) { // wenn Zahlen gleich geht count hoch
count++;
}
}
if (count > maxCount) {
maxCount = count;
mostFrequent = randomnumbers[i];
}
}
counted = maxCount;
return mostFrequent;
}