Grundlagen der Programmierung Prof. H. Mössenböck. 7. Arrays

Ähnliche Dokumente
3 Module in C. 4 Gültigkeit von Namen. 5 Globale Variablen (2) Gültig im gesamten Programm

c dl SPiC (Teil C, SS 11) 13 Zeiger und Felder 13.1 Zeiger Einführung 13 1 Zeigervariable := Behälter für Verweise ( Adresse) Beispiel int x = 5;

Programmieren in C/C++ und Matlab

Mechanismus Aufrufer Funktion Funktion Aufrufer Parameter ja mit Hilfe von Zeigern Funktionswert nein ja globale Variablen ja ja

2 Kurzeinführung in die Programmiersprache C 2.7 Programmstruktur & Module. 2 Kurzeinführung in die Programmiersprache C 2.7 Programmstruktur & Module

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Def.: Sei Σ eine Menge von Zeichen. Die Menge Σ* aller Zeichenketten (Wörter) über Σ ist die kleinste Menge, für die gilt:

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Propädeutikum zur Programmierung

Programmieren II Der Kellerspeicher. Programmieren II Der Kellerspeicher. Programmieren II Der Kellerspeicher. Programmieren II Der Kellerspeicher

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Algorithmen und Datenstrukturen

Multiplikative Inverse

6 Speicherorganisation

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Canon Nikon Sony. Deutschland Österreich Schweiz Resteuropa J

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Einstieg in die Informatik mit Java

Welche Informatik-Kenntnisse bringen Sie mit?

Vorkurs C++ Programmierung

MB2-ALG, SS15 Seite 1 Hauptklausur, geschrieben am

13 Rekonfigurierende binäre Suchbäume

Einführung in Mathcad H.

von f im Punkt P ( 2 4) x x x Hilfsmittelfreier Teil. Beispielaufgabe 1 zur Analysis Gegeben ist die Funktion f mit der Gleichung

Algorithmen und Programmierung II

Arrays Fortgeschrittene Verwendung

Repetitionsaufgaben Exponential-und Logarithmusfunktion

Der Datentyp String. Stringvariable und -vergleiche

Einführung in die Programmierung für Wirtschaftsinformatik

Mathe Warm-Up, Teil 1 1 2

BRÜCKENKURS MATHEMATIK

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Exportmodul Artikel-Nr.: 20208

Brückenkurs Lineare Gleichungssysteme und Vektoren

Theorie zu Übung 8 Implementierung in Java

Ungleichungen. Jan Pöschko. 28. Mai Einführung

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Grundwissen l Klasse 5

Vorkurs Mathematik DIFFERENTIATION

Programmierstil. Objektsammlungen. Konzepte. Zwischenspiel: Einige beliebte Fehler... Variablennamen Kommentare Layout Einrückung

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Matrizen und Determinanten

Lineare DGL zweiter Ordnung

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

- 1 - VB Inhaltsverzeichnis

Einstieg in die Informatik mit Java

Vorlesung. Einführung in die mathematische Sprache und naive Mengenlehre

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Quadratische Gleichungen und Funktionen

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Präfixcodes und der Huffman Algorithmus

Java I Vorlesung 6 Referenz-Datentypen

Programmieren in Java

Studentische Lösung zum Übungsblatt Nr. 7

Objektorientierte Programmierung

Die Programmiersprache C99: Zusammenfassung

Probeklausur: Programmierung WS04/05

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Mathematik schriftlich

II.3.1 Rekursive Algorithmen - 1 -

Einführung in das Rechnen mit Zahlen. (elementare Algebra)

Programmieren I + II Regeln der Code-Formatierung

C# 2000 Expression Beispielcodes für Konsolen- und Formularanwendung

solche mit Textzeichen (z.b. A, a, B, b,!) solche mit binären Zeichen (0, 1)

Der Gauß - Algorithmus

Logarithmen zu speziellen und häufig gebrauchten Basen haben eigene Namen: Der Logarithmus zur Basis 10 heißt dekadischer oder Zehnerlogarithmus:

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Dr. Monika Meiler. Inhalt

Einstieg in die Informatik mit Java

Zeiger: Der Adressoperator &

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Ich liebe Java && Ich liebe C# Rolf Borst

Einführung in die Festkörperphysik I Prof. Peter Böni, E21

Javakurs für Anfänger

Wurzeln. bestimmen. Dann braucht man Wurzeln. Treffender müsste man von Quadratwurzeln sprechen. 1. Bei Quadraten, deren Fläche eine Quadratzahl ist,

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

1. Grundlagen Sortieren Vertauschen Selektion Einfügen Quicksort Suchen...

Neue Features in C# 2.0

Kurvenintegrale. 17. Juli 2006 (Korrigierte 2. Version) 1 Kurvenintegrale 1. Art (d.h. f ist Zahl, kein Vektor)

Versuchsplanung. Grundlagen. Extrapolieren unzulässig! Beobachtungsbereich!

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

