92 lines
3.0 KiB
C
92 lines
3.0 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
int kaeferIrrfahrt()
|
|
{
|
|
int a = 0; // Startposition 0
|
|
int strecke = 0; // zählt wie viele Schritte der Käfer macht (anfangs 0)
|
|
|
|
while (a != 3) // Solange Käfer nicht bei Position 3 (Ziel), wiederholt sich die Schleife --> Ziel erreicht, wenn a == 3
|
|
{
|
|
int richtung = rand() % 3; // Erzeugen einer Zufallszahl --> %3 teilt die Zahl durch 3 und nimmt den Rest (0,1 oder 2)
|
|
|
|
if (a == 0)
|
|
{
|
|
a = 1; //Wenn der Käfer bei 0 ist, kann er NUR zu 1 gehen
|
|
}
|
|
|
|
else if (a == 1) // Wenn er bei 1 ist, gibt es 2 Möglichkeiten:
|
|
{
|
|
if (richtung == 0) // Wenn richtung == 0, dann zurück nach 0
|
|
{
|
|
a = 0;
|
|
}
|
|
|
|
else
|
|
{
|
|
a = 2; // Wenn richtung == 1 oder 2, dann geht er nach 2
|
|
}
|
|
}
|
|
|
|
else if (a == 2) // Wenn er bei 2 ist, gibt es zwei Möglichkeiten:
|
|
{
|
|
if (richtung < 2) // Wenn richtung kleiner 2, dann zurück nach 1
|
|
{
|
|
a = 1;
|
|
}
|
|
|
|
else
|
|
{
|
|
a = 3; // Wenn richtung 2, geht er zum Ziel (Position 3)
|
|
}
|
|
}
|
|
|
|
strecke++; // Nach jedem Schritt zählt die Variable +1 dazu
|
|
}
|
|
|
|
return strecke; // Wenn Käfer am Ziel, geben wir zurück, wie viele Schritte er gebraucht hat
|
|
}
|
|
|
|
int main()
|
|
{
|
|
int anzahl; // Speichert, wie oft gelaufen werden soll
|
|
|
|
printf("Geben Sie die Anzahl der Irrfahrten ein: ");
|
|
scanf("%d", &anzahl);
|
|
|
|
srand(time(NULL)); // Sorgt dafür, dass bei jedem Neustart die Zufallszahlen anders sind
|
|
|
|
int haeufigkeit[100] = {0}; // Array mit 100 Zahlen (Weglänge 0-99) --> Alle beginnen bei 0
|
|
int summe = 0; // Wird später verwendet, um alle Weglängen zusammenzuzählen
|
|
|
|
for (int i = 0; i < anzahl; i++) // Wir wiederholen den Vorgang "anzahl"-mal
|
|
{
|
|
int weg = kaeferIrrfahrt(); // Funktion der Irrfahrt wird aufgerufen und Anzahl der Schritte in "weg" gespeichert
|
|
|
|
if (weg < 100) // Ist die Weglänge kleiner als 100, dann
|
|
{
|
|
haeufigkeit[weg]++; // Erhöhe die Anzahl für diese Weglänge um 1 --> damit man am Ende weiss, wie oft jede Weglänge vorkam
|
|
}
|
|
|
|
summe += weg; // Rechnet alle Weglängen zusammen
|
|
}
|
|
|
|
printf("\n| Weglaenge | Haeufigkeit |\n");
|
|
printf("---------------------------\n");
|
|
|
|
for (int i = 0; i < 100; i++) // Für jede Weglänge
|
|
{
|
|
if (haeufigkeit[i] > 0) // Wurde jede Weglänge mindestens einmal erreicht?
|
|
{
|
|
printf(" %2d %5d\n", i, haeufigkeit[i]); // Wenn ja, printe sie so
|
|
}
|
|
}
|
|
|
|
double durchschnitt = (double) summe / anzahl; //Berechnet den Durchschnitt, wie viele Schritte der Käfer gebraucht hat --> double, weil Kommazahl
|
|
|
|
printf("\nDurchschnittliche Weglaenge: %.2f\n", durchschnitt);
|
|
|
|
return 0;
|
|
}
|