Städte-Info

Lese­zeit: 5 Minu­ten

Navi­ga­ti­on

Bei die­ser Auf­ga­be lernst du einen neu­en Daten­typ ken­nen. In ➨Arrays las­sen sich nur Daten vom glei­chen Typ defi­nie­ren.

Struk­tu­ren (struct) sind eine Samm­lung und Beschrei­bung ver­schie­de­ner Daten. Sie kön­nen belie­bi­ge Daten­ty­pen ver­wen­den. 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 zusam­men­ge­fasst.

Zunächst wird eine Scha­blo­ne defi­niert:

struct Stadt
{
  int Platz;
  String Name;
  String KFZ_Kennzeichen;
  float Einwohner;
  String Vorwahl;
  int Hoehe;
};

Defi­ni­ti­on der Daten:

const int MAX = 3;
struct Stadt Namen[MAX] = 
{
  {1, "Berlin", "B", 3.64, "030", 30},
  {2, "Hamburg", "HH", 1.84, "040", 6},
  {3, "M\u00fcnchen", "M", 1.47, "089", 519}
};

Eine Metho­de zeigt die Daten an:

for (int i = 0; i < MAX; i++ )
{
  Serial.print(String(Namen[i].Platz) + "\t");
  Serial.print(Namen[i].Name + "\t\t");
  Serial.print(Namen[i].KFZ_Kennzeichen + "\t\t");
  Serial.print(String(Namen[i].Einwohner) + "\t\t");
  Serial.print(String(Namen[i].Hoehe) + "\t\t");
  Serial.println(Namen[i].Vorwahl);
}

So sieht es aus:

Nach Ein­ga­be einer Zahl zwi­schen 1 und 4 im Seri­el­len Moni­tor soll die Infor­ma­ti­on zur ent­spre­chen­den Stadt des Arrays ange­zeigt wer­den.
Für die­se Auf­ga­be brauchst du nur den Ardui­no.

Ergän­ze die Daten mit den jewei­li­gen Bun­des­län­der und erstel­le die Daten für Köln.

{4, "K\u00f6ln", "K", 1.04, "0221", 53, "NRW"}

Du musst auch die Grö­ße des Arrays (MAX) ändern.

So soll es aus­se­hen:

Die ↗Umlau­te musst du als Uni­code dar­stel­len:

\u00e4d = ä
\u00df = ß
\u00fc = ü
\u00f6 = ö

Im setup-Teil wird der Seri­el­le Moni­tor gestar­tet und über den Ablauf des Pro­gramms infor­miert. Mit Hil­fe des Tabu­la­tors (\t} wird die Aus­ga­be for­ma­tiert.

void setup()
{
  Serial.begin(9600);

  // Info
  Serial.println("Liste der Gro\u00dfst\u00e4dte mit mehr als 1 Mio 
  Einwohner");
  Serial.println("----------------------------------------------------------");
  Serial.println("1 = Berlin");
  Serial.println("2 = Hamburg");
  Serial.println("3 = M\u00fcnchen");
  Serial.println("4 = K\u00f6ln");
     
  Serial.println("----------------------------------------------------------");
  Serial.println("Platz\tStadt\t\t\KFZ\tEinw. in Mio.\tH\u00f6he\tVorwahl\t\t\
  Bundesland");
}

Der loop-Teil. Beach­te die Kom­men­ta­re.

void loop()
{
  // auf serielle Eingabe warten
  while (Serial.available() > 0)
  {
    // Eingabe im Seriellen Monitor lesen
    String Eingabe = Serial.readStringUntil("\n");

    // String Eingabe nach int umwandeln
    // die Methode ZeigeDaten kann dann direkt aufgerufen werden
    int Auswahl = Eingabe.toInt();

    // wenn Auswahl > 0 und < 5
    // verhindern dass größere/kleinere Zahlen eingegeben werden
    // weil das Array mit 0 beginnt, 1 abziehen
    if (Auswahl > 0 && Auswahl < 5) ZeigeDaten(Auswahl - 1);
  }
}

Die Metho­de Zei­ge­Da­ten:

void ZeigeDaten(int i)
{
  // bei der Einwohnerzahl . durch , ersetzen
  String Einwohner =  String(Namen[i].Einwohner);
  Einwohner.replace(".", ",");
  
  // Daten anzeigen, mit Tabulator (\t) formatieren
  Serial.print(String(Namen[i].Platz) + "\t");
  Serial.print(Namen[i].Name + "\t\t");
  Serial.print(Namen[i].KFZ_Kennzeichen + "\t\t");
  Serial.print(Einwohner + "\t");
  Serial.print(String(Namen[i].Hoehe) + "\t");
  Serial.print(Namen[i].Vorwahl + "\t\t");
  Serial.println(Namen[i].Land);
}


Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 12. Jul 2020 @ 0:17