info1_uebungen/09/suche/zaehleVorkommen.c
2026-06-18 09:03:11 +02:00

77 lines
2.5 KiB
C

/**************************************************************
* Das untenstehende Programm soll ein Array mit Zufallswerten
* belegen, das Array aufsteigend sortieren und anschließend
* ermitteln, wie häufig ein einzugebender Wert im Array vorkommt.
* Die Häufigkeit soll einmal naiv ermittelt werden und einmal
* durch Verwendung Ihrer Implementierung für die binäre Suche.
* Das Programm vergleicht anschließend die benötigten Laufzeiten
* für beide Implementierungen.
*
* 1. Implementieren Sie zunächst die Sortierung des Zufallsarrays.
* (Die Funktionsaufrufe zur Ermittlung der Vorkommenszahlen müssen
* dafür auskommentiert werden.)
* 2. Implementieren Sie nun die naive Ermittlung der Anzahl an
* Vorkommen (ohne Binärsuche).
* 3. Implementieren Sie nun die Ermittlung der Anzahl an Vorkommen
* unter Verwendung Ihrer Implementierung der Binärsuche.
*
***************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "../utils/zufallsarray.h"
#include "../utils/stoppuhr.h"
#include "../utils/zahlenEingabe.h"
#include "suche.h"
#define MAX_ANZAHL 500000
#define ANZAHL MAX_ANZAHL
#define MAX ((int)(ANZAHL * 0.2))
#define MIN (-MAX)
#define MAX_100(n) ((n) < 100 ? n : 100)
int zaehleVorkommenNaiv(int suchElem, int array[], int anzahl);
int zaehleVorkommenBs(int suchElem, int array[], int anzahl);
int vergleiche(const void *arg1, const void *arg2);
void gibArrayAus(int array[], int anzahl);
int main()
{
int suchZahl, anzahlVorkommen;
int zufallszahlen[ANZAHL];
srand(0);
fuelleArray(zufallszahlen, ANZAHL, MIN, MAX);
// TODO: Sortierung mit qsort
gibArrayAus(zufallszahlen, MAX_100(ANZAHL));
printf("Welche Zahl soll gesucht werden? ");
suchZahl = gibZahlEin();
printf("Zaehle naiv:\n");
starteUhr();
anzahlVorkommen = zaehleVorkommenNaiv(suchZahl, zufallszahlen, ANZAHL);
printf("Die Zahl %d ist %dx enthalten. (%lf Sekunden)\n", suchZahl, anzahlVorkommen, messeZeitInSek());
printf("Zaehle mit Binaersuche:\n");
starteUhr();
anzahlVorkommen = zaehleVorkommenBs(suchZahl, zufallszahlen, ANZAHL);
printf("Die Zahl %d ist %dx enthalten. (%lf Sekunden)\n", suchZahl, anzahlVorkommen, messeZeitInSek());
return 0;
}
void gibArrayAus(int array[], int anzahl)
{
printf("Die ersten %d Zufallszahlen: ", anzahl);
for(int i = 0; i < anzahl; i++)
{
printf(" %4d", array[i]);
}
printf("\n");
}