Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:ffprg2017:l2:l2 [2017/08/24 14:21] – created Ivo Blöchliger | lehrkraefte:blc:informatik:ffprg2017:l2:l2 [2017/09/01 05:52] (current) – [LEDs] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ===== For loop ===== | ||
| + | Standard-Form: | ||
| + | <code c++> | ||
| + | for (int i=0; i<10; i++) { | ||
| + | // irgendwas mit i | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | **Genauer: for(Initialisierung; | ||
| + | |||
| + | Die Variable(n), | ||
| + | <code c++> | ||
| + | for (int i=0; i<10; i++) { | ||
| + | if (i==5) { | ||
| + | break; // loop abbrechen | ||
| + | } | ||
| + | } | ||
| + | Serial.println(i); | ||
| + | // | ||
| + | // Abhilfe: | ||
| + | int i=0; | ||
| + | for (;i<10; i++) { // leere Initialisierung | ||
| + | // bla, bla, break, ... | ||
| + | } | ||
| + | Serial.println(" | ||
| + | Serial.print(i); | ||
| + | </ | ||
| + | |||
| + | ==== Schlechte Beispiele ==== | ||
| + | Schreiben Sie keinen solchen Code! Der ist nur dazu da, die Mechanik der For-Schlaufe in C++ besser zu verstehen. | ||
| + | <code c++> | ||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | Serial.println(" | ||
| + | for (int i=0; Serial.print(i), | ||
| + | Serial.print(" | ||
| + | Serial.println(i); | ||
| + | } | ||
| + | Serial.println(); | ||
| + | delay(2000); | ||
| + | |||
| + | for (int i,j=0; j<5; i<4 ? i++ : (i=0,j++)) { | ||
| + | Serial.print(" | ||
| + | Serial.print(i); | ||
| + | Serial.print(" | ||
| + | Serial.println(j); | ||
| + | } | ||
| + | delay(3000); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== If-Schleife ===== | ||
| + | <code c++> | ||
| + | if (bedingung) { | ||
| + | // tu was | ||
| + | } | ||
| + | |||
| + | if (bedingung) { | ||
| + | // tu was | ||
| + | } else { | ||
| + | // anderes | ||
| + | } | ||
| + | |||
| + | if (bedingung) { | ||
| + | // tu was | ||
| + | } else if (andere bedingung) { | ||
| + | // tu was anderes | ||
| + | } else if (noch andere bedingung) { | ||
| + | // tu noch was anderes | ||
| + | } else { | ||
| + | // wenn alles nicht wahr war | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== Logische Verknüpfungen ==== | ||
| + | | && | **und** (der zweite Ausdruck wird nur ausgewertet wenn der erste Ausdruck wahr ist) | | ||
| + | | < | ||
| + | |||
| + | ==== Wahrheitswerte: | ||
| + | Typ bool kann false oder true sein. | ||
| + | |||
| + | Andere Werte sind true, wenn diese nicht null sind. | ||
| + | |||
| + | true wird zu 1 konvertiert, | ||
| + | <code c++> | ||
| + | int i=true; | ||
| + | bool ok=42; | ||
| + | Serial.println(ok); | ||
| + | bool nk=0; // nk wird false; | ||
| + | if (42) { | ||
| + | // immer wahr | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== Ternärer Operator ==== | ||
| + | Sehr kompakt, aber schwer zu lesen. Einsatz wie Gewürz. | ||
| + | <code c++> | ||
| + | int a = (bedingung) ? resultatWennWahr : resultatWennFalsch; | ||
| + | </ | ||
| + | |||
| + | ===== Modulo Operator ===== | ||
| + | <code c++> | ||
| + | int a=19, b=5; | ||
| + | int rest = a % b; // liefert 4, Rest der Division 19/5 | ||
| + | a=-19; | ||
| + | rest = a % b; // liefert -4. Erklärung: Integer-Division rundet immer zu Null hin!, D.h. (-19)/5 ergibt -3, Rest -4. | ||
| + | </ | ||
| + | |||
| + | ===== Aufgaben ===== | ||
| + | * Erst obiges Studieren, Codes ausprobieren, | ||
| + | |||
| + | === Primzahlen === | ||
| + | Schreiben Sie einen Sketch, der Primzahlen ausgibt (ohne obere Grenze). | ||
| + | |||
| + | Studieren Sie dazu, falls nötig, die Arduino-Dokumentation zum for-loop, der if-Schleife und dem Modulo-Operator %. | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code c++> | ||
| + | void setup() { | ||
| + | Serial.begin(115200); | ||
| + | Serial.println(2); | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | for (long i=1000001; ; i+=2) { | ||
| + | bool prime = true; | ||
| + | for (long t=3; t*t<=i; t+=2) { | ||
| + | if (i % t==0) { | ||
| + | prime = false; | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | if (prime) { | ||
| + | Serial.print(i); | ||
| + | Serial.print("," | ||
| + | } else if (i%29 == 0) { | ||
| + | Serial.println(); | ||
| + | } | ||
| + | } | ||
| + | delay(20000); | ||
| + | } | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | === Perfekte Zahlen === | ||
| + | Finden Sie Zahlen, die gleich der Summe ihrer Teiler sind (sich selbst natürlich ausgeschlossen). Beispiel: 6=1+2+3. Gegenbeispiel: | ||
| + | |||