Programmierung in C. Grundlagen. Stefan Kallerhoff

Methoden (fortgeschritten) in C# - 1

Parallele Algorithmen mit OpenCL. Universität Osnabrück, Henning Wenke,

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Java Einführung Collections

Probeklausur: Programmierung WS04/05

E Mikrocontroller-Programmierung. E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie) 1 Mikrocontroller-Umgebung. E.1 Überblick.

2. Klausur in K2 am

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Java Einführung Methoden. Kapitel 6

AuD-Tafelübung T-B5b

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

JAVA-Datentypen und deren Wertebereich

Transkript:

Grundlgen der Progrmmierung Prof. H. Mössenböck 7. Arrys

Eindimensionle Arrys Arry = Tbelle gleichrtiger Elemente [0] [1] [2] [3] Nme bezeichnet ds gesmte Arry Elemente werden über Indizes ngesprochen (z.b. [3]) Indizierung beginnt bei 0 Elemente sind "nmenlose" Vriblen Deklrtion int[] ; flot[] b; Erzeugung = new int[5]; b = new flot[10]; deklriert ein Arry nmens (bzw. b) seine Elemente sind vom Typ int (bzw. flot) seine Länge ist noch unbeknnt legt ein neues int-arry mit 5 Elementen n (us dem Hep-Speicher) weist seine Adresse zu [0] [1] [2] [3] [4] Arry-Vriblen enthlten in Jv Zeiger uf Arrys! (Zeiger = Speicherdresse) 2

Arbeiten mit Arrys Zugriff uf Arryelemente [3] = 0; [2*i+1] = [i] * 3; Arrylänge bfrgen int len =.length; Beispiele for (int i = 0; i <.length; i++) { [i] = In.redInt(); Arryelemente werden wie Vriblen benutzt Index knn ein gnzzhliger Ausdruck sein Lufzeitfehler, flls Arry noch nicht erzeugt wurde Lufzeitfehler, flls Index < 0 oder Arrylänge length ist ein Stndrdopertor, der uf lle Arrys ngewendet werden knn. Liefert Anzhl der Elemente (hier 5). // Arry einlesen int sum = 0; for (int i = 0; i <.length; i++) { sum += [i]; // Elemente ufddieren 3

Arryzuweisung [0] int[], b; = new int[3]; 0 b = ; b [0] 0 [1] [2] 0 0 [1] [2] 0 0 b[0] b[1] b[2] b Arryelemente werden in Jv stndrdmäßig mit 0 initilisiert b bekommt denselben Wert wie. Arryzuweisung ist in Jv Zeigerzuweisung! [0] = 17; b [0] [1] [2] 17 0 0 b[0] b[1] b[2] ändert in diesem Fll uch b[0] = new int[4]; 0 0 0 b 17 0 0 0 zeigt jetzt uf neues Arry. b = null; 0 0 0 b 17 0 0 0 null: Spezilwert, der uf kein Objekt zeigt; knn jeder Arryvriblen zugewiesen werden 4

Freigeben von Arryspeicher Grbge Collection (Automtische Speicherbereinigung) Objekte, uf die kein Zeiger mehr verweist, werden utomtisch eingesmmelt. Ihr Speicher steht für neue Objekte zur Verfügung sttic void P() { int[] = new int[3]; int[] b = new int[4]; int[] c = new int[2]; b = ; c = null; b c b c b c b c kein Zeiger mehr uf dieses Objekt wird eingesmmelt kein Zeiger mehr uf dieses Objekt wird eingesmmelt Am Methodenende werden lokle Vriblen freigegeben Zeiger, b, c fllen weg Objekt wird eingesmmelt 5

Initilisieren von Arrys primes int[] primes = {2, 3, 5, 7, 11; 2 3 5 7 11 identisch zu int[] primes = new int[5]; primes[0] = 2; primes[1] = 3; primes[2] = 5; primes[3] = 7; primes[4] = 11; Initilisierung knn uch bei der Erzeugung erfolgen int[] primes; primes = new int[] {2, 3, 5, 7, 11; 6

Kopieren von Arrys int[] = {1, 2, 3, 4, 5; int[] b; b 1 2 3 4 5 b = (int[]).clone(); 1 2 3 4 5 b 1 2 3 4 5 Typumwndlung nötig, d clone etws vom Typ Object[] liefert 7

Kommndozeilenprmeter Progrmmufruf mit Prmetern jv Progrmmnme pr 1 pr 2 pr n Prmeter werden ls String-Arry n min-methode übergeben clss Smple { public sttic void min (String[] rg) { for (int i = 0; i < rg.length; i++) Out.println(rg[i]); Aufruf z.b. jv Smple Anton / 10 Ausgbe: Anton / 10 rg[0] == "Anton" rg[1] == "/" rg[2] == "10" 8

Beispiel: sequentielles Suchen Suchen eines Werts x in einem Arry flls gefunden 0 17 99 x pos = 17 pos = -1 flls nicht gefunden 0 99 sttic int serch (int[], int x) { int pos =.length - 1; while ( pos >= 0 && [pos]!= x ) pos--; // pos == -1 [pos] == x return pos; gewünschtes Ergebnis Achtung: int[] wird nur ls Zeiger übergeben. Würde serch etws in ändern (z.b. [3] = 0;), würde sich diese Änderung uch uf ds Arry im Rufer uswirken. 9

Beispiel: binäres Suchen schneller ls sequentielles Suchen Arry muss llerdings sortiert sein z.b. Suche von 13 0 2 1 3 2 5 3 7 4 11 5 13 6 17 7 19 low m high Index des mittleren Element bestimmen ( m = (low + high) / 2 ) 13 > [m] zwischen [m+1] und [high] weitersuchen 0 2 1 3 2 5 3 7 4 11 5 13 6 17 7 19 low m high 10

Binäres Suchen sttic int binryserch (int[], int x) { int low = 0; int high =.length - 1; while (low <= high) { int m = (low + high) / 2; if ([m] == x) return m; else if (x > [m]) low = m + 1; else /* x < [m] */ high = m - 1; /* low > high*/ return -1; 0 1 2 3 4 5 6 7 8 9 10 11 2 3 3 5 7 7 8 10 11 15 16 17 2 3 3 5 7 7 8 10 11 15 16 17 2 3 3 5 7 7 8 10 11 15 16 17 2 3 3 5 7 7 8 10 11 15 16 17 Suchrum wird in jedem Schritt hlbiert bei n Arryelementen sind höchstens log 2 (n) Schritte nötig, um jedes Element zu finden 10 100 1000 10000 n seq.suchen bin.suchen 10 100 1000 10000 4 7 10 14 Lufzeitkomplexität = O(log2(n)) 11

Primzhlenberechnung: Sieb des Erthostenes 1. "Sieb" wird mit den ntürlichen Zhlen b 2 gefüllt 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 2. Erste Zhl im Sieb ist Primzhl. Entferne sie und lle ihre Vielfchen 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 3. Wiederhole Schritt 2 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 5, 7, 11, 13, 17, 19, 23, 25, Wiederhole Schritt 2 5, 7, 11, 13, 17, 19, 23, 25, 7, 11, 13, 17, 19, 23, 12

Implementierung Sieb = boolen-arry, Zhl i im Sieb sieve[i] == true 0 1 2 3 4 5 6 7 8 9 flse flse true true true true true true true true Zhl i entfernen: sieve[i] = flse 0 1 2 3 4 5 6 7 flse flse flse true flse true flse true 8 9 flse true sttic void printprimes (int mx) { boolen[] sieve = new boolen[mx + 1]; for (int i = 2; i <= mx; i++) sieve[i] = true; for (int i = 2; i <= mx; ) { Out.print(i + " "); // i is prime for (int j = i; j <= mx; j = j + i) sieve[j] = flse; while (i <= mx &&!sieve[i]) i++; 13

Beispiel: Montstge berechnen Bisher mit Switch-Anweisung gelöst switch (month) { cse 1: cse 3: cse 5: cse 7: cse 8: cse 10: cse 12: dys = 31; brek; cse 4: cse 6: cse 9: cse 11: dys = 30; brek; cse 2: dys = 28; Besser mit Tbelle int[] dys = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31; int d = dys[month]; 14

Mehrdimensionle Arrys Zweidimensionles Arry Mtrix 0 1 2 3 0 1 2 [0][0] [0][1] [0][2] [1][0] [1][1] [1][2] [2][0] [2][1] [2][2] [3][0] [3][1] [3][2] In Jv ls Arry von Arrys implementiert [0] [1] [0][0] [0][1] [0][2] [1][0] [1][1] [1][2] Deklrtion und Erzeugung int[][] ; = new int[4][3]; [2] [3] [2][0] [2][1] [2][2] [3][0] [3][1] [3][2] Zugriff [i][j] = [i][j+1]; 15

Mehrdimensionle Arrys Zeilen können unterschiedlich lng sein (ds ist ber selten sinnvoll) [0] [1] [2] [0][0] [0][1] [0][2] [1][0] [1][1] [2][0] [2][1] [2][2] [0][3] int[][] = new int[3][]; [0] = new int[4]; [1] = new int[2]; [2] = new int[3]; Initilisierung int[][] = {{1, 2, 3,{4, 5, 6; 1 2 3 4 5 6 16

Beispiel: Mtrixmultipliktion i b c k i = j j c 0,0 = 0,0 *b 0,0 + 0,1 *b 1,0 + 0,2 *b 2,0 sttic flot[][] mtrixmult (flot[][], flot[][] b) { flot[][] c = new flot[.length][b[0].length]; for (int i = 0; i <.length; i++) for (int j = 0; j < b[0].length; j++) { flot sum = 0; for (int k = 0; k < b.length; k++) sum += [i][k] * b[k][j]; c[i][j] = sum; return c; 17