Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ===== For loop ===== Standard-Form: <code c++> for (int i=0; i<10; i++) { // irgendwas mit i } </code> **Genauer: for(Initialisierung; Pre-Loop-Condition; Post-Loop-Operation);** Die Variable(n), die im For-Loop initialisert wird (werden), sind nur im drauf folgenden Block sichtbar! Sonst davor deklarieren: <code c++> for (int i=0; i<10; i++) { if (i==5) { break; // loop abbrechen } } Serial.println(i); // Fehler, i nicht deklariert, da nur im loop gültig. // // Abhilfe: int i=0; for (;i<10; i++) { // leere Initialisierung // bla, bla, break, ... } Serial.println("Abbruch mit i="); Serial.print(i); </code> ==== 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("--------8><------------"); for (int i=0; Serial.print(i), Serial.println("<5?"), i<5; Serial.print(i), Serial.println("++"),i++) { Serial.print("im Loop mit i="); Serial.println(i); } Serial.println(); delay(2000); for (int i,j=0; j<5; i<4 ? i++ : (i=0,j++)) { Serial.print("i="); Serial.print(i); Serial.print(" j="); Serial.println(j); } delay(3000); } </code> ===== 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 } </code> ==== Logische Verknüpfungen ==== | && | **und** (der zweite Ausdruck wird nur ausgewertet wenn der erste Ausdruck wahr ist) | | <nowiki>||</nowiki> | **oder** (der zweite Ausdruck wird nur ausgewertet wenn der erste Ausdruck falsch ist) | ==== Wahrheitswerte: false und true ==== Typ bool kann false oder true sein. Andere Werte sind true, wenn diese nicht null sind. true wird zu 1 konvertiert, wenn als Zahl aufgefasst. <code c++> int i=true; // i wird 1 bool ok=42; // ok wird true; Serial.println(ok); // Zeigt 1 an. bool nk=0; // nk wird false; if (42) { // immer wahr } </code> ==== Ternärer Operator ==== Sehr kompakt, aber schwer zu lesen. Einsatz wie Gewürz. <code c++> int a = (bedingung) ? resultatWennWahr : resultatWennFalsch; </code> ===== 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. </code> ===== Aufgaben ===== * Erst obiges Studieren, Codes ausprobieren, verstehen, abändern, Fragen stellen. === 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); } </code> </hidden> === Perfekte Zahlen === Finden Sie Zahlen, die gleich der Summe ihrer Teiler sind (sich selbst natürlich ausgeschlossen). Beispiel: 6=1+2+3. Gegenbeispiel: 8!=1+2+4. lehrkraefte/blc/informatik/ffprg2017/l2/l2.txt Last modified: 2017/09/01 07:52by Ivo Blöchliger