Beruflich Dokumente
Kultur Dokumente
Adrian Schüpbach
adrian_laurent.schuepbach@alumni.ethz.ch
I Arrays
I Was sind Arrays?
I Wozu braucht man Arrays?
I Wie stehen Arrays in Zusammenhang mit Schleifen?
I Exceptions bei Arrays
I Was passiert bei Fehlern?
I Gesehen
I Variablen speichern Daten
I Variablen haben Datentyp
I Eine Variable ⇔ eine Zahl ...
I ... unflexibel, wenn viele Daten bearbeitet werden sollen
I Arrays
I Tabelle gleichartiger Variablen
I Grösse definierbar
I Deklaration
I int[] zahlen;
I boolean[] wahrheitswerte;
Array-Beispiele
z[0] = a;
z[1] = 19;
r = z[0];
Array-Länge abfragen
I Algorithmus finden
I Algorithmus
1. Variable, die die Summe enthält,
erstellen
2. Variable mit 0 initialisieren
3. Zählschleife (for-Schleife) erstellen
4. Im Anweisungsblock
I Zählvariable benutzen, um
Array-Element zu lesen
I Aktuelles Element zur Summenvariable
addieren
I Algorithmus
1. Variable, die die Summe enthält,
erstellen
2. Variable mit 0 initialisieren
3. Zählschleife (for-Schleife) erstellen
4. Im Anweisungsblock summe
i< true
I Zählvariable benutzen, um z.length? += z[i];
Array-Element zu lesen
I Aktuelles Element zur Summenvariable false
addieren Ausgabe
der i++;
Summe
// Summe
for (int i = 0; i < z. length ; i++) {
summe += z[i];
}
}
Programmieren und Problemlösen – FS16 c Adrian Schüpbach 10
Array-Initialisierung
Direkte Array-Initialisierung
// Summe
for (int i = 0; i < z. length ; i++) {
summe += z[i];
}
}
}
I Zuweisung von z zu x
I Der Zeiger (Pfeil) wird
von z nach x kopiert
I Array wird nicht kopiert
I Die Array-Elemente können
auch über x[i] benutzt werden
I Zuweisung von z zu x
I Der Zeiger (Pfeil) wird
von z nach x kopiert
I Array wird nicht kopiert
I Die Array-Elemente können
auch über x[i] benutzt werden
int x[] = z;
x
int x[] = z;
int x[] = z;
int x[] = z;
x = null;
x x [0] x [1] x [2] x [3] x [4]
I Gegeben:
I Grosse Menge zufälliger oder gemessener Zahlen
I Kleinste Zahl: 0
I Grösste Zahl: 9
I Zahlen in unsortiertem Array gegeben
I Gesucht
I Wie oft kommt die Zahl 6 vor?
I Algorithmus
1. Erzeuge “Index-Array” mit höchstem Index 9
I ⇒ 10 Elemente!
2. Schleife über alle gegebene Zahlen
I Zahl als Index benutzen
I “Index-Array” an diesem Index um eins erhöhen
3. Im “Index-Array” bei Index 6 nachschauen, wie hoch der
Zähler steht
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
0 0 0 0 0 0 0 0 0 0
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
0 0 0 0 0 0 1 0 0 0
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
0 0 0 1 0 0 1 0 0 0
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
0 0 1 1 0 0 1 0 0 0
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
0 0 1 1 0 0 1 0 0 1
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
0 1 1 1 0 0 1 0 0 1
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
0 1 1 1 0 0 1 1 0 1
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
0 1 1 1 0 0 2 1 0 1
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
0 1 1 1 0 0 2 1 1 1
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
1 1 1 1 0 0 2 1 1 1
z z [0] z [1] z [2] z [3] z [4] z [5] z [6] z [7] z [8] z [9]
6 3 2 9 1 7 6 8 0 7
in in [0] in [1] in [2] in [3] in [4] in [5] in [6] in [7] in [8] in [9]
1 1 1 1 0 0 2 2 1 1
Kompakt Ausgeschrieben
z [0]
z[1] [0] z[1] [1] z[1] [2] z[1] [3] z[1] [4] z[1] [5] z[1] [6]
z [1]
z[2] [0] z[2] [1] z[2] [2] z[2] [3] z[2] [4] z[2] [5] z[2] [6]
z [2]
z[3] [0] z[3] [1] z[3] [2] z[3] [3] z[3] [4] z[3] [5] z[3] [6]
z [3]
z[4] [0] z[4] [1] z[4] [2] z[4] [3] z[4] [4] z[4] [5] z[4] [6]
z [4]
benutzen
I Rückgabe hier: int[] zeile = eineMatrix[4];
I zeile.length == 7
I Innere Schleife
I Schleife über Spalten einer Zeile
I Spaltennummer bei jeder Iteration erhöhen
I Zeilennummer von äusseres Schleife gegeben
I Zugriff auf Element
I Innere Schleife
I Schleife über Spalten einer Zeile
I Spaltennummer bei jeder Iteration erhöhen
I Zeilennummer von äusseres Schleife gegeben
I Zugriff auf Element
I Äussere Schleife
I Schleife über alle Zeilen
I Zeilennummer in jeder Iteration erhöhen
I Innere for-Schleife in jeder Iteration aufrufen
I Algorithmus
I Schweiz in Koordinaten eingeteilt (CH1903)
I Zweidimensionales Array, das Koordinaten in km enthält
I Koordinaten der Berge lesen und Berg in richtiges
“Quadrätchen” im Array speichern
I Array
I Zeile ⇔ x-Wert (km)
I Spalte ⇔ y-Wert (km)
I Array
I Zeile ⇔ x-Wert (km)
I Spalte ⇔ y-Wert (km)
I Array
I Zeile ⇔ x-Wert (km)
I Spalte ⇔ y-Wert (km)
I Abfragen
I Benutzer gibt x- und y-Wert an
I Könnte ein Array von mehreren Abfragen erstellen
I Abfragen verarbeiten
I Programm: Direkter Zugriff auf erste zwei Dimensionen
I → Resultat: Array mit Berg-IDs (dritte Dimension)
I Schleife über dieses Array
I Ausgabe der Berg-IDs
I Abfragen
I Benutzer gibt Abfrage-Array an (x- und y-Werte)
I Benutzer gibt Radius ein (z.Bsp. 10km)
I Abfragen
I Benutzer gibt Abfrage-Array an (x- und y-Werte)
I Benutzer gibt Radius ein (z.Bsp. 10km)
I Wie macht man das?
I Abfragen
I Benutzer gibt Abfrage-Array an (x- und y-Werte)
I Benutzer gibt Radius ein (z.Bsp. 10km)
I Wie macht man das?
I Lösung
I Nicht fixen x-Wert, sondern Intervall von x-Werten
I Hälfte des Radius vor und nach gegebenem x-Wert
I Intervall von y-Werten
I Abfragen
I Benutzer gibt Abfrage-Array an (x- und y-Werte)
I Benutzer gibt Radius ein (z.Bsp. 10km)
I Wie macht man das?
I Lösung
I Nicht fixen x-Wert, sondern Intervall von x-Werten
I Hälfte des Radius vor und nach gegebenem x-Wert
I Intervall von y-Werten
I Verschachtelte Schleifen, um x- und y-Intervalle zu durchlaufen
→ Demo
I Vorteile
I Vorteile
I Schnelle Datenstruktur
I Kann direkt an richtige Stelle im Array Werte auslesen
I Einfach zu programmieren
I Nachteile
I Vorteile
I Schnelle Datenstruktur
I Kann direkt an richtige Stelle im Array Werte auslesen
I Einfach zu programmieren
I Nachteile
I Zu grosser Speicherverbrauch
I Westlichster und südlichster Teil des Arrays nie benutzt
I Zwei Lösungsansätze:
I Zwei Lösungsansätze:
I Zusätzliche UND-Bedingung (halbe Lösung)
I min und max berechnen, dann Schleife