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:00]
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 14: Zeile 11:
 Serial.println(messwert);​ // gib den aktuellen Inhalt von "​messwert"​ als Text aus. Serial.println(messwert);​ // gib den aktuellen Inhalt von "​messwert"​ als Text aus.
 </​code>​ </​code>​
-==== Eigenschaften von Variablen und Deklaration ==== 
-Die Details unterscheiden sich von Programmiersprache zu Programmiersprache. In Arduino/C++ muss eine Variable dem Programm zunächst "​vorgestellt"​ werden, damit das Programm sie kennt und damit arbeiten kann. 
  
-Das kann z.B. so aussehen: +==== Variablen müssen vor der Verwendung "​deklariert"​ werden ====
-''​int ledPinNummer=13;''​+
  
-Bei dieser sogenannten //​**Deklaration**//​ werden ​auch gleich die wichtigsten Eigenschaften ​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: 
-=== Typ === +<code c++>int ledPinNummer;​ //​Deklaration der Variable mit dem Namen "​ledPinNummer"​ vom Typ: "​int"</​code>​ 
-Der Typ einer Variable gibt vor, was darin gespeichert werden kann. In unserem Beispiel ist das eine Zahl ohne Nachkommastellen ''​int''​. ​+ 
 +=== 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''​)
  
 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 3Ein Beispiel ist der Typ ''​String''​, der für eine Zeichenkette (ein Worteinen Satz usw.) steht
-=== Namen === +
-Unter diesem Namen kann die Variable ​im Programm verwendet werdenDenkt euch immer einen Namen aus, der sagtwas drinsteckt - so verliert ihr später nicht den Überblick und euer Team versteht, was ihr gemacht habt.+
  
-Also z.B. ''​ledPinNummer''​ anstelle von ''​lp''​. +=== Variablennamen ​=== 
-=== Gültigkeitsbereich (Scope) ​=== +Unter diesem Namen kann die Variable ​im Programm ​verwendet werden. Groß- und Kleinschreibung macht dabei einen Unterschied.
-Eine Variable ​kann nur in einem Teil des Programms existieren oder vom gesamten ​Programm ​aus zugänglich sein.+
  
-Dadurch ist es möglich, ​//lokale// Variablen ​zu erzeugen, die (wie ein Schmierzettel) ​nur innerhalb ​einer Funktion gültig ​sind - sie nehmen keinen Speicherplatz wegwenn die Funktion nicht läuft ​und können auch nicht von Außerhalb verändert 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.// Also z.B. ''​ledPinNummer''​ anstelle von ''​lp''​. Aus demselben Grund vermeidet ​Variablen, die nur aus einer Buchstabe bestehen. Eine Ausnahme ​sind Fällewo dies inhaltlich bedingt ist, z.B. ''​x'' ​und ''​y''​ für die entsprechenden Koordinaten im 2D-Raum.  
 +==== Mit "​="​ Werte in Variablen schreiben ("​Zuweisung"​) ==== 
 +Um einen Wert in eine Variable zu schreiben, verwendet ihr das einfache Gleichheitszeichen
  
