Lektion 15 – Array

Ein Array als Containerschiff

Der Programmtext aus dem letzten Beispiel ist ziemlich lang, obwohl ständig fast die gleichen Befehle wiederholt werden. Das geht auch leichter – mit dem Array.

Ein Array ist eine spezielle Art der Variable. Sie kann gleich mehrere Werte speichern.

Stell Dir ein Array wie ein Containerschiff vor. Die Container sind nummeriert und wenn man in einen hinein sehen möchte, muss man die Nummer mit angeben. Die Nummern der Container fangen bei 0 an, was manchmal zu Verwirrung führt.

Array als Containerschiff Funktionsprinzip

Auch ein Array muss angelegt (deklariert) werden. Dazu gibt es mehrere Möglichkeiten.

So deklariert man ein leeres Array ohne Wertzuweisung.

int zahlen[6];

Hier wird ein Array mit dem Namen zahlen angelegt. Der Variablentyp ist int. Arrays können immer nur Werte vom gleichen Typ speichern. Hier also ganzzahlige Werte. Die 6 in den eckigen Klammern bedeutet, dass sozusagen das Array-Containerschiff sechs Container hat. Man nennt das die Länge des Arrays.

Array ohne Wertzuweisung anlegen

Eine andere Möglichkeit ein Array anzulegen, geht so:

int zahlen[] = {10, 78, 45, 67, 38, 14};

Hier werden dem Array Werte direkt zugewiesen und deshalb muss man die Länge das Arrays nicht extra in die eckigen Klammern schreiben. Auf der Tastatur findest du die eckigen Klammern übrigens beim PC mit Alt-Gr + 8 und Alt-Gr + 9, am Mac mit Alt + 5 und Alt + 6. Wie lang ist denn das Array? Genau: 6.

Array mit Wertzuweisung anlegen

Wie weist man aber Werte dem Array zu? Eigentlich genau so, als würde man sie in eine normale Variable schreiben, nur dass die Stelle im Array, in die wir schreiben wollen, angegeben werden muss.

zahlen[3] = 50;

in Array schreiben

Bleibt noch die Frage, wie man Werte aus dem Array ausliest. Sagen wir beispielsweise, wir möchten den Wert an der vierten Stelle (also Stelle 3) in die Variable a schreiben.

a = zahlen[3];

Array auslesen

In der letzten Lektion haben wir Tonfrequenzen abgespielt. Dazu haben wir die gleichen Befehle einfach kopiert. Jetzt wollen wir die Tonhöhen diesmal in ein Array übertragen. Wir bleiben zunächst bei dem kurzen Beispiel:

int frequenzen[] = {262, 294, 330, 349, 392, 392};

Gut. Wir haben ein Array vom Typ int angelegt. Es heißt frequenzen und speichert die Tonhöhen unserer Melodie. Um einen einzelnen Wert aus dem Array zu bekommen kann man einfach auf die Stelle zugreifen:

frequenzen[0] ergibt 262
frequenzen[1] ergibt 294
frequenzen[5] ergibt 392

Wir benutzen das Array also genau wie jede andere Variable, nur dass wir noch die Stelle mit angeben müssen.
Für die Melodie ist aber auch die Dauer der Töne von großer Bedeutung. Also speichern wir diese auch:

int tonDauer[]= {200, 200, 200, 200, 400, 400};

Die Länge der Arrays sollte auf jeden Fall gleich sein. Um nun alle Töne zu spielen, brauchen wir eine for-Schleife. Die Zählervariable zählt, welcher Ton gerade gespielt werden soll und übergibt das an die Arrays:

int frequenzen[] = {262, 294, 330, 349, 392, 392};
int tonDauer[]= {200, 200, 200, 200, 400, 400};
int tonAnzahl = 6;

void setup() {

}

void loop() {
  for (int ton=0; ton<tonAnzahl; ton=ton+1){
    tone(9, frequenzen[ton]);
    delay(tonDauer[ton]);
    noTone(9);
    delay(tonDauer[ton]);
  }
}

Der Code ist doch schon viel kleiner geworden. Wie ist das, wenn die ganze Melodie gespielt werden soll? Versuch es mal.


int frequenzen[] = {262, 294, 330, 349, 392, 392, 440, 440, 440, 440, 392, 440, 440, 440, 440, 392, 349, 349, 349, 349, 330, 330, 392, 392, 392, 392, 262};
int tonDauer[]= {200, 200, 200, 200, 400, 400, 200, 200, 200, 200, 800, 200, 200, 200, 200, 800, 200, 200, 200, 200, 400, 400, 200, 200, 200, 200, 800};
int tonAnzahl = 27;

void setup() {

}

void loop() {
  for (int ton=0; ton<tonAnzahl; ton=ton+1){
    tone(9, frequenzen[ton]);
    delay(tonDauer[ton]);
    noTone(9);
    delay(tonDauer[ton]);
  }
}

Titelbild von Roel Hemkes, CC-BY

4 Kommentare zu „Lektion 15 – Array

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.