Voka­le zählen

Lese­zeit: 5 Minu­ten

Lösung
Seite als PDF

In die­sem Pro­gramm soll die Ein­ga­be im Seri­el­len Moni­tor dazu ver­wen­det wer­den, in einem Satz die Anzahl der Voka­le zu zäh­len und anzu­zei­gen. Außer­dem erfährst du eini­ges über Zeichenketten.

So soll es aussehen:

Zei­chen­ket­ten (Strings) kön­nen aus einem ein­zel­nen Zei­chen (char) oder meh­re­ren Zei­chen bestehen.

Sie wer­den mit den Schlüs­sel­wör­tern String und char definiert.

String Zei­chen­ket­te = "abcd“;
char Buch­sta­be = "a“;

String und char kön­nen auch in einem Array abge­legt werden:

// defi­niert ein char-Array mit 5 Ele­men­ten
char Buchstaben[5];

// defi­niert ein Array mit den Ele­men­ten aei­ou
char Buch­sta­ben[] = {"aei­ou"};

// defi­niert ein String-Array
String Satz­tei­le[] = {"Pro­gram­mie­ren ", "ist ", "toll!"};

Eine for-Schlei­fe und ➨sizeof ermög­li­chen den Zugriff auf die Ele­men­te des Arrays.

// definiert ein char Array mit den Elementen aeiou
char Buchstaben[] = {"aeiou"};
 
// definiert ein String-Array
String Satzteile[] = {"Programmieren ", "ist ", "toll!"};

void setup() 
{  
  Serial.begin(9600); 

  // auf serielle Verbindung warten
  while (!Serial) {;}

  // Array mit den Buchstaben anzeigen    
  // char belegt 1 Byte -> entspricht dem Endwert 
  for(int i = 0; i < sizeof(Buchstaben); i++)  
  {  
    Serial.print(Buchstaben[i]);  
  }  
 
  Serial.println();
  
  // Array mit den Satzteilen anzeigen  
  // Endwert der for-Schleife mit sizeof bestimmen
  for(int i = 0; i < sizeof(Satzteile) / sizeof(Satzteile[0]); i++)     
  {  
    Serial.print(Satzteile[i]);  
  }
}

void loop()
{
  // bleibt leer, das Programm läuft nur einmal
}

Für die­se Anlei­tung musst du den Ardui­no nur über USB ver­bin­den und den Seri­el­len Moni­tor öffnen. 

Ver­wen­de das Ein­ga­be­feld im Seri­el­len Monitor:

Defi­nie­re den String Ein­ga­be als glo­ba­le Variable:

String Eingabe;

Im set­up-Block muss du den Seri­el­len Moni­tor star­ten und einen Hin­weis für die Ein­ga­be geben:

void setup() 
{  
  Serial.begin(9600); 

  // auf serielle Verbindung warten
  while (!Serial) {;}

  Serial.println("Bitte Text eingeben:"); 
}

Im loop-Teil musst du zunächst die Zäh­ler für die Voka­le defi­nie­ren und auf 0 set­zen und den String Ein­ga­be leeren...

void loop() 
{  
  // alle Zähler auf 0 setzen  
  int ZaehlerA = 0;  
  int ZaehlerE = 0; 
  int ZaehlerO = 0;
  int ZaehlerU = 0; 
  int ZaehlerI = 0;

  // String Eingabe leeren
  Eingabe = "";

… dann auf die Ein­ga­be warten:

  while (Serial.available() > 0)  
  { 
    // solange lesen, bis return \n eingegeben wurde          
    String Eingabe = Serial.readStringUntil('\n');  

    // das letzte Zeichen ist return  
    // -> soll entfernt werden    
    Eingabe = Eingabe.substring(0, Eingabe.length() - 1);

Damit Groß- und Klein­buch­sta­ben erfasst wer­den, wird der Text in Klein­buch­sta­ben umge­wan­delt und dann auf die Anzahl der Voka­le untersucht:

    Eingabe.toLowerCase();

    for (int i = 0; i < Eingabe.length(); i ++)
    {
      // Vokale zählen
      if (Eingabe[i] == 'a') ZaehlerA ++;
      if (Eingabe[i] == 'e') ZaehlerE ++;
      if (Eingabe[i] == 'i') ZaehlerI ++;
      if (Eingabe[i] == 'o') ZaehlerO ++;
      if (Eingabe[i] == 'u') ZaehlerU ++;
    }

    // Text anzeigen
    Serial.println("Text:" + OriginalEingabe);

    // Ergebnis anzeigen
    Serial.println("Anzahl der Vokale:");
    Serial.println("-----------------------");
    Serial.println(String(ZaehlerA) + " mal das a");
    Serial.println(String(ZaehlerE) + " mal das e");
    Serial.println(String(ZaehlerI) + " mal das i");
    Serial.println(String(ZaehlerO) + " mal das o");
    Serial.println(String(ZaehlerU) + " mal das u");
    Serial.println("-----------------------");

    // Anzahl der Zeichen anzeigen
    Serial.println(String(Eingabe.length()) + " Zeichen!");
    Serial.println("-----------------------");
  }
}

Anschlie­ßend kannst du den Satz auch rück­wärts anzei­gen las­sen. Aller­dings funk­tio­niert das nicht mit Umlauten.

    // Text rückwärts anzeigen
    for (int i = OriginalEingabe.length(); i >= 0; i --)
    {
      Serial.print(OriginalEingabe[i]);
    }

    Serial.println();
    Serial.println("-----------------------");

Zusätz­lich kannst du auch alle Voka­le durch einen ande­ren Buch­sta­ben erset­zen. Ergän­ze das Pro­gramm nach der Aus­ga­be der gezähl­ten Voka­le. Im Bei­spiel wer­den mit replace alle Voka­le durch „i“ ersetzt.

    // alle Vokale durch i ersetzen     
    OriginalEingabe.replace("a", "i");     
    OriginalEingabe.replace("e", "i");   
    OriginalEingabe.replace("o", "i");     
    OriginalEingabe.replace("u", "i");    
    Serial.println(OriginalEingabe); 

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 5. Apr 2024 @ 19:11