Problem: Von der Konsole sollen 10 Integer-Zahlen eingelesen und wieder ausgegeben werden.
D.h. zwischen Ein- und Ausgabe müssen 10 Zahlen gleichen Typs "gemerkt" werden.
Bisher kennen wir nur "einfache" Variablen, die sich gerade eine Zahl merken können.
int a; // kann nur eine Zahl merken
Arrays / Felder
int a[10]; // kann sich 10 Zahlen merken
Bei dieser Definition wird ein ganzes Feld (Array) von Integer-Zahlen angelegt, d.h. Speicherplatz für 10 Zahlen reserviert:
|
Im Modell des Einsortierungskastens kann man sich ein Array als eine ganze Spalte oder Zeile vorstellen.
Die Nummerierung in C und Java fängt immer bei 0 an, d.h. das erste Element hat die Nummer 0: a[0] In der Mathematik nennt man a0 das Element "a Index 0". Um im Platz 3 etwas abzuspeichern verwendet man diesen Ausdruck: a[3] = 5; // a index 3 die 5 zuweisen Den Platz 3 wieder auslesen: Ausgabe a[3]; // a index 3 ausgeben Wie bei einfachen Variabeln sind die Inhalte nach der Definition noch nicht initialisiert, Der Vorteil von Arrays ist die Möglichkeit auf einzelne Elemente mit Hilfe einer Index-Variablen zuzugreifen: int a[10], i=3; a[i]=5; // Zuweisung über Index-Variable i |
Analyse
Bei unserem Problem müssen die 10 Zahlen nach und nach in ein Array eingelesen werden, die erste Zahl in a[0], die letzte Zahl in a[9].
Nach der Eingabe werden alle Zahlen wieder nacheinander ausgegeben.
Design
int a[10],i=0; do{ Eingabe a[i]; // lese Zahl in i-tes Element von a ein i++; // nächstes Element bestimmen }while(i<=9); // solange Array noch nicht voll for (i=0; i<=9; i++) Ausgabe a[i];
Programmierung / Implementierung / Test
Aufgabe: Implementieren und testen Sie das Programm, erstellen Sie ein Struktogramm!
Do-While-Schleife mit break
Problem: Die Eingabe soll nun beendet werden, wenn ein Wert kleiner 0 eingegeben wird.
Analyse
Die Eingabe unterbrechen wenn a[i] kleiner 0 eingegeben wurde.
Um Schleifen zu verlassen kann in C und Java der break-Befehl eingesetzt werden, die Verarbeitung verzweigt dann hinter die Schleife.
Design
int a[10],i=0; do{ Eingabe a[i]; // lese Zahl in i-tes Element von a ein if(a[i]<0) break; // wenn negative Zahl, breche Schleife ab i++; // nächstes Element bestimmen }while(i<=9); for (i=0; i<=9; i++) Ausgabe a[i]; |
Variablen a[10], i : Integer |
Programmierung / Implementierung / Test
Aufgabe: Implementieren und testen Sie das Programm!
Problem: Es werden seltsame Zahlen ausgegeben
Analyse
Wenn Sie nur 4 Zahlen einlesen aber 10 Zahlen ausgeben, sind die unteren 6 Zahlen ja nicht definiert, also sind die ausgegebenen Werte zufällig.
Lösung: Nur soviel Zahlen ausgeben, wie auch eingelesen wurden!
Nach dem Einlesen von 4 Zahlen hat i den Wert 4, es wird eine weitere Variable j benötigt, die bei der Ausgabe von 0 bis i-1 hochgezählt wird.
Design
int a[10],i=0,j; do{ Eingabe a[i]; // lese Zahl in i-tes Element von a ein if(a[i]<0) break; // wenn negative Zahl, breche Schleife ab i++; // nächstes Element bestimmen }while(i<=9); for (j=0; j<i; j++) Ausgabe a[j];
Programmierung / Implementierung / Test
Aufgabe: Implementieren und testen Sie das Programm, erstellen Sie ein Struktogramm!