Lot­to­zah­len - Anzei­ge im Seri­el­len Monitor

Lese­zeit: 7 Minu­ten

Lösung
Seite als PDF

Der Ardui­no „spielt“ für dich 6 Zah­len. Anschlie­ßend wer­den die Lot­to­zah­len gezo­gen, auf­stei­gend sor­tiert und auf die Anzahl der über­ein­stim­men­den Zah­len unter­sucht. Das Ergeb­nis wird im Seri­el­len Moni­tor ange­zeigt.
Für die­se Anlei­tung brauchst du nur den Arduino.

So soll die Anzei­ge aussehen:

Defi­nie­re 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 Bestim­mung der Spiel­zah­len und die Zie­hung der Lot­to­zah­len wird jeweils eine Funk­ti­on 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 Sor­tie­ren der Zah­len erle­digt die Funk­ti­on 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ück­set­zen der Strings und dem Zurück­set­zen der Tref­fer­an­zahl. Mit Seriel­Read­StringUn­til() wird die Ein­ga­be der Tas­ta­tur abge­fragt. Dann wer­den die Lot­to­zah­len 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 gespiel­ten Zah­len mit­hil­fe der Funk­ti­on Zah­len­Sor­tie­ren auf­stei­gend sor­tiert und das Array als String (Gespiel­te­Zah­len) 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 Zie­hung der Zah­len und das Sor­tie­ren der Zah­len wird für die eigent­li­chen Lot­to­zah­len wiederholt..

    // Ziehung der Lottozahlen
    Ziehung();
    ZahlenSortieren(LottoZahl, 6);

Jetzt sol­len die über­ein­stim­men­den Zah­len ermit­telt 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 Anzei­ge wird aus den Ele­men­ten des Arrays Lot­to­Zahl ein String (Gezo­ge­ne­Zah­len) „zusam­men­ge­baut“.

    // String GezogeneZahlen aus den Elementen des Arrays LottoZahl
    // zusammensetzen
    for (int i = 0; i < Anzahl; i++)
    {
      GezogeneZahlen = GezogeneZahlen + LottoZahl[i] + " ";
    }

Die Anzei­ge im Seri­el­len 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 voll­stän­di­ge 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("-----------------------------");
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Anleitungen:


Letzte Aktualisierung: Okt 22, 2024 @ 12:45