struct

Lese­zeit: 3 Minu­ten

Arrays erwei­sen sich als geeig­net, wenn eine Viel­zahl von Daten eines glei­chen Varia­blen­typs ver­ar­bei­tet wer­den sol­len. Struk­tu­ren (struct) sind hin­ge­gen eine Samm­lung und Beschrei­bung ver­schie­de­ner Daten. Sie kön­nen belie­bi­ge Daten­ty­pen verwenden. 

Die Struk­tur ist die Vor­la­ge für die Defi­ni­ti­on der kon­kre­ten Daten.

In den Bei­spie­len wer­den ver­schie­de­ne Infor­ma­tio­nen zu den ein­zel­nen Städ­ten mit­hil­fe unter­schied­li­cher Daten­ty­pen zusammengefasst.

Bei­spiel Defi­ni­ti­on als ein­zel­ne Arrays:

Die Vor­la­ge:

struct Stadt
{
int Platz;
String Name;
String KFZ_Kennzeichen;
float Ein­woh­ner;
String Vor­wahl;
int Hoe­he;
};

Defi­ni­ti­on der Daten:

Stadt Ber­lin =
{
1,
"Ber­lin",
"B",
3.64,
"030",
30
};

Stadt Ham­burg =
{
2,
"Ham­burg",
"HH",
1.84,
"040",
6
};

Stadt Muen­chen =
{
3,
"Mün­chen",
"M",
1.84,
"040",
519
};

Die Zuord­nung der der ver­schie­de­nen Varia­ble einer struct wird über die Punkt-Schreib­wei­se erledigt.

  • StadtName.Platz → int Platz
  • Stadt​na​me​.Name → String Name
  • Stadtname.KFZ-Kennzeichen → String KFZ-Kennzeichen 
  • StadtName.Einwohner → float Einwohner
  • StadtName.Vorwahl → String Vorwahl
  • StadtName.Hoehe → int Hoehe

Bei­spie­le:

Ber​lin​.Name = "Ber­lin-Kreuz­berg";
Hamburg.Hoehe = 520;
Muenchen.Platz = 4;

Eine Funk­ti­on zeigt die Daten an ...

void ZeigeDaten(struct Stadt Stadt­Na­me)
{
Serial.print(String(StadtName.Platz) + "\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 voll­stän­di­ge Programm:

struct Stadt
{
  int Platz;
  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("Platz\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.Platz) + "\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);
}

Bei­spiel Defi­ni­ti­on als zusam­men­ge­fass­tes Array:

Die Vor­la­ge:

struct Stadt
{
int Platz;
String Name;
String KFZ_Kennzeichen;
float Ein­woh­ner;
String Vor­wahl;
int Hoe­he;
};

const int Max = 3;

struct Stadt Namen[Max] =
{
{1, "Ber­lin", "B", 3.64, "030", 30},
{2, "Ham­burg", "HH", 1.84, "040", 6},
{3, "M\u00fcnchen", "M", 1.47, "089", 519}
};

Der Zugriff auf die Ele­men­te erfolgt jetzt über die Punkt-Schreib­wei­se und die Num­mer des Elements.

Bei­spiele:

Namen[0].Name = "Ber­lin-Kreuz­berg";
Namen[1].Platz = 4;
Namen[2].Hoehe = 520;

Da es sich um ein Array han­delt, kann die Aus­ga­be über eine for-Schlei­fe erle­digt werden:

for (int i = 0; i < Max; i++ )
{
Serial.print(String(StadtName.Platz) + "\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);
}


Arrays Arrays

Letzte Aktualisierung: 27. Nov 2023 @ 9:38