⇒Arrays erweisen sich als geeignet, wenn eine Vielzahl von Daten eines gleichen Variablentyps verarbeitet werden sollen. Strukturen (struct) sind hingegen eine Sammlung und Beschreibung verschiedener Daten. Sie können beliebige Datentypen verwenden.
Die Struktur ist die Vorlage für die Definition der konkreten Daten.
In den Beispielen werden verschiedene Informationen zu den einzelnen Städten mithilfe unterschiedlicher Datentypen zusammengefasst.
Beispiel Definition als einzelne Arrays:
Für jede Stadt wird ein Array angelegt.
Die Vorlage:
struct Stadt
{
int Rang;
String Name;
String KFZ_Kennzeichen;
float Einwohner;
String Vorwahl;
int Hoehe;
};
Definition der Daten:
Stadt Berlin =
{
1,
"Berlin",
"B",
3.64,
"030",
30
};
Stadt Hamburg =
{
2,
"Hamburg",
"HH",
1.84,
"040",
6
};
Stadt Muenchen =
{
3,
"München",
"M",
1.84,
"040",
519
};
Die Zuordnung der verschiedenen Variable einer struct wird über die Punkt-Schreibweise erledigt.
- StadtName.Rang -> int Rang
- Stadtname.Name -> String Name
- Stadtname.KFZ-Kennzeichen -> String KFZ-Kennzeichen
- StadtName.Einwohner -> float Einwohner
- StadtName.Vorwahl -> String Vorwahl
- StadtName.Hoehe -> int Hoehe
Beispiele:
Berlin.Name -> Berlin
Hamburg.Hoehe -> 520
Muenchen.Rang -> 3
Eine Funktion zeigt die Daten an ...
void ZeigeDaten(struct Stadt StadtName)
{
Serial.print(String(StadtName.Rang) + "\t");
Serial.print(StadtName.Name + "\t\t");
Serial.print(StadtName.KFZ_Kennzeichen + "\t");
Serial.print(String(StadtName.Einwohner) + "\t\t");
Serial.print(String(StadtName.Hoehe) + "\t\t");
Serial.println(StadtName.Vorwahl);
}
… sie wird mit dem Namen der Stadt aufgerufen.
ZeigeDaten(Berlin);
ZeigeDaten(Hamburg);
ZeigeDaten(Muenchen);
Das vollständige Programm:
struct Stadt
{
int Rang;
String Name;
String KFZ_Kennzeichen;
float Einwohner;
String Vorwahl;
int Hoehe;
};
Stadt Berlin =
{
1,
"Berlin",
"B",
3.64,
"030",
30
};
Stadt Hamburg =
{
2,
"Hamburg",
"HH",
1.84,
"040",
6
};
Stadt Muenchen =
{
3,
"München",
"M",
1.84,
"040",
519
};
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// Formatierung mit Tabstopps (\t)
Serial.println("Rang\tName\t\tKfz\tEinwohner\tHöhe über NN\tVorwahl");
ZeigeDaten(Berlin);
ZeigeDaten(Hamburg);
ZeigeDaten(Muenchen);
}
void loop()
{
// bleibt leer, Programm läuft nur einmal
}
void ZeigeDaten(struct Stadt StadtName)
{
Serial.print(String(StadtName.Rang) + "\t");
Serial.print(StadtName.Name + "\t\t");
Serial.print(StadtName.KFZ_Kennzeichen + "\t");
Serial.print(String(StadtName.Einwohner) + "\t\t");
Serial.print(String(StadtName.Hoehe) + "\t\t");
Serial.println(StadtName.Vorwahl);
}
Beispiel Definition als zusammengefasstes Array:
Die Vorlage:
struct Stadt
{
int Rang;
String Name;
String KFZ_Kennzeichen;
float Einwohner;
String Vorwahl;
int Hoehe;
};
const int Max = 3;
struct Stadt Namen[Max] =
{
{1, "Berlin", "B", 3.64, "030", 30},
{2, "Hamburg", "HH", 1.84, "040", 6},
{3, "München", "M", 1.47, "089", 519}
};
Der Zugriff auf die Elemente erfolgt jetzt über die Punkt-Schreibweise und die Nummer des Elements.
Die Zählung beginnt mit 0!
Beispiele:
Namen[0].Rang -> 1
Namen[1].Name -> Hamburg
Namen[2].Hoehe -> 519
Da es sich um ein Array handelt, kann die Ausgabe über eine for-Schleife erledigt werden:
for (int i = 0; i < Max; i++)
{
Serial.print(String(Namen[i].Rang) + "\t");
Serial.print(Namen[i].Name + "\t\t");
Serial.print(Namen[i].KFZ_Kennzeichen + "\t");
Serial.print(String(Namen[i].Einwohner) + "\t\t");
Serial.print(String(Namen[i].Hoehe) + "\t\t");
Serial.println(Namen[i].Vorwahl);
}
Das vollständige Programm:
struct Stadt
{
int Rang;
String Name;
String KFZ_Kennzeichen;
float Einwohner;
String Vorwahl;
int Hoehe;
};
const int Max = 3;
struct Stadt Namen[Max] =
{
{ 1, "Berlin", "B", 3.64, "030", 30 },
{ 2, "Hamburg", "HH", 1.84, "040", 6 },
{ 3, "München", "M", 1.47, "089", 519 }
};
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// Formatierung mit Tabstopps (\t)
Serial.println("Rang\tName\t\tKfz\tEinwohner\tHöhe über NN\tVorwahl");
ZeigeDaten();
}
void loop()
{
// bleibt leer, Programm läuft nur einmal
}
void ZeigeDaten()
{
for (int i = 0; i < Max; i++)
{
Serial.print(String(Namen[i].Rang) + "\t");
Serial.print(Namen[i].Name + "\t\t");
Serial.print(Namen[i].KFZ_Kennzeichen + "\t");
Serial.print(String(Namen[i].Einwohner) + "\t\t");
Serial.print(String(Namen[i].Hoehe) + "\t\t");
Serial.println(Namen[i].Vorwahl);
}
}
Nachträgliche Änderungen der Zuweisungen sind möglich:
Berlin.Name ="Berlin-Kreuzberg";
Hamburg.Hoehe = 2;
Namen[0].Name = "Berlin-Kreuzberg";
Namen[1].Hoehe = 2;
Wenn die ⇒Umlaute nicht korrekt angezeigt werden ...
Arrays
Letzte Aktualisierung: