Benutzer-Werkzeuge

Webseiten-Werkzeuge


einleitung:variablen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
einleitung:variablen [2015/10/22 11:38]
fbonowski
einleitung:variablen [2018/04/27 20:37] (aktuell)
d.golovko [Variablen müssen vor der Verwendung deklariert werden]
Zeile 3: Zeile 3:
  
 Eine Variable ist ein Ort, an dem ein Programm Daten speichern kann. Eine Variable ist ein Ort, an dem ein Programm Daten speichern kann.
-Diese Daten können an einer Stelle des Programms in die Variable geschrieben werden, dort eine Weile herumliegen und dann an einer anderen Stelle wieder verwendet werden. +Diese Daten können an einer Stelle des Programms in die Variable geschrieben werden, dort eine Weile herumliegen und dann an einer anderen Stelle wieder verwendet werden. Ihr könnt euch Variablen wie einen Schmierzettel vorstellen, der mit einem Namen beschriftet ist, und auf dem ihr euch Zwischenergebnisse aufschreiben könnt. ​
- +
-Ihr könnt euch Variablen wie einen Schmierzettel vorstellen, der mit einem Namen beschriftet ist, und auf dem ihr euch Zwischenergebnisse aufschreiben könnt. ​+
  
 Eine typische Verwendung sieht z.B. so aus: Eine typische Verwendung sieht z.B. so aus:
Zeile 14: Zeile 12:
 </​code>​ </​code>​
  
-==== Details ​==== +==== Variablen müssen vor der Verwendung "​deklariert"​ werden ​====
-=== Deklaration von Variablen ​===+
  
 In Arduino/C++ muss eine Variable dem Programm zunächst "​vorgestellt"​ werden, damit das Programm sie kennt und damit arbeiten kann. Mit dieser sogenannten //​**Deklaration**//​ werden der **//Typ//** und der **//​Namen//​** der Variable festgelegt: In Arduino/C++ muss eine Variable dem Programm zunächst "​vorgestellt"​ werden, damit das Programm sie kennt und damit arbeiten kann. Mit dieser sogenannten //​**Deklaration**//​ werden der **//Typ//** und der **//​Namen//​** der Variable festgelegt:
 <code c++>int ledPinNummer;​ //​Deklaration der Variable mit dem Namen "​ledPinNummer"​ vom Typ: "​int"</​code>​ <code c++>int ledPinNummer;​ //​Deklaration der Variable mit dem Namen "​ledPinNummer"​ vom Typ: "​int"</​code>​
  
-== Typ ==+=== Variablentypen ===
 Der Typ einer Variable gibt vor, welche Art von Daten darin gespeichert werden kann. In unserem Beispiel ist das eine Zahl ohne Nachkommastellen (''​int''​). ​ Der Typ einer Variable gibt vor, welche Art von Daten darin gespeichert werden kann. In unserem Beispiel ist das eine Zahl ohne Nachkommastellen (''​int''​). ​
  
Zeile 35: Zeile 32:
 | double ​      | 1,​7E-308 ​        | 1,​7E+308 ​       | 64             | mit Komma, langsamer als float - auf Arduino identisch mit float | double ​      | 1,​7E-308 ​        | 1,​7E+308 ​       | 64             | mit Komma, langsamer als float - auf Arduino identisch mit float
  
-Daneben gibt es auch spezielle Typen für Text (String, ​char*), oder ein komplexere ​'Objekte' ​(eine Serielle Schnittstelle oder Motortreiber ​z.B.). ​ +Daneben gibt es auch einen speziellen Typ für Text (''​char'' ​für ein Zeichen, ​z.B. für eine einzelne Buchstabe). Weiterhin ​kann man neue Datentypen definieren, indem man eine //Klasse// schreibt -- dazu kommen wir im Skript der Woche 3Ein Beispiel ist der Typ ''​String'',​ der für eine Zeichenkette (ein Wort, einen Satz usw.) steht
-== Namen == +
-Unter diesem Namen kann die Variable ​im Programm verwendet werdenGroß- und Kleinschreibung macht dabei einen Unterschied.+
  
-//Denkt euch immer einen Namen aus, der sagt, was drinsteckt ​so verliert ihr später nicht den Überblick ​und euer Team versteht, was ihr gemacht habt.//+=== Variablennamen === 
 +Unter diesem ​Namen kann die Variable im Programm verwendet werden. Groß- und Kleinschreibung macht dabei einen Unterschied.
  
