faecher:nwt:arduino:lernbaustein2:funktionen2:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
faecher:nwt:arduino:lernbaustein2:funktionen2:start [11.02.2025 20:23] – [Lokale und globale Variablen] sbelfaecher:nwt:arduino:lernbaustein2:funktionen2:start [11.02.2025 21:07] (aktuell) sbel
Zeile 141: Zeile 141:
  
   * Erkläre, warum sich das Programm so verhält.    * Erkläre, warum sich das Programm so verhält. 
 +  * Übernehme die Änderungen in deinen Sketch und teste.
 +  * Ändere den Wert von ''start'' im Setup auf 3. 
   * Kommentiere die beiden Variablendeklarationen am Beginn des Sketsches aus und teste, was jetzt passiert.   * Kommentiere die beiden Variablendeklarationen am Beginn des Sketsches aus und teste, was jetzt passiert.
  
Zeile 165: Zeile 167:
   Serial.println("--- Programmende --------");   Serial.println("--- Programmende --------");
 } }
-…  }+ 
 +void quadratzahlen() { 
 +// Lokale Variablen 
 +int start=1; 
 +int ende=5; 
 +  Serial.print("- Start: quadratzahlen - "); 
 +  for(int i=start; i<ende; i++) { 
 +    int q=i*i; 
 +    Serial.print(q); 
 +    Serial.print(" "); 
 +  }
   Serial.println("- Ende: quadratzahlen -");   Serial.println("- Ende: quadratzahlen -");
   return; //Optional, weil kein Wert zurückgegeben wird.   return; //Optional, weil kein Wert zurückgegeben wird.
 } }
 </code> </code>
 +
 +<callout type="info">
 +Variablen, die innerhalb eines Codeblocks mit geschweiften Klammern deklariert werden, gelten nur **lokal** innerhalb dieses Klammerblocks. Außerhalb des Klammerblocks kann nicht auf sie zugegriffen werden.
 +
 +  * Parameter einer Funktion sind immer lokale Variablen in der betreffenden Funktion.
 +  * Laufvariablen von for-Schleifen sind lokal innerhalb des Schleifenblocks
 +</callout>
 +
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A5) === 
 +
 +Ändere deinen Sketch so ab, dass lokale Variablen verwendet werden. Versuche die Variable ''start'' im Setup-Block auf den Wert 3 zu setzen.
 +
 +==== Was ist, wenn es globale und lokale Variablen mit gleichem Namen gibt? ====
 +
 +Betrachte den folgenden Sketch: 
 +
 +<code c>
 +int start=2;
 +void setup() {
 +  delay(1000);
 +  Serial.begin(9600);
 +  delay(1000);
 +  Serial.println("--- Programmstart -------");
 +  quadratzahlen();
 +  Serial.println("--- Zwischenmeldung -----");
 +  quadratzahlen();
 +  Serial.println("--- Programmende --------");
 +}
 +
 +void quadratzahlen() {
 +// Lokale Variablen
 +int start=1;
 +int ende=5;
 +  Serial.print("- Start: quadratzahlen - ");
 +  for(int i=start; i<ende; i++) {
 +    int q=i*i;
 +    Serial.print(q);
 +    Serial.print(" ");
 +  }
 +  Serial.println("- Ende: quadratzahlen -");
 +  return; //Optional, weil kein Wert zurückgegeben wird.
 +}
 +
 +</code>
 +
 +Hier gibt es sowohl eine globale als auch eine lokale Variable mit dem Namen ''start''. Welche wird jetzt in der for-Schleife verwendet?
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A6) === 
 +
 +  * Teste den Sketch. Welche Variable wird in der for-Schleife verwendet?
 +  * Gib den Wert von ''start'' irgendwo im setup mit einem Serial.printl Befehl aus - welcher Wert wird hier ausgegeben?
 +
 +
 +===== Funktionen mit Rückgabewert =====
 +Funktionen können, wenn sie zu der Stelle zurückkehren, an der sie aufgerufen wurden auch noch Ergebnisse zurückgeben. 
 +
 +{{ :faecher:nwt:arduino:lernbaustein2:funktionen2:fkt-signatur3.png |}}
 +
 +{{ :faecher:nwt:arduino:lernbaustein2:funktionen2:fkt-rw.drawio.png |}}
 +
 +<code c>
 +void setup() {
 +  delay(1000);
 +  Serial.begin(9600);
 +  delay(1000);
 +  Serial.println("--- Programmstart -------");
 +  double n = nullstelle(-2,4);
 +  Serial.print("Nullstelle bei x=");
 +  Serial.println(n);
 +  Serial.println("--- Programmende --------");
 +}
 +
 +double nullstelle(double steigung, double yachsabsch) {
 +  double nullst = -1 * yachsabsch / steigung;
 +  return nullst;
 +}
 +
 +void loop() {
 +// Leer - der Loop hat hier keine Funktion
 +}
 +</code>
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A7) === 
 +
 +   * Was berechnet der abgebildete Sketch? Teste mit verschiedenen Parameterwerten.
 +   * Erweitere den Aufruf der Funktion im Setup so, dass alle Nullstellen aller Geraden mit Steigungen zwischen -2.0 und -1.0 mit der Schrittweite 0.1 berechnet werden: {{ :faecher:nwt:arduino:lernbaustein2:funktionen2:bildschirmfoto_20250211_205809.png |}}
 +
 +++++ Hilfestellung 1: For Schleife mit 0.1er Schritten |
 +
 +Die for-Schleife sieht hier z.B. so aus:
 +<code c>
 +for (double i = -2; i <= -0.99; i = i + 0.1) {
 +    // Rechnen und ausgeben
 +  }
 +</code>
 +++++
 +
 +++++ Lösungsvorschlag |
 +<code c>
 + for (double i = -2; i <= -0.99; i = i + 0.1) {
 +    double n = nullstelle(i, 4);
 +    Serial.print("Steigung m=");
 +    Serial.print(i);
 +    Serial.print(" Nullstelle bei x=");
 +    Serial.println(n);
 +  }
 +</code>
 +
 +++++
  • faecher/nwt/arduino/lernbaustein2/funktionen2/start.1739301829.txt.gz
  • Zuletzt geändert: 11.02.2025 20:23
  • von sbel