
Das Programm erfasst die im Seriellen Monitor eingegebenen Werte …
- Größe des Zahlenraum
- kleinster Teiler
- größter Teiler
.. und berechnet aus diesen Angaben die teilbaren Zahlen im festgelegten Zahlenraum. Außerdem wird die Anzahl der teilbaren Zahlen ermittelt und angezeigt.
So sieht es aus:

Für diese Aufgabe brauchst du nur den Arduino.
Bei der Verwendung von Funktionen können nicht nur einzelne Variable, sondern auch Arrays übergeben werden.
Das Beispielprogramm stellt die Vielfachen einer eingegebenen Zahl im Zahlenraum bis 100 im Seriellen Monitor dar.

Das dazugehörige Programm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | void setup() { Serial.begin(9600); } void loop() { // Array erstellen int Zahlen[100]; // auf serielle Eingabe warten while (Serial.available() > 0) { int Divisor = Serial.parseInt(); // Enter/Senden gedrückt if (Serial.read() == ‘\n’) { int Laenge = sizeof(Zahlen) / sizeof(Zahlen[0]); // Array mit Zahlen füllen for (int i = 1; i <= Laenge; i++) { Zahlen[i] = i; } Serial.print(“Die durch ” + String(Divisor) + ” teilbaren Zahlen im Zahlenraum bis ”); Serial.println(String(Laenge) + ” sind:”); Serial.println(“—————————————————”); /* Ergebnisse mit der Funktion ErgebnisAnzeigen anzeigen übergebene Parameter: Array Zahlen Divisor Länge des Arrays */ ErgebnisAnzeigen(Zahlen, Divisor, Laenge); } } } void ErgebnisAnzeigen(int Zahlen[], int Divisor, long Laenge) { // mit Hilfe der Funktion modulo wird ermittelt, // ob die Zahl durch den Divisor teilbar ist for (int i = Divisor; i < Laenge; i++) { if (Zahlen[i] % Divisor == 0) Serial.print(String(Zahlen[i]) + “, ”); } Serial.println(); } |

Das Programm soll jetzt erweitert werden.
Der setup-Teil weist auf die Bedienung des Programms hin:
1 2 3 4 5 6 7 8 9 10 11 12 13 | void setup() { Serial.begin(9600); // auf serielle Verbindung warten while (!Serial) {;} Serial.println(“Eingabe der Zahlen:”); Serial.println(“Zahlenraum,minimaler-maximaler Teiler:”); Serial.println(“Beispiel: 100,15–19”); Serial.println(“Zahlenraum muss < 500 sein!”); Serial.println(“—————————————————”); } |
Die Eingabe der Parameter soll in einer Zeile erfolgen:
Zahlenraum und Teiler werden durch ein Komma getrennt, kleinster und größter Teiler werden durch ein Minus-Zeichen getrennt.
Beispiel: 100,12–15 ⇒ Zahlenraum bis 100, Teiler 12–15
Für die Auswertung wird die Funktion ⇒indexOf verwendet. Sie stellt zunächst die Position des Kommas und anschließend die Position des Minus-Zeichens fest und definiert die entsprechenden Variablen.
Außerdem wird mit einem Hinweis darauf hingewiesen, dass entweder das Komma oder das Minus-Zeichen fehlt. Beachte die Kommentare.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | void loop() { // auf serielle Eingabe warten while (Serial.available() > 0) { // solange lesen, bis return eingegeben wurde String Eingabe = Serial.readStringUntil(‘\n’); // das letzte Zeichen ist return -> soll entfernt werden Eingabe = Eingabe.substring(0, Eingabe.length() - 1); // das Komma suchen int SucheKomma = Eingabe.indexOf(“,”); // in der Eingabe fehlt das Komma if (SucheKomma == -1) Serial.println(“Komma fehlt!”); else { // String nach dem Komma -> Teiler Min/Max bestimmen int SucheMinus = Eingabe.indexOf(“-”); // Eingabe der Teiler ist unvollständig if (SucheMinus == -1) Serial.println(“Festlegung der Teiler fehlt!”); else { // String bis zum Komma -> Festlegung des Zahlenraums String ZahlenRaum = Eingabe.substring(0, SucheKomma); // Zählung des Arrays beginnt mit 0 // -> Array muss um 1 größer als die gewünschte Zahl sein int ZahlMax = ZahlenRaum.toInt() + 1; // verhindern, dass Zahlen >500 eingegeben werden if (ZahlMax > 500) Serial.println(“Der Zahlenraum muss < 500 sein!”); else { String EingabeMin = Eingabe.substring(SucheKomma + 1, SucheMinus); String EingabeMax = Eingabe.substring(SucheMinus + 1, Eingabe.length()); int MinDivisor = EingabeMin.toInt(); int MaxDivisor = EingabeMax.toInt(); // Array definieren int Zahlen [ZahlMax]; // Länge des Arrays bestimmen int Laenge = sizeof(Zahlen) / sizeof(Zahlen[0]); // Array mit Zahlen füllen for (int i = 2; i <= Laenge; i++) { Zahlen[i] = i; } // Hinweis auf den Zahlenraum und den maximalen Teiler Serial.println(“Im Zahlenraum bis ” + String(ZahlMax - 1) + ” durch ” + String(MinDivisor) + ” bis ” + String(MaxDivisor) + ” teilbare Zahlen: ”); Serial.println(“————————————————– -”); /* Ergebnisse mit der Funktion ErgebnisAnzeigen anzeigen übergebene Parameter: Array Zahlen Divisor -> i Länge des Arrays -> Laenge */ for (int i = MinDivisor; i <= MaxDivisor; i++) { ErgebnisAnzeigen(Zahlen, i, Laenge); } Serial.println(“—————————————————-”); } } } } } |
Jetzt fehlt noch die im loop-Teil aufgerufene Funktion ErgebnisAnzeigen.
Sie wird mit drei Parametern aufgerufen:
dem Array Zahlen, dem aktuellen Divisor und der Länge des Arrays Zahlen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | void ErgebnisAnzeigen(int Zahlen[], int Divisor, int Laenge) { Serial.print(“Durch ” + String(Divisor) + ” teilbare Zahlen: ”); int Anzahl = 0; /* mit Hilfe der Funktion modulo wird ermittelt, ob die Zahl durch den Divisor teilbar ist Start mit dem aktuellen Wert für Divisor */ for (int i = Divisor; i < Laenge; i++) { // Zahl ist teilbar -> Zahl anzeigen if (Zahlen[i] % Divisor == 0) { Serial.print(String(Zahlen[i]) + “, ”); Anzahl++; } } // Anzahl der teilbaren Zahlen anzeigen Serial.print(“ (“ + String(Anzahl) + ”)”); Serial.println(); } |
Verwandte Anleitungen:
- Einmaleinsreihen anzeigen
- Einmaleinsreihen — Anzeige mit Keyes-Fernbedienung
- Fußballtipp
- Geldautomat
- Kniffel — EEPROM verwenden
- Lottozahlen — Anzeige im Seriellen Monitor
- Primzahlen ermitteln
- Satzmaschine
- Städte-Info
- Vokale zählen
Letzte Aktualisierung:






