EINI
LogWing/WiMa/MP
Einführung in die Informatik für
Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 18/19
Dr. Lars Hildebrand
Fakultät für Informatik – Technische Universität Dortmund lars.hildebrand@tu-dortmund.de
http://ls14-www.cs.tu-dortmund.de
► Kapitel 5
Algorithmen und Datenstrukturen
► Konstruktion von Datentypen: Arrays
► Algorithmen: Sortieren
► Unterlagen
► Dißmann, Stefan und Ernst-Erich Doberkat: Einführung in die objektorientierte Programmierung mit Java, 2. Auflage.
München [u.a.]: Oldenbourg, 2002, Kapitel 3.4 & 4.1.
(→ ZB oder Volltext aus Uninetz)
► Echtle, Klaus und Michael Goedicke: Lehrbuch der
Programmierung mit Java. Heidelberg: dpunkt-Verl, 2000, Kapitel 4. (→ ZB)
► Gumm, Heinz-Peter und Manfred Sommer: Einführung in die Informatik, 10. Auflage. München: De Gruyter, 2012, Kapitel 2.7 – 2.8. (→ Volltext aus Uninetz)
Thema
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
• Arrays
Begriffe
Spezifikationen, Algorithmen, formale Sprachen Programmiersprachenkonzepte
Grundlagen der imperativen Programmierung
Algorithmen und Datenstrukturen
Felder
Sortieren
Rekursive Datenstrukturen (Baum, binärer Baum, Heap)
► Heapsort
► Objektorientierung
► Einführung
► Vererbung
Übersicht
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
► Array:
► Datenstruktur zur Abbildung gleichartiger Daten
► Deklaration
► Dimensionierung und Zuordnung von Speicher zur Laufzeit
► Zuweisung: ganzes Array, Werte einzelner Elemente
► Algorithmen auf Arrays: Beispiel Sortieren
► naives Verfahren : Minimum bestimmen, entfernen, Restmenge sortieren
► Heapsort : ähnlich, nur mit Binärbaum über Indexstruktur
► Quicksort : divide & conquer, zerlegen in zwei Teilmengen anhand eines Pivotelementes
Gliederung
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
• Arrays
Motivation:
Schleifen erlauben die Verarbeitung mehrerer Daten auf
„einen Schlag“.
► Entsprechend auf der Variablenseite ist die
Zusammenfassung mehrerer Variablen gleichen Typs: Arrays oder Felder.
► Beispiele:
► Zeichenketten/Strings: Arrays aus Character/Zeichen
► Vektoren, Matrizen: Arrays aus Integer/Float-Variablen
► Abbildung eines Lagerbestandes durch Angabe der Menge für einen Artikel und einen Lagerort bei n unterschiedlichen Artikeln und m Orten:
• Bestand [1] [5]: der Bestand des Artikels 1 am Ort 5
• In Java: Bestand [i] [j]: Artikel mit Nummer i und Ort j
Arrays I
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
► Fragen:
► Wie werden Arrays deklariert?
► Wie werden Daten in Arrays abgelegt, verändert und ausgegeben?
► Wie wird die Größe eines Arrays festgelegt?
► Warum müssen wir die Größe überhaupt festlegen?
Arrays II
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
• Arrays
► Arrays sind Variablen,
► sie müssen daher auch deklariert werden, bevor sie benutzt werden.
► die viele Variablen enthalten, die vom gleichen Typ sind.
► Die Anzahl der Dimensionen entspricht der Anzahl der Indexausdrücke.
► Deklarationen:
int[] x; // ein-dimensional int
double[][] y; // zwei-dimensional double
► Sie legen allerdings (anders als bei int z; ) noch keinen Speicherplatz fest.
Arrays III
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
Arrays IV
Die Deklarationen einer Array-Variablen legt nur einen
Verweis auf ein Array fest, die Dimensionierung muss extra erfolgen!
int[] x;
x = new int [15];
int[] x = {1,2,4,3};
0 1 2 3
x 1 2 4 3
x
x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
• Arrays
Die Deklarationen einer Array-Variablen legt nur einen
Verweis auf ein Array fest, die Dimensionierung muss extra erfolgen!
► Dimensionierung mittels new (Schlüsselwort)
► [anzahl] gibt die Anzahl der Elemente an.
► Ist kein Inhalt angegeben, wird jedes Element mit 0 initialisiert.
Beachte: Indizes immer 0 … Anzahl -1
Arrays V
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
► Bei der Deklaration einer Array-Variablen werden die Standardwerte zugewiesen:
► z.B.: int alles 0 ...
► Andere Variante:
► Belegung mit direkt angegebenen Konstanten int [] m =
{31,28,31,30,31,30,31,31,30,31,30,31};
► Größe und Belegung sind direkt festgelegt:
keine Erzeugung mittels new notwendig
Zuweisungen
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
• Arrays
Zuweisung an Array-Variable
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
Array-Größe ist nach Ausführung des new -Operators fest!
► Veränderung der Größe nur durch Programm möglich:
int [] a,b;
a = new int [10];
.... // Zuweisung an die Elemente 0 ..9
b = new int [20];
for (int i=0; i < 10; i++) b[i] = a[i];
a = b; // nun verweisen a und b auf das
// gleiche Array!
Zuweisung an Array-Variablen: Beispiel 1
int i = 2;
int [] A;
A = new int [4];
A [0] = 8; A [1] = 7;
A [i] = 9; A [3] = 6;
Echtle/Goedicke, Heidelberg: Abb. 2–19(Ausschnitt), S. 73 © dpunkt 2000.
Zuweisung an Array-Variablen: Beispiel 2
...
A [0] = 8; A [1] = 7;
A [i] = 9; A [3] = 6;
A = new int [3];
int [] B;
B = A;
Echtle/Goedicke, Heidelberg: Abb. 2–19(Ausschnitt), S. 73 © dpunkt 2000.
Zuweisung an Array-Variablen: Beispiel 3
....
B = A;
A [0] = 6;
B [1] = 7;
B [2] = B [0] + 2;
i = B [0];
A = new int [5];
A [i - 2] = B [1];
B [i - 4] = A.length;
Falls die Größe eines Arrays zum Zeitpunkt der Erstellung nicht bekannt ist:
► Die Größe könnte z.B. auch eingelesen werden.
► In Java kann durch x.length die Anzahl der Elemente dynamisch bestimmt werden:
int anzahl = scanner.nextInt();
int anfangswert = 0;
int[] vektor = new int[anzahl];
for (int i = 0; i < vektor.length; i++) { vektor[i] = anfangswert ;
}
Dynamische Größe von Arrays
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
Strenges Typsystem:
► Für einzelne Elemente eines Arrays, die selbst keine Arrays sind, ist dies klar:
int[] a = new int[3];
a[1] = 3;
► Für Arrays gilt bei Zuweisungen:
► Typ der Grundelemente und die Anzahl der Dimensionen müssen übereinstimmen:
int[] a;
... a = b; // klappt nur, wenn b ebenfalls // 1-dimensionales int Array ist
Berücksichtigung von Typen
EINI LogWing / WiMa
Kapitel 5
Algorithmen und Datenstrukturen
In diesem Kapitel:
• Prolog
• Arrays
•Zuweisung