-Also z.B. ''​ledPinNummer''​ anstelle von ''​lp''​. +//Denkt euch immer einen Namen aus, der sagt, was drinsteckt - so verliert ihr später nicht den Überblick und euer Team versteht, was ihr gemacht habt.// ​Also z.B. ''​ledPinNummer''​ anstelle von ''​lp''​. Aus demselben Grund vermeidet Variablen, die nur aus einer Buchstabe bestehen. Eine Ausnahme sind Fälle, wo dies inhaltlich bedingt ist, z.B. ''​x''​ und ''​y''​ für die entsprechenden Koordinaten im 2D-Raum.  
-==== Werte in Variablen schreiben ("​Zuweisung"​) ====+==== Mit "​=" ​Werte in Variablen schreiben ("​Zuweisung"​) ====
 Um einen Wert in eine Variable zu schreiben, verwendet ihr das einfache Gleichheitszeichen. ​ Um einen Wert in eine Variable zu schreiben, verwendet ihr das einfache Gleichheitszeichen. ​
  
Zeile 50: Zeile 46:
  
 also z.B. also z.B.
-<code c++>​delayZeit=1000/​blinkFrequenz;​''​</​code>​+<code c++>​delayZeit=1000/​blinkFrequenz;</​code>​
  
 === Zuweisungen sind keine Gleichungen! === === Zuweisungen sind keine Gleichungen! ===
 Das Gleichheitszeichen hat in der Programmierung eine andere Bedeutung als in der Mathematik! Das Gleichheitszeichen hat in der Programmierung eine andere Bedeutung als in der Mathematik!
  
-Eine Zuweisung im Programm (''​a=b''​) bedeutet **//​nicht//​**,​ dass ''​a''​ und ''​b''​ immer den gleichen Wert haben werden und "​miteinander verbunden bleiben"​.+Eine Zuweisung im Programm (''​var1=var2''​) bedeutet **//​nicht//​**,​ dass ''​var1''​ und ''​var2''​ immer den gleichen Wert haben werden und "​miteinander verbunden bleiben"​.
 Schaut euch dazu z.B. folgendes Programm an: Schaut euch dazu z.B. folgendes Programm an:
 <code c++> ​ <code c++> ​
-int a;  // deklariere Variable "a+int var1;  // deklariere Variable "var1
-int b;  // deklariere Variable "b+int var2;  // deklariere Variable "var2
-a=1;    // weise "a" den Wert "​1"​ zu. +var1=1;    // weise "var1" den Wert "​1"​ zu. 
-b=a;    // weise "b" das zu, was aktuell in "a" steht. +var2=var1;    // weise "var2" das zu, was aktuell in "var1" steht. 
-Serial.println(a); //  --> gibt "​1"​ aus +Serial.println(var1); //  --> gibt "​1"​ aus 
-Serial.println(b); //  --> gibt auch "​1"​ aus+Serial.println(var2); //  --> gibt auch "​1"​ aus
  
-a=2;    // weise "a" den neuen Wert "​2"​ zu. --> ​wird dadurch nicht verändert. +var1=2;    // weise "var1" den neuen Wert "​2"​ zu. --> ​var2 wird dadurch nicht verändert. 
-Serial.println(a); //  --> gibt "​2"​ aus +Serial.println(var1); //  --> gibt "​2"​ aus 
-Serial.println(b); //  --> gibt immer noch "​1"​ aus+Serial.println(var2); //  --> gibt immer noch "​1"​ aus
 </​code>​ </​code>​
  
-So sind auch Ausdrücke möglich, die mathematisch keinen Sinn ergeben würden (bzw. eine "​falsche Aussage wären)+So sind auch Ausdrücke möglich, die mathematisch keinen Sinn ergeben würden (bzw. eine "​falsche Aussage" ​wären)
 <code c++> <code c++>
-int i;        // deklariere Variable "i+int var;        // deklariere Variable "var
-= 1;        // weise "i" den Wert "​1"​ zu. +var = 1;        // weise "var" den Wert "​1"​ zu. 
-+ 1;    // nimm das, was gerade in "i" steht, addiere dazu "​1"​ und speichere das Ergebnis wieder in "i+var var + 1;    // nimm das, was gerade in "var" steht, addiere dazu "​1"​ und speichere das Ergebnis wieder in "var
-Serial.println(i); //  --> gibt "​2"​ aus +Serial.println(var); //  --> gibt "​2"​ aus 
-+ 1;    // nimm das, was gerade in "i" steht, addiere dazu "​1"​ und speichere das Ergebnis wieder in "i+var var + 1;    // nimm das, was gerade in "var" steht, addiere dazu "​1"​ und speichere das Ergebnis wieder in "var
-Serial.println(i); //  --> gibt "​3"​ aus+Serial.println(var); //  --> gibt "​3"​ aus
 </​code>​ </​code>​
  
-==== Initialisierung ​ von Variablen ​====+=== Initialisierung von Variablen ===
 Ihr könnt die Variable bei der Deklaration auch gleich mit einem Wert füllen. Diesen Vorgang nennt man //​**Initialisierung**//​. Ihr könnt die Variable bei der Deklaration auch gleich mit einem Wert füllen. Diesen Vorgang nennt man //​**Initialisierung**//​.
  
Zeile 87: Zeile 83:
  
 Ihr könnt die Initialisierung auch weglassen - dann steht in der Variable irgendein unvorhersehbarer Wert, der an dieser Speicherstelle vorher schon herumlag - (also **//​nicht//​** unbedingt Null!). Ihr könnt die Initialisierung auch weglassen - dann steht in der Variable irgendein unvorhersehbarer Wert, der an dieser Speicherstelle vorher schon herumlag - (also **//​nicht//​** unbedingt Null!).
 +\\
 +\\
  
 ==== Gültigkeitsbereich (Scope) ==== ==== Gültigkeitsbereich (Scope) ====
Zeile 94: Zeile 92:
   *   vom gesamten Programm aus zugänglich sein. (**//​globale Variable//​**)   *   vom gesamten Programm aus zugänglich sein. (**//​globale Variable//​**)
  
-== Lokale Variablen ==+=== Lokale Variablen ​===
 Eine Variable ist lokal, wenn sie innerhalb eines mit geschweiften Klammern umschlossenen Bereichs deklariert wurde. (also z.B. innerhalb von "​setup"​ oder "​loop"​) Eine Variable ist lokal, wenn sie innerhalb eines mit geschweiften Klammern umschlossenen Bereichs deklariert wurde. (also z.B. innerhalb von "​setup"​ oder "​loop"​)
 Lokale Variablen können wie Schmierzettel innerhalb der Funktion verwendet werden, in der sie deklariert wurden - sie nehmen dadurch keinen Speicherplatz weg, wenn die Funktion nicht läuft und können auch nicht von Außerhalb verändert werden. ​ Lokale Variablen können wie Schmierzettel innerhalb der Funktion verwendet werden, in der sie deklariert wurden - sie nehmen dadurch keinen Speicherplatz weg, wenn die Funktion nicht läuft und können auch nicht von Außerhalb verändert werden. ​
  
-== Globale Variablen ==+=== Globale Variablen ​===
 Variablen, die außerhalb aller geschweiften Klammern deklariert wurden, sind "//​global//"​ gültig - also auch aus dem inneren von Funktionen heraus zu erreichen. Das kann sehr bequem sein, um eine überall benötigte Einstellung oder Ressource abzuspeichern,​ ist aber auch gefährlich,​ weil u.U. zwei weit voneinander entfernt liegende Teile des Programms in eine unübersichtliche Beziehung zueinander treten, wenn sie beide auf die gleiche globale Variable zugreifen. Variablen, die außerhalb aller geschweiften Klammern deklariert wurden, sind "//​global//"​ gültig - also auch aus dem inneren von Funktionen heraus zu erreichen. Das kann sehr bequem sein, um eine überall benötigte Einstellung oder Ressource abzuspeichern,​ ist aber auch gefährlich,​ weil u.U. zwei weit voneinander entfernt liegende Teile des Programms in eine unübersichtliche Beziehung zueinander treten, wenn sie beide auf die gleiche globale Variable zugreifen.
  
Zeile 104: Zeile 102:
  
  
 +Ein Beispiel für globale und lokale Variablen sieht ihr im folgenden **Programm, welches den höchsten bisher gemessenen Wert ausgibt**. ''​maximum''​ in diesem Fall ist eine globale Variable (sie soll den Wert speichern, auch wenn die ''​loop()''​-Funktion durch ist); ''​measurement''​ ist eine lokale Variable -- sie existiert nur innerhalb eines Aufrufs der ''​loop()''​-Funktion.
 +
 +<code cpp> ​
 +int maximum = 0; // groesster gemessener Wert
 +
 +void setup() {
 +  Serial.begin(9600);​
 +}
 +
 +void loop() {
 +  int measurement = analogRead(A0);​ // Messung Phototransistor
 +  if (measurement > maximum) {
 +    maximum = measurement;​
 +  }
 + // mein Maximum ausgeben:
 +  Serial.println(maximum);​
 +  delay(100);
 +}
 +</​code>​
  
  
einleitung/variablen.1445506719.txt.gz · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)