// Start mit 10 Durchläufen
double MaxDurchlauf = 10;
// statistische Wahrscheinlichkeit eine bestimmte Zahl zu wuerfeln
const double StatistischeWahrscheinlichkeit = 16.67;
String Leerzeichen;
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial) {;}
Serial.println("Laplace-Versuch");
Serial.println("s -> Start");
Serial.println("-----------------------------------------");
randomSeed(analogRead(A0));
}
void loop()
{
// alle Variablen 0 setzen
int Durchlauf = 0;
int AnzahlEins = 0;
int AnzahlZwei = 0;
int AnzahlDrei = 0;
int AnzahlVier = 0;
int AnzahlFuenf = 0;
int AnzahlSechs = 0;
// Zahlen von 1 bis 6
int Minimum = 1;
int Maximum = 7;
String AnzahlFormat;
String AbweichungFormat;
double Abweichung;
String Zeichen;
while (Serial.available() > 0)
{
// Eingabe im Seriellen Monitor lesen
char Eingabe = Serial.read();
// Enter/Senden gedrückt
if (Eingabe == 's')
{
Serial.println("Anzahl der W\u00fcrfe: " + String(MaxDurchlauf));
Serial.println("------------------------------------------------------------------");
while (Durchlauf < MaxDurchlauf)
{
int Zahl = ZufallsZahl(Minimum, Maximum);
// Anzahl der Wuerfe speichern
if (Zahl == 1) AnzahlEins ++;
if (Zahl == 2) AnzahlZwei++;
if (Zahl == 3) AnzahlDrei++;
if (Zahl == 4) AnzahlVier ++;
if (Zahl == 5) AnzahlFuenf ++;
if (Zahl == 6) AnzahlSechs ++;
Durchlauf ++;
}
// Ergebnis berechnen und formatieren
// 1
/*
Anzahl Leerzeichen ergaenzen
< 10 -> 3 Leerzeichen
> 10 und < 100 -> 2 Leerzeichen
> 100 kein Leerzeichens
> 10.000 nicht möglich, maximale Durchlaeufe = 20.000
*/
Leerzeichen = "";
if (AnzahlEins < 10) Leerzeichen = " ";
if (AnzahlEins < 100 && AnzahlEins > 9) Leerzeichen = " ";
// % berechnen und als String formatieren
AnzahlFormat = String(AnzahlEins / MaxDurchlauf * 100);
// . durch , ersetzen
AnzahlFormat.replace(".", ",");
// wenn %-Wert < 10 -> Leerzeichen ergaenzen
if (AnzahlFormat.length() < 5) AnzahlFormat = " " + AnzahlFormat;
// Abweichung von der zu erwartenden Wahrscheinlichkeit in % berechnen
Abweichung = StatistischeWahrscheinlichkeit - AnzahlEins / MaxDurchlauf * 100;
/*
die Berechnung der Abweichung hat als Ergebnis eine negative Zahl, wenn
das Ergebnis nach oben von 16,67 abweicht und eine positive Zahl, wenn das Ergebnis
unten abweicht
die Abweichung soll so formatiert werden, dass
- die Differenz von einem niedrigen Wert als 16,67 bis 16,67
mit dem Vorzeichen - angezeigt wird
- die die Differenz von einem höheren Wert als 16,67 bis 16,67
mit dem Vorzeichen + angezeigt wird
*/
if (AnzahlEins / MaxDurchlauf * 100 - StatistischeWahrscheinlichkeit > 0)
{
/*
%-Wert < 16.67
Wert für Abweichung soll negativ werden
Vorzeichen - char(43) setzen
*/
Abweichung = Abweichung * - 1;
Zeichen = char(43);
}
// %-Wert > 16,67 -> Vorzeichen + char(45) setzen
else Zeichen = char(45);
// Abweichung in String umwandeln und . durch , ersetzen
AbweichungFormat = String(Abweichung);
AbweichungFormat.replace(".", ",");
// wenn Wert < 10 -> Leerzeichen ergaenzen
if (AbweichungFormat.length() < 5) Zeichen = Zeichen + " ";
// Ergebnis anzeigen mit \t = Tabulator formatieren
Serial.print("Anzahl 1: \t" + Leerzeichen + String(AnzahlEins));
Serial.print("\t-> " + AnzahlFormat + "%" + "\t-> Abweichung ");
Serial.println(Zeichen + AbweichungFormat + "%");
// 2
Leerzeichen = "";
if (AnzahlZwei < 10) Leerzeichen = " ";
if (AnzahlZwei < 100 && AnzahlZwei > 9) Leerzeichen = " ";
AnzahlFormat = String(AnzahlZwei / MaxDurchlauf * 100);
AnzahlFormat.replace(".", ",");
if (AnzahlFormat.length() < 2) AnzahlFormat = AnzahlFormat + " ";
if (AnzahlFormat.length() < 5) AnzahlFormat = " " + AnzahlFormat;
Abweichung = StatistischeWahrscheinlichkeit - AnzahlZwei / MaxDurchlauf * 100;
if (AnzahlZwei / MaxDurchlauf * 100 - StatistischeWahrscheinlichkeit > 0)
{
Abweichung = Abweichung * - 1;
Zeichen = char(43);
}
else Zeichen = char(45);
AbweichungFormat = String(Abweichung);
AbweichungFormat.replace(".", ",");
if (AbweichungFormat.length() < 5) Zeichen = Zeichen + " ";
Serial.print("Anzahl 2: \t" + Leerzeichen + String(AnzahlZwei));
Serial.print("\t-> " + AnzahlFormat + "%" + "\t-> Abweichung ");
Serial.println(Zeichen + AbweichungFormat + "%");
// 3
Leerzeichen = "";
if (AnzahlDrei < 10) Leerzeichen = " ";
if (AnzahlDrei < 100 && AnzahlDrei > 9) Leerzeichen = " ";
AnzahlFormat = String(AnzahlDrei / MaxDurchlauf * 100);
AnzahlFormat.replace(".", ",");
Abweichung = StatistischeWahrscheinlichkeit - AnzahlDrei / MaxDurchlauf * 100;
if (AnzahlDrei / MaxDurchlauf * 100 - StatistischeWahrscheinlichkeit > 0)
{
Abweichung = Abweichung * - 1;
Zeichen = char(43);
}
else Zeichen = char(45);
AbweichungFormat = String(Abweichung);
AbweichungFormat.replace(".", ",");
if (AbweichungFormat.length() < 5) Zeichen = Zeichen + " ";
Serial.print("Anzahl 3: \t" + Leerzeichen + String(AnzahlDrei));
Serial.print("\t-> " + AnzahlFormat + "%" + "\t-> Abweichung ");
Serial.println(Zeichen + AbweichungFormat + "%");
// 4
Leerzeichen = "";
if (AnzahlVier < 10) Leerzeichen = " ";
if (AnzahlVier < 100 && AnzahlVier > 9) Leerzeichen = " ";
AnzahlFormat = String(AnzahlVier / MaxDurchlauf * 100);
AnzahlFormat.replace(".", ",");
if (AnzahlFormat.length() < 5) AnzahlFormat = " " + AnzahlFormat;
Abweichung = StatistischeWahrscheinlichkeit - AnzahlVier / MaxDurchlauf * 100;
if (AnzahlVier / MaxDurchlauf * 100 - StatistischeWahrscheinlichkeit > 0)
{
Abweichung = Abweichung * - 1;
Zeichen = char(43);
}
else Zeichen = char(45);
AbweichungFormat = String(Abweichung);
AbweichungFormat.replace(".", ",");
if (AbweichungFormat.length() < 5) Zeichen = Zeichen + " ";
Serial.print("Anzahl 4: \t" + Leerzeichen + String(AnzahlVier));
Serial.print("\t-> " + AnzahlFormat + "%" + "\t-> Abweichung ");
Serial.println(Zeichen + AbweichungFormat + "%");
// 5
Leerzeichen = "";
if (AnzahlFuenf < 10) Leerzeichen = " ";
if (AnzahlFuenf < 100 && AnzahlFuenf > 9) Leerzeichen = " ";
AnzahlFormat = String(AnzahlFuenf / MaxDurchlauf * 100);
AnzahlFormat.replace(".", ",");
if (AnzahlFormat.length() < 5) AnzahlFormat = " " + AnzahlFormat;
Abweichung = StatistischeWahrscheinlichkeit - AnzahlFuenf / MaxDurchlauf * 100;
if (AnzahlFuenf / MaxDurchlauf * 100 - StatistischeWahrscheinlichkeit > 0)
{
Abweichung = Abweichung * - 1;
Zeichen = char(43);
}
else Zeichen = char(45);
AbweichungFormat = String(Abweichung);
AbweichungFormat.replace(".", ",");
if (AbweichungFormat.length() < 5) Zeichen = Zeichen + " ";
Serial.print("Anzahl 5: \t" + Leerzeichen + String(AnzahlFuenf));
Serial.print("\t-> " + AnzahlFormat + "%" + "\t-> Abweichung ");
Serial.println(Zeichen + AbweichungFormat + "%");
// 6
Leerzeichen = "";
if (AnzahlSechs < 10) Leerzeichen = " ";
if (AnzahlSechs < 100 && AnzahlSechs > 9) Leerzeichen = " ";
AnzahlFormat = String(AnzahlSechs / MaxDurchlauf * 100);
AnzahlFormat.replace(".", ",");
if (AnzahlFormat.length() < 5) AnzahlFormat = " " + AnzahlFormat;
Abweichung = StatistischeWahrscheinlichkeit - AnzahlSechs / MaxDurchlauf * 100;
if (AnzahlSechs / MaxDurchlauf * 100 - StatistischeWahrscheinlichkeit > 0)
{
Abweichung = Abweichung * - 1;
Zeichen = char(43);
}
else Zeichen = char(45);
AbweichungFormat = String(Abweichung);
AbweichungFormat.replace(".", ",");
if (AbweichungFormat.length() < 5) Zeichen = Zeichen + " ";
Serial.print("Anzahl 6: \t" + Leerzeichen + String(AnzahlSechs));
Serial.print("\t-> " + AnzahlFormat + "%" + "\t-> Abweichung ");
Serial.println(Zeichen + AbweichungFormat + "%");
Serial.println("------------------------------------------------------------------");
if (MaxDurchlauf < 20000) MaxDurchlauf = MaxDurchlauf * 2;
else MaxDurchlauf = 10;
}
}
}
int ZufallsZahl(int Minimum, int Maximum)
{
int Zahl = random(Minimum, Maximum);
return Zahl;
}
Letzte Aktualisierung: