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("---------------------------------------------------");
}
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("----------------------------------------------------");
}
}
}
}
}
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();
}