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:
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:
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.
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.
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
- Fußballtipp
- Geldautomat
- Laplace-Versuch
- Lottozahlen - Anzeige im Seriellen Monitor
- Primzahlen ermitteln
- Satzmaschine
- Schneckenrennen
- Städte-Info
- Taschenrechner Grundrechenarten
- Vokale zählen
- Vollkommene Zahlen
- Würfeln Serieller Monitor
Letzte Aktualisierung: