Der Arduino „spielt“ für dich 6 Zahlen. Anschließend werden die Lottozahlen gezogen, aufsteigend sortiert und auf die Anzahl der übereinstimmenden Zahlen untersucht. Das Ergebnis wird im Seriellen Monitor angezeigt.
Für diese Anleitung brauchst du nur den Arduino.
So soll die Anzeige aussehen:
Definiere die Variablen:
// Array für die angekreuzten Zahlen
int SpielZahl[6];
// Array für die gespielten Zahlen und die Lottozahlen
int LottoZahl[6];
// Minimum/Maximum der Zufallszahlen
int Minimum = 1;
int Maximum = 49;
// Anzahl der zu ziehenden Zahlen
int Anzahl = 6;
Für die Bestimmung der Spielzahlen und die Ziehung der Lottozahlen wird jeweils eine Funktion verwendet:
int Ziehung()
{
for (int i = 0; i < Anzahl; i ++)
{
/*
die Lottozahl gilt solange als bereits gezogen
bis in der for-Schleife nachgewiesen wird, dass sie neu ist
und BereitsGezogen den Wert false hat
*/
bool BereitsGezogen = true;
while (BereitsGezogen)
{
// Zahl ziehen
LottoZahl[i] = random(Minimum, Maximum);
BereitsGezogen = false;
/*
Zufallszahl mit den bereits gezogenen Zahlen vergleichen
i wird in der ersten for-Schleife hochgezählt
alle bisherigen Zahlen (ii) werden mit den bisher gezogenen Zahlen
(außer der gerade gezogenen) verglichen (ii < i)
ist sie identisch, erhält BereitsGezogen den Wert true
es wird erneut eine Zufallszahl bestimmt
wenn die Zahl neu ist, (BereitsGezogen hat noch den Wert false)
wird die while-Schleife verlassen und die nächste Zahl
gezogen
*/
for (int ii = 0; ii < i; ii ++)
{
if (LottoZahl[i] == LottoZahl[ii]) BereitsGezogen = true;
}
}
}
/*
das Array mit den Zahlen wird an das Hauptprogramm zurückgegeben
beim ersten Aufruf sind es die gespielten Zahlen
beim zweiten Aufruf die gezogenen Lottozahlen
*/
return LottoZahl[Anzahl];
}
Das Sortieren der Zahlen erledigt die Funktion ZahlenSortieren:
void ZahlenSortieren(int Zahlen[], int Groesse)
{
// unsortierten Bereich des Arrays durchlaufen
for (int i = 0; i < (Groesse - 1); i++)
{
// bei jedem Durchlauf wird das jeweils letzte Element weggelassen
for (int ii = 0; ii < (Groesse - (i + 1)); ii++)
{
/*
wenn die aktuelle Zahl größer als die nachfolgende Zahl ist
-> aktuelle Zahl temporär speichern
-> Zahlen vertauschen
-> temporäre Zahl der nachfolgenden Zahl zuweisen
*/
if (Zahlen[ii] > Zahlen[ii + 1])
{
int zwischengespeicherteZahl = Zahlen[ii];
Zahlen[ii] = Zahlen[ii + 1];
Zahlen[ii + 1] = zwischengespeicherteZahl;
}
}
}
}
Der setup-Teil:
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// Zufallsgenerator starten
randomSeed(analogRead(A0));
Serial.println("z = Nächste Ziehung");
}
Der loop-Teil beginnt mit dem Zurücksetzen der Strings und dem Zurücksetzen der Trefferanzahl. Mit SerielReadStringUntil() wird die Eingabe der Tastatur abgefragt. Dann werden die Lottozahlen gezogen.
void loop()
{
String GespielteZahlen = "";
String GezogeneZahlen = "";
String AnzahlTreffer = "";
String Eingabe;
int Treffer = 0;
// auf serielle Eingabe warten
while (Serial.available() > 0)
{
// solange lesen, bis return eingegeben wurde
Eingabe = Serial.readStringUntil('\n');
}
// wenn "z" eingegeben wurde
if (Eingabe == "z")
{
// Ziehung der "angekreuzten" Zahlen
Ziehung();
Anschließend wird das Array der gespielten Zahlen mithilfe der Funktion ZahlenSortieren aufsteigend sortiert und das Array als String (GespielteZahlen) zusammengesetzt.
ZahlenSortieren(LottoZahl, 6);
for (int i = 0; i < Anzahl; i ++)
{
// String GespielteZahlen aus den Elementen des Arrays
// LottoZahl zusammensetzen
GespielteZahlen = GespielteZahlen + LottoZahl[i] + " ";
/*
dem Array SpielZahl (die „gespielten“ Zahlen)
wird das identische Element des Arrays LottoZahl zugewiesen
Dieser Schritt darf für die Ziehung der Lottozahlen
nicht wiederholt werden.
*/
SpielZahl[i] = LottoZahl[i];
}
Die Ziehung der Zahlen und das Sortieren der Zahlen wird für die eigentlichen Lottozahlen wiederholt..
// Ziehung der Lottozahlen
Ziehung();
ZahlenSortieren(LottoZahl, 6);
Jetzt sollen die übereinstimmenden Zahlen ermittelt werden:
// Vergleichen der Elemente der Arrays SpielZahl und LottoZahl
for (int i = 0; i < Anzahl; i++)
{
for (int ii = 0; ii < Anzahl; ii++)
{
// Übereinstimmung gefunden -> Treffer um 1 erhöhen
// AnzahlTreffer: String für übereinstimmende Zahlen erzeugen
if (SpielZahl[i] == LottoZahl[ii])
{
AnzahlTreffer = AnzahlTreffer + SpielZahl[i] + " ";
Treffer ++;
}
}
}
Für die Anzeige wird aus den Elementen des Arrays LottoZahl ein String (GezogeneZahlen) „zusammengebaut“.
// String GezogeneZahlen aus den Elementen des Arrays LottoZahl
// zusammensetzen
for (int i = 0; i < Anzahl; i++)
{
GezogeneZahlen = GezogeneZahlen + LottoZahl[i] + " ";
}
Die Anzeige im Seriellen Monitor:
// Anzeige Serieller Monitor
Serial.println("Gespielte Zahlen");
Serial.println("-----------------------------");
Serial.println(GespielteZahlen);
Serial.println("-----------------------------");
Serial.println("Gezogene Zahlen");
Serial.println("-----------------------------");
Serial.println(GezogeneZahlen);
Serial.println("-----------------------------");
if (Treffer == 0) Serial.println("keine Treffer!");
else if (Treffer == 1) Serial.println("Treffer: " + AnzahlTreffer + "(" + String(Treffer) + " richtige Zahl)");
else Serial.println("Treffer: " + AnzahlTreffer + "(" + String(Treffer) + " richtige Zahlen)");
Serial.println("-----------------------------");
}
}
Der vollständige loop-Teil:
void loop()
{
String GespielteZahlen = "";
String GezogeneZahlen = "";
String AnzahlTreffer = "";
String Eingabe;
int Treffer = 0;
// auf serielle Eingabe warten
while (Serial.available() > 0)
{
// solange lesen, bis return eingegeben wurde
Eingabe = Serial.readStringUntil('\n');
}
// wenn "z" eingegeben wurde
if (Eingabe == "z")
{
// Ziehung der "angekreuzten" Zahlen
Ziehung();
/*
Array Sortieren mit ArduinoSort
sortArray(NameArray, AnzahlElemente)
sortArrayReverse(NameArray, AnzahlElemente)
*/
ZahlenSortieren(LottoZahl, 6);
// String GespielteZahlen aus den Elementen des Arrays LottoZahl
// zusammensetzen
for (int i = 0; i < Anzahl; i++)
{
GespielteZahlen = GespielteZahlen + LottoZahl[i] + " ";
SpielZahl[i] = LottoZahl[i];
}
// Ziehung der Lottozahlen
Ziehung();
ZahlenSortieren(LottoZahl, 6);
// Vergleichen der Elemente der Arrays SpielZahl und LottoZahl
for (int i = 0; i < Anzahl; i++)
{
for (int ii = 0; ii < Anzahl; ii++)
{
// Übereinstimmung gefunden -> Treffer um 1 erhöhen
if (SpielZahl[i] == LottoZahl[ii])
{
AnzahlTreffer = AnzahlTreffer + SpielZahl[i] + " ";
Treffer ++;
}
}
}
// String GezogeneZahlen aus den Elementen des Arrays LottoZahl
// zusammensetzen
for (int i = 0; i < Anzahl; i++)
{
GezogeneZahlen = GezogeneZahlen + LottoZahl[i] + " ";
}
// Anzeige Serieller Monitor
Serial.println("Gespielte Zahlen");
Serial.println("-----------------------------");
Serial.println(GespielteZahlen);
Serial.println("-----------------------------");
// Anzeige der Zahlen Serieller Monitor
Serial.println("Gezogene Zahlen");
Serial.println("-----------------------------");
Serial.println(GezogeneZahlen);
Serial.println("-----------------------------");
if (Treffer == 0) Serial.println("keine Treffer!");
else Serial.println("Treffer: " + AnzahlTreffer + "");
Serial.println("-----------------------------");
}
}
Verwandte Anleitungen:
- Einmaleinsreihen anzeigen
- Fußballtipp
- Geldautomat
- Laplace-Versuch
- Primzahlen ermitteln
- Satzmaschine
- Schneckenrennen
- Städte-Info
- Taschenrechner Grundrechenarten
- Teiler bestimmen
- Vokale zählen
- Vollkommene Zahlen
- Würfeln Serieller Monitor
Letzte Aktualisierung: