lehrkraefte:blc:informatik:ffprg2017:l2:l2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:ffprg2017:l2:l2 [2017/08/24 14:21] Ivo Blöchligerlehrkraefte: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
 +}
 +</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.
 +