Benutzer-Werkzeuge

Webseiten-Werkzeuge


einleitung:arrays

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:arrays [2018/04/27 22:05]
d.golovko
einleitung:arrays [2018/05/09 19:19] (aktuell)
d.golovko
Zeile 11: Zeile 11:
 | 5    | 1     | | 5    | 1     |
  
-In dieser Tabelle gibt es sechs Eintrage. An der 0. Stelle steht eine 3, an der 1. Stelle steht eine 1, usw. Wichtig ist, dass die Nummerierung bei 0 beginnt. Es kann auch zweidimensionale Arrays geben (z.B. um eine Tabelle aus x- und y-Koordinaten ​abzuspeichern), dreidimenstionale usw. Im Folgenden beschränken wir uns auf eindimensionale Arrays. ​+In dieser Tabelle gibt es sechs Eintrage. An der 0. Stelle steht eine 3, an der 1. Stelle steht eine 1, usw. Wichtig ist, dass die Nummerierung bei 0 beginnt. Es kann auch zweidimensionale Arrays geben (z.B. um eine Tabelle aus x- und y-Koordinaten ​abzulegen), dreidimenstionale usw. Im Folgenden beschränken wir uns auf eindimensionale Arrays. ​
  
-===Deklaration und Zugriff===+====1. Deklaration und Zugriff ​beim Arduino====
 Um so ein Array bei dem Arduino anzulegen, muss folgender Code geschrieben werden: Um so ein Array bei dem Arduino anzulegen, muss folgender Code geschrieben werden:
 <code c++> <code c++>
 int zahlen[] = {3,​1,​7,​8,​2,​1};​ int zahlen[] = {3,​1,​7,​8,​2,​1};​
 </​code>​ </​code>​
-Die Klammern [] stehen dafür, dass die Variable ''​zahlen''​ auf ein Array zeigt. Dass ist ein Speicher im Speicher. Das Schlüsselwort ''​int''​ steht dafür, dass das folgende Array nur Integer-Werte beinhaltet. Ein Array kann also nur einen Datentyp enthalten. +Die Klammern [] stehen dafür, dass die Variable ''​zahlen''​ auf ein Array zeigt und nicht auf eine einzelne Variable. Das Schlüsselwort ''​int''​ steht dafür, dass das folgende Array nur Integer-Werte beinhaltet. Ein Array kann also nur einen Datentyp enthalten. 
-Um ein Array mit Werten zu füllen, kann die Variante oben verwendet werden. Mit ''​{3,​1,​7,​8,​2,​1}''​ werden die Zahlen der Reihe nach in des Array geschrieben und somit ein Array der Länge 6 erstellt. Achtung: Arrays sind statisch, das bedeutet, dass die Länge, nachdem es angelegt wurde, nicht mehr geändert werden kann. +Um ein Array mit Werten zu füllen, kann die Variante oben verwendet werden. Mit ''​{3,​1,​7,​8,​2,​1}''​ werden die Zahlen der Reihe nach in das Array geschrieben und somit ein Array der Länge 6 erstellt. Achtung: Arrays sind statisch, das bedeutet, dass die Länge, nachdem es angelegt wurde, nicht mehr geändert werden kann. 
  
 Man muss jedoch nicht beim deklarieren gleich Werte angeben. Man muss jedoch nicht beim deklarieren gleich Werte angeben.
Zeile 34: Zeile 34:
 zahlen[0] = 3 zahlen[0] = 3
 </​code>​ </​code>​
-So kann an jede Stelle das Array geschrieben werden und auch überschrieben werden. +So kann in jede Stelle das Arrays ​geschrieben werden und auch jeder Wert überschrieben werden. 
-Wenn ein Wert ausgelsen werden soll und gespeichert,​ dann kann man das wie folgt machen:+Wenn ein Wert ausgelesen ​und gespeichert ​werden soll, dann kann man dies wie folgt machen:
 <code c++> <code c++>
 int x = zahlen[1] int x = zahlen[1]
Zeile 44: Zeile 44:
 <code cpp> <code cpp>
 int zahlen[] = {3,​1,​7,​8,​2,​1};​ int zahlen[] = {3,​1,​7,​8,​2,​1};​
-int arrayLaenge = sizeof(zahlen)/​sizeof(zahlen[0]);​  +int arrayLaenge = sizeof(zahlen)/​sizeof(zahlen[0]); ​// alternativ: sizeof(zahlen)/​2 
-// Grundsätzlich ​wird hier die Größe des Platzes, den das Array im Speicher annimmt, durch die Größe eines Elementes geteilt.  +// Hier wird die Größe des Platzes, den das Array im Speicher annimmt, ​ 
-int letztesElement = zahlen[arrayLaenge-1];​ // Wichtig: der letzte Index ist um 1 kleiner als die Array-Laenge.+// durch die Größe eines Elementes geteilt.  
 +int letztesElement = zahlen[arrayLaenge-1]; ​ 
 +// Wichtig: der letzte Index ist um 1 kleiner als die Array-Länge.
 </​code>​ </​code>​
  
  
