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:34]
fbonowski
einleitung:variablen [2018/04/27 20:37] (aktuell)
d.golovko [Variablen müssen vor der Verwendung deklariert werden]
Zeile 1: Zeile 1:
 ===== Variablen ===== ===== Variablen =====
-==== Was und Wozu? ====+==== Variablen sind das Gedächtnis eines Programms ​====
  
 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. ​Ihr könnt euch Variablen ​wie einen Schmierzettel vorstellen, der mit einem Namen beschriftet ist, und auf dem ihr euch Zwischenergebnisse aufschreiben könnt
-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. ​ +
- +
-//Variablen ​sind damit so etwas die das Gedächtnis eines Programms.//+
  
 Eine typische Verwendung sieht z.B. so aus: Eine typische Verwendung sieht z.B. so aus:
Zeile 15: 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 ​sogeneannten ​//​**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, was 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''​)
  
 Weil am Computer so viel mit Zahlen gearbeitet wird, gibt es unterschiedliche Typen für Zahlen, je nach dem, ob sie Kommastellen enthalten oder wie groß sie sein darf: Weil am Computer so viel mit Zahlen gearbeitet wird, gibt es unterschiedliche Typen für Zahlen, je nach dem, ob sie Kommastellen enthalten oder wie groß sie sein darf:
Zeile 36: 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 3. Ein 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 werden+
  
-//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.  
- +==== Mit "=" Werte in Variablen schreiben ("​Zuweisung"​) ====
-=== Gültigkeitsbereich (Scope) === +
-Eine Variable kann entweder... +
-  *  ​nur in einem Teil des Programms existieren (**//lokale Variable//​**) +
-...oder...\\ +
-  *   vom gesamten Programm ​aus zugänglich sein(**//​globale Variable//​**) +
- +
-== Lokale Variablen == +
-Eine Variable ​ist lokalwenn 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 +
- +
-== 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. +
- +
-//​**Vermeidet globale Variablen, wenn sie nicht unbedingt nötig sind, denn sie machen euer Programm unübersichtlich!**//​ +
- +
-==== 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 67: 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 105: 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) ====
 +Eine Variable kann entweder...
 +  *  nur in einem Teil des Programms existieren (**//lokale Variable//​**)
 +...oder...\\
 +  *   vom gesamten Programm aus zugänglich sein. (**//​globale Variable//​**)
 +
 +=== 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"​)
 +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 ===
 +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.
 +
 +//​**Vermeidet globale Variablen, wenn sie nicht unbedingt nötig sind, denn sie machen euer Programm unübersichtlich!**//​
 +
 +
 +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.1445506457.txt.gz · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)