void loop() { // alle Variablen auf 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 Würfe 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 ergänzen < 10 -> 3 Leerzeichen > 10 und < 100 -> 2 Leerzeichen > 100 kein Leerzeichen > 10.000 nicht möglich, maximale Durchläufe = 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 ergänzen 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 nach unten abweicht die Abweichung soll so formatiert werden, dass - die Differenz von einem niedrigeren Wert als 16,67 bis 16,67 mit dem Vorzeichen - angezeigt wird - 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.println("Anzahl 1: \t" + Leerzeichen + String(AnzahlEins) + "\t-> " + AnzahlFormat + "%" + "\t-> Abweichung " + 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.println("Anzahl 2: \t" + Leerzeichen + String(AnzahlZwei) + "\t-> " + AnzahlFormat + "%" + "\t-> Abweichung " + 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.println("Anzahl 3: \t" + Leerzeichen + String(AnzahlDrei) + "\t-> " + AnzahlFormat + "%" + "\t-> Abweichung " + 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.println("Anzahl 4: \t" + Leerzeichen + String(AnzahlVier) + "\t-> " + AnzahlFormat + "%" + "\t-> Abweichung " + 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.println("Anzahl 5: \t" + Leerzeichen + String(AnzahlFuenf) + "\t-> " + AnzahlFormat + "%" + "\t-> Abweichung " + 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.println("Anzahl 6: \t" + Leerzeichen + String(AnzahlSechs) + "\t-> " + AnzahlFormat + "%" + "\t-> Abweichung " + Zeichen + AbweichungFormat + "%"); Serial.println("------------------------------------------------------------------"); if (MaxDurchlauf < 20000) MaxDurchlauf = MaxDurchlauf * 2; else MaxDurchlauf = 10; } } }