-In C++/Arduino wird euch der Compiler nicht daran hindern, auf einen Index zuzugreifen,​ der größer ist als die Länge des Arrays. Wenn ihr diese Stellen im Speicher überschreibt,​ die nicht zu eurem Array gehören, kann es zu unerwünschten Auswirkungen führen. (In Java/​Processing ist das anders: ihr bekommt einen Fehler beim Kompilieren.)+In C++/Arduino wird euch der Compiler nicht daran hindern, auf einen Index zuzugreifen,​ der größer ist als die Länge des Arrays. Wenn ihr diese Stellen im Speicher überschreibt,​ die nicht zu eurem Array gehören, kann es zu unerwünschten Auswirkungen führen. (In Java/​Processing ist das anders: ihr bekommt ​in diesem Fall einen Fehler beim Kompilieren.) 
 + 
 +Eine gute Zusammenstellung bekommt ihr auch in der [[http://​arduino.cc/​de/​Reference/​Array|Arduino Referenz]]. 
 + 
 +Ein funktionierendes Beispiel mit Arrays findet ihr z.B. unter [[https://​www.arduino.cc/​en/​Tutorial/​ToneMelody|Beispiele=>​Digital=>​ToneMelody]]. 
 + 
 +Oder wir können mit Hilfe von Arrays euren Servo dazu bringen, mehrere vorgegebe Positionen anzunehmen (z.B. bei einem Gießroboter,​ der Blumen abwechselnd in Richtungen 30, 45, 90 und 150 Grad gießen soll): 
 + 
 +<code cpp>  
 +#include <​Servo.h>​ 
 +int servoPin = 2;  
 +Servo motor; 
 +int positions[] = {30, 45, 90, 150}; 
 + 
 +void setup() { 
 +  Serial.begin(9600);​ 
 +  motor.attach(servoPin);​ 
 +
 + 
 +void loop() { 
 +  for (int i = 0; i < sizeof(positions)/​sizeof(positions[0]);​ i++) { 
 +    motor.write(positions[i]);​ 
 +    delay(1000);​ 
 +  } 
 +  delay(1000);​ 
 +
 +</​code>​ 
 + 
 +====2. Schachbrett:​ Ein Beispiel mit einem zweidimensionalen Array==== 
 + 
 +Stellen wir uns vor, wir wollen jetzt einen Schachroboter bauen. Dafür wollen wir u.A. das Schachbrett mit seinen Farbwerten (weiß oder schwarz) für jedes Feld initialisieren und abspreichern. Dafür brauchen wir ein zweidimensionales Array in der Größe 8x8. Dieses Array wird vom Typ ''​boolean''​ sein (weiß = ''​true'',​ schwarz = ''​false''​). Wir legen dieses Array so an: 
 +<code cpp> 
 +boolean brett[8][8];​ 
 +</​code>​ 
 + 
 + 
 +Jetzt können wir dieses Array mit Werten auffühlen und diese ausgeben. Auf die einzelnen Stellen können wir mit Hilfe einer geschachtelten for-Schleife zugreifen.  
 + 
 +<code cpp> 
 +void setup() { 
 +  Serial.begin(9600);​ 
 + 
 +  boolean brett[8][8];​ // das Schachbrett 
 + 
 +  boolean istWeiss = true; // zeigt, ob die schwarze oder weisse Farbe dran ist 
 +  // Das Array mit Werten füllen: 
 +  for (int i = 0; i < 8; i++) { 
 +    for (int j = 0; j < 8; j++) { 
 +      brett[i][j]= istWeiss; 
 +      istWeiss = !istWeiss; // den Farbwert umkehren 
 +    } 
 +    istWeiss = !istWeiss; // am Ende der Zeile den Farbwert nochmal umkehren 
 +  } 
 + 
 +  // Das Array ausgeben: 
 +  for (int i = 0; i < 8; i++) { 
 +    for (int j = 0; j < 8; j++) { 
 +      Serial.print(brett[i][j]);​ 
 +    } 
 +    Serial.println();​ // Zeilenumbruch am Ende einer Zeile 
 +  } 
 +
 + 
 +void loop() { 
 + 
 +
 +</​code>​ 
  
-Eine gute Zusammenstellung bekommt ihr auch noch hier: [[http://​arduino.cc/​de/​Reference/​Array|Array]] 
einleitung/arrays.1524859549.txt.gz · Zuletzt geändert: 2018/04/27 22:05 von d.golovko