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 21:13]
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 ​ist, 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ängenachdem es angelegt wurdenicht mehr geändert werden kann. 
  
 Man muss jedoch nicht beim deklarieren gleich Werte angeben. Man muss jedoch nicht beim deklarieren gleich Werte angeben.
Zeile 26: Zeile 26:
 </​code>​ </​code>​
  
-Auch hier wird ein Array der Länge 6 erzeugt. Wenn man den Inhalt des Arrays auf dem Seriellen Monitor ausgibt, bekommt man +Auch hier wird ein Array der Länge 6 erzeugt. Wenn man an dieser Stelle ​den Inhalt des Arrays auf dem Seriellen Monitor ausgibt, bekommt man Zahlen, die willkürlich aussehen. Dies liegt daran, dass an den jeweiligen Stellen im Speicher vorher andere Werte abgelegt wurden, die wir noch nicht überschrieben haben.  
 + 
  
 Auf den ersten Eintrag kann man wie folgt etwas schreiben: Auf den ersten Eintrag kann man wie folgt etwas schreiben:
Zeile 32: Zeile 34:
 zahlen[0] = 3 zahlen[0] = 3
 </​code>​ </​code>​
-So kann an jede Stelle das Array geschrieben werden und auch überschrieben werden, sofern diese Stelle existiertWenn man bei Zahlen auf die Stelle 6 zugreifen wollte +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]
 </​code>​ </​code>​
  
-Eine gute ZUsammenstellung ​bekommt ihr auch noch hier: [[http://​arduino.cc/​de/​Reference/​Array|Array]]+ 
 +Auf die letzte Stelle des Arrays kann man auch so zugreifen:​ 
 +<code cpp> 
 +int zahlen[] = {3,​1,​7,​8,​2,​1};​ 
 +int arrayLaenge = sizeof(zahlen)/​sizeof(zahlen[0]);​ // alternativ: sizeof(zahlen)/​2 
 +// Hier wird die Größe des Platzes, den das Array im Speicher annimmt,  
 +// 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>​ 
 + 
 + 
 +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>​ 
 + 
einleitung/arrays.1524856412.txt.gz · Zuletzt geändert: 2018/04/27 21:13 von d.golovko