-Alle Variablendie innerhalb eines mit geschweiften Klammern umschlossenen Bereichs ("Codeblock") deklariert werden, sind auch nur in diesem Bereich gültig (//lokal//). Das ist der Normalfall.+Das Programm rechnet dann zuerst das auswas auf der **//rechten Seite//** des "=" ​steht und speichert das Ergebnis ​in der Variable auf der **//linken Seite//**:
  
-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.+Dieser Vorgang heißt ​"**//Zuweisung//**" oder "​**//​einer ​Variable ​einen Wert zuweisen//​**"​
  
 +also z.B.
 +<code c++>​delayZeit=1000/​blinkFrequenz;</​code>​
  
-//**Vermeidet globale Variablenwenn sie nicht unbedingt nötig sind (das sind sie fast nie...).**//+=== Zuweisungen sind keine Gleichungen! === 
 +Das Gleichheitszeichen hat in der Programmierung eine andere Bedeutung als in der Mathematik! 
 + 
 +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: 
 +<code c++>  
 +int var1;  // deklariere Variable "​var1"​ 
 +int var2;  // deklariere Variable "​var2"​ 
 +var1=1; ​   // weise "​var1"​ den Wert "​1"​ zu. 
 +var2=var1; ​   // weise "​var2"​ das zu, was aktuell in "​var1"​ steht. 
 +Serial.println(var1);​ //  --> gibt "​1"​ aus 
 +Serial.println(var2);​ //  --> gibt auch "​1"​ aus 
 + 
 +var1=2; ​   // weise "​var1"​ den neuen Wert "​2"​ zu. --> var2 wird dadurch ​nicht verändert. 
 +Serial.println(var1); //  --> gibt "​2"​ aus 
 +Serial.println(var2);​ //  --> gibt immer noch "​1"​ aus 
 +</​code>​ 
 + 
 +So sind auch Ausdrücke möglich, die mathematisch keinen Sinn ergeben würden (bzweine "​falsche Aussage"​ wären) 
 +<code c++> 
 +int var;        // deklariere Variable "​var"​ 
 +var = 1;        // weise "​var"​ den Wert "​1"​ zu. 
 +var = var + 1;    // nimm das, was gerade in "​var"​ steht, addiere dazu "​1"​ und speichere das Ergebnis wieder in "​var"​ 
 +Serial.println(var); //  --> gibt "​2"​ aus 
 +var = var + 1;    // nimm das, was gerade in "​var"​ steht, addiere dazu "​1"​ und speichere das Ergebnis wieder in "​var"​ 
 +Serial.println(var);​ / ​-->​ gibt "​3"​ aus 
 +</code>
  
-=== Inhalt ​===+=== 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**//​.
  
-In unserem Beispiel initialisieren wir die Variable ''​ledPinNummer''​ mit dem Wert ''​13''​.+In unserem Beispiel initialisieren wir die Variable ''​ledPinNummer''​ mit dem Wert ''​13''​
 +<code c++>int ledPinNummer=13;​ //​Deklariere die Variable mit dem Namen "​ledPinNummer"​ vom Typ: "​int"​ und fülle sie gleich mit "​13"</​code>​
  
 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!).
 +\\
 +\\
  
-==== Werte in Variablen schreiben ​("​Zuweisung"​) ==== +==== Gültigkeitsbereich ​(Scope) ==== 
-Ihr könnt ​in eurem Programm jederzeit einen neuen Wert in eine Variable ​schreiben.+Eine Variable kann entweder... 
 +  *  nur in einem Teil des Programms existieren (**//​lokale ​Variable//**) 
 +...oder...\\ 
 +  *   vom gesamten Programm aus zugänglich sein. (**//​globale Variable//​**)
  
-Das funktioniert,​ indem in in einer Zeile zuerst en Namen der Variable, ​dann ein einfaches Gleichheitszeichen und dann den neuen Inhalt schreibtDas Programm rechnet dann zuerst alles auswas auf der rechten Seite des Gleichheitszeichen steht, und schreibt das Ergebnis in die Variable auf der linken Seite.+=== 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 werdenin der sie deklariert wurden - sie nehmen dadurch keinen Speicherplatz wegwenn die Funktion nicht läuft ​und können auch nicht von Außerhalb verändert werden
  
-Dieser Vorgang heißt ​"**//Zuweisung//**" oder "​**//​einer ​Variable ​einen Wert zuweisen//​**"​+=== 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.
  
-Beispiel: ''​delayZeit=1000/blinkFrequenz;''​+//​**Vermeidet globale Variablen, wenn sie nicht unbedingt nötig sind, denn sie machen euer Programm unübersichtlich!**//​
  
  
-<note important>​Das Gleichheitszeichen aus der Mathematik entspricht nicht dem Gleichheitszeichen ​in der Programmierung! In der Mathematik bedeutet "​="​ dass die Ausdrücke auf beiden Seiten das gleiche Ergebnis liefern. In der Programmierung,​ dass das Ergebnis des Ausdrucks auf der rechten Seite in der Variablen auf der linken Seite gespeichert wirdHier ein Beispiel das im mathematischen Sinne falsch wäre: +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 ​c+++ 
-int i+<​code ​cpp>  
-1;  +int maximum = 0// groesster gemessener Wert 
-i + 1; // Wir erhöhen die Variable i um 1.+ 
 +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>​ </​code>​
-</​note>​+ 
 + 
 + 
  
einleitung/variablen.1445504448.txt.gz · Zuletzt geändert: 2016/01/21 12:45 (Externe Bearbeitung)