Lektion 28:

Arrays

 Ein Array ist eine Liste von Werten. Die einzelnen Werte werden mit einer laufenden Nummer angesprochen. Das erste Element im Array hat in C++ immer die Nummer 0.

Ein Array wird erzeugt, wie eine einzelne Variable auch, nur daß hinter dem Namen in eckigen Klammern steht, wie viele Elemente das Array haben soll.

Beispiel:

int tage[12];

Man darf auch die Werte des Arrays beim Erzeugen gleich hineinschreiben:

int tage[12]={31,28,31,30,31,30,31,31,30,31,30,31};

Stellen Sie sich dieses Array als eine Reihe von Schubladen vor, in denen jeweils Werte liegen, und die mit den Ziffern 0 bis 11 beschriftet sind.

¦  0 ¦  1 ¦  2 ¦  3 ¦  4 ¦  5 ¦  6 ¦  6 ¦  8 ¦  9 ¦ 10 ¦ 11 ¦
-------------------------------------------------------------
¦ 31 ¦ 28 ¦ 31 ¦ 30 ¦ 31 ¦ 30 ¦ 31 ¦ 31 ¦ 30 ¦ 31 ¦ 30 ¦ 31 ¦
-------------------------------------------------------------

Die eckigen Klammern werden auch verwendet, um auf ein Array-Element zuzugreifen:

cout<<tage[1]; // Ausgabe: 28

Eine hübsche Anwendung für Arrays hat Daniel Lorch (ein Teilnehmer dieses Kurses) vorgeschlagen:

bool datumIstGueltig(int tag,int monat,int jahr)
{
   // gültiger monat?
   if (monat<1 ¦¦ monat>12return false;
   
   // gültiger tag?
   int tageImMonat[12] = {312831303130313130313031};
   
   if (istSchaltjahr(jahr) && monat == 2)
   {
      if (tag<1 ¦¦ tag>29return false;
   }
   else if (tag<1 ¦¦ tag>tageImMonat[monat-1])
   {
      return false;
   };
   
   return true;
};

 Die Arraygröße muß konstant sein. Es geht z.B.:

const int JAHRE=5;
double monatsAbrechnungen[JAHRE*12];

Der Compiler kann hier 5*12=60 berechnen.

Es geht aber nicht:

int jahre;
cin>>jahre;
double monatsAbrechnungen[jahre*12];

Hier kann der Compiler nichts berechnen, weil der Wert von jahre erst feststehen wird, wenn das Programm läuft.

Übung:

Die letzte Ziffer einer Zahl z kann man mit z%10 feststellen. Aus der Lektion mit den Schleifen haben Sie noch ein Programm, das die Primzahlen bis 100 auflistet.

Erweitern Sie dieses Programm, daß es bis 10000 die Anzahl der Primzahlen ausgibt, die als Endziffer die 0, die 1, usw. haben. Verwenden Sie dazu ein Array der Größe 10 (also mit den Indizes 0 bis 9), wobei die Array-Elemente den Anzahlen entsprechen.

Einsendungen:

Lösungsvorschlag
Schnellere Version (i=i+2)
Schnellere Version (i<=sqrt(zahl))


Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00