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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | 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(); } |