MezData-Logo Creative Commons License 397 Lösungen Button :PI-BASIS: Arrays, Do-While-Schleife mit Break

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:

Element Speicher-Inhalt Mathe
a[0]   a0
a[1]   a1
a[2]   a2
a[3]   a3
a[4]   a4
a[5]   a5
a[6]   a6
a[7]   a7
a[8]   a8
a[9]   a9
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,
sie können zufällige Werte ('?') enthalten.

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!