II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

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

Übung Grundlagen der Programmierung. Übung 05: Arrays. Abgabetermin: xx.xx.xxxx. Java-Programm Testplan Testergebnisse

Propädeutikum zur Programmierung

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Modul 122 VBA Scribt.docx

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

Propädeutikum zur Programmierung

Programmierkurs Java

Probeklausur: Programmierung WS04/05

Javakurs für Anfänger

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

1 Polymorphie (Vielgestaltigkeit)

5. Tutorium zu Programmieren

Programmieren Tutorium

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

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

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Dr. Monika Meiler. Inhalt

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 8. Arrays. Arrays

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

5.4 Klassen und Objekte

Modellierung und Programmierung 1

FHZ. K20 Arrays. Lernziele. Hochschule Technik+Architektur Luzern Abteilung Informatik, Fach Programmieren. Inhalt

Einführung in die Programmierung für Wirtschaftsinformatik

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

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

Einführung in die Informatik für Hörer aller Fakultäten II. Andreas Podelski Stephan Diehl Uwe Waldmann

Algorithmen und Datenstrukturen

Objektorientierte Programmierung

Primitive Datentypen

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

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

3 Objektorientierte Konzepte in Java

Datenbankanwendungsprogrammierung Crashkurs Java

Ein erstes Java-Programm

1. Übung zu "Numerik partieller Differentialgleichungen"

Arrays und Methoden. Programmiervorkurs WS 2010 / 11

Repetitorium Informatik (Java)

Zusammengesetzte Datentypen -- Arrays und Strukturen

Strukturierte Datentypen und Funktionszeiger

Vorkurs C++ Programmierung

Java Einführung Methoden in Klassen

Klassenbeziehungen & Vererbung

4. Datentypen. Einleitung Eingebaute Datentypen. Konversion / Type-Cast. Operatoren. Übersicht Die Datentypen char, float und double Standardwerte

Java Kurs für Anfänger Einheit 5 Methoden

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Tutorium Rechnerorganisation

Arrays in Java. Text. Stefan Brotschi

Arrays Fortgeschrittene Verwendung

Kapitel 6. Vererbung

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

einkonto.zahle(+100); //Transaktion Einzahlung einkonto.zahle(-20); //Transaktion Auszahlung einkonto.zahle(+30); //Transaktion Einzahlung

Kapitel 6. Vererbung

Vorlesung Informatik II

HEUTE. Effizienzbeispiel: bekannte Version (Übung ) Mathematik: Was ist Effizienz? vollständige Induktion

Distributed Computing Group

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Prinzipielle Ausführungsvarianten I

Software Engineering Klassendiagramme Einführung

Java: Vererbung. Teil 3: super()

Java-Schulung Grundlagen

Eine Einführung in C-Funktionen

Themen. Web Service - Clients. Kommunikation zw. Web Services

II.1.1. Erste Schritte - 1 -

Kapitel 6. Vererbung

13. Tutorium zu Programmieren

Meeting C++ C++11 R-Value Referenzen

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

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Beispiel: DB-Mock (1/7)

Einführung in die Programmierung Arrays, Zeiger, Strings. Arvid Terzibaschian

3 Objektorientierte Konzepte in Java

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Aufgabe 1. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Objektorientierte Programmierung

Programmieren in Java

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Musterlösungen zur Klausur Informatik 3

C# im Vergleich zu Java

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Große Übung Praktische Informatik 1

Java Virtual Machine (JVM) Bytecode

Klausur zur Einführung in die objektorientierte Programmierung mit Java

1. Grundlegende Konzepte in Java (6 Punkte)

Programmieren in Java

Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2015/16. Vorbereitende Aufgaben

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Zusammenfassung des Handzettels für Programmieren in C

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Einführung in die Java- Programmierung

Transkript:

Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel: Merge S a1 b1 a 9 6 8 7 4 5 9 6 8 a2 7 4 5 s 6 8 9 b2 4 5 7 c split merge 4 5 6 7 8 9 s public static int[] merge(int[] a, int[] b) { int[] ergebnis = new int[a.length + b.length]; int posa = 0, posb = 0, pos = 0; while ( posa < a.length && posb < b.length ) { if (a[posa] <= b[posb]) { ergebnis[pos] = a[posa]; posa = posa + 1; else { ergebnis[pos] = b[posb]; posb = posb + 1; // hier sind alle Elemente eines Arrays kopiert; // die des anderen Arrays müssen wir noch kopieren! : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 4 Beispiel: Merge S (Fs. ) Beispiel: Merge S (Fs. ) // restlichen Elemente des laengeren Arrays einfuegen while ( posa < a.length ) { ergebnis[pos] = a[posa]; posa = posa + 1; while ( posb < b.length ) { ergebnis[pos] = b[posb]; posb = posb + 1; return ergebnis; public static int[] s(int[] a) { if (a.length > 1) { int[] a1 = new int[a.length/2]; int[] a2 = new int[a.length - a1.length]; System.arraycopy(a, 0, a1, 0, a1.length); System.arraycopy(a, a1.length, a2, 0, a2.length); int[] b1 = s(a1); int[] b2 = s(a2); int[] c = merge(b1,b2); return c; else { return a; : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 5 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 6 1

Bemerkung 9. Datenstrukturen Die hier vorgestellte Variante des MergeS- Algorithmus ist sehr ineffizient (dafür ist sie etwas leichter zu verstehen). Im richtigen MergeS-Algorithmus, werden die Arrays nicht so oft kopiert. Motivation Daten zusammenfassen, die logisch zusammen gehören (nächste Folie); Bezüge zwischen Daten herstellen (später) In der Praxis wird ohnehin der QuickS- Algorithmus eingesetzt; z.b. für die in Java eingebaute Sierfunktion (siehe Unterlagen zur Vorlesung im WWW) Logisch zusammengehörige Daten nennen wir im folgenden ein Objekt. : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 7 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 8 Daten zusammenfassen Beispiel: Eine besteht aus Vor Name Straße Hausnummer PLZ Ort In Java: String = ""; String strasse = ""; String nr = ""; String plz = ""; : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 9 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 10 In Java (Fs.): In Java (Fs.): Ein Datentyp definiert die Struktur gleichartiger Objekte. Der Datentyp legt insbes. den Namen und den Typ aller gemeinsamen Attribute der Objekte fest. Der Datentyp selbst erhält ebenfalls eine Bezeichnung, unter der er im Programm benutzt werden kann. In Java wird ein Datentyp durch das Schlüsselw class gefolgt von dem Namen des Datentyps und einer Deklaration aller zugehörigen Attribute definiert. Es sind auch Deklarationen ohne Initialisierung möglich. (Eine Klasse ist eine Verallgemeinerung des Datentyps, die wir erst später kennenlernen werden; das Schlüsselw class benutzen wir jetzt schon) : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 11 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 12 2

Im folgenden... Beispiel: Adressverwaltung reduzieren wir der Einfachheit halber unser Beispiel auf drei Attribute: String = ""; String = ""; public class Adressverwaltung { : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 1 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 14 public static readadr() { = new (); "# $ %! Out.println("Bitte der Reihe nach Name, Vor " + "und Ort eingeben:"); public static void printadr( ) { Out.println(.); Out.println(.); Out.println(.); Out.println(); '!! % (). = In.readLine();. = In.readLine();. = In.readLine();! return ; & " : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 15 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 16 public static void main(string[] args) { [] essen = new [100]; int anzahladr = 0; int option; do { Out.println("Wählen Sie 1, 2 oder :"); option = In.readInt(); In.readLine(); *+,, if (option == 1) { // Neue einlesen (wenn noch Platz) if ( anzahladr < 100 ) { essen[anzahladr]= readadr(); anzahladr = anzahladr + 1; else if (option == 2) { // suchen Out.println("Geben Sie einen Namen ein"); String = In.readLine(); // Suche in der Tabelle for (int i = 0; i < anzahladr; i++) { if (.equals(essen[i].)) { printadr(essen[i]); : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 17 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 18

else if (option == ) { // Gib alle n aus for (int i = 0; i < anzahladr; i++) { printadr(essen[i]); while ( option >= 1 && option <= ); Ein selbstdefinierter Datentyp kann in Java wie jeder vordefinierte Datentyp benutzt werden! Es können Felder über diesem Datentyp definiert werden. $- ')... : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 19 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 20 Beispiel Der Datentyp kann als Parametertyp und als Ergebnistyp von Funktionen und Prozeduren benutzt werden. Der Datentyp kann insbesondere als Datentyp eines Attributs eines anderen Datentyps benutzt werden (nächste Folie). class Name { String ; String familien; class Anschrift { String strasse; String nr; String ; class Person { int nr; Name ; Anschrift anschrift; /01!)2 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 21 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 22 Selbstdefiniere Datentypen Wie bei Feldern muß ein neues Objekt eines selbstdefinierten Datentyps explizit mit new angelegt werden. Bsp: = new (); 4 Wie bei Feldern ist die Variable ein Verweis auf ein Objekt vom Typ (später mehr) Auf ein Attribut eines Objekts obj kann mit obj. zugegriffen werden. obj. kann überall d stehen, wo eine Variable entsprechenden Typs stehen darf (wie bei Feldern gilt dies auch für Zuweisungen und Operationen wie ++ und --) Bei verschachtelten Datentypen kann man über mehrere Stufen auf ein Attribut zugreifen: person.. oder person.anschrift. : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 2 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 24 4

Weitere Beispiele: 2. Objektvariablen als Verweise class Punkt { double x; double y; class Rechteck { Punkt lo; Punkt ru; class Complex { double re; double im; class PseudoString { char[] zeichenfolge; int length; Für einen selbstdefinierten Datentyp kann man Variablen dieses Typs deklarieren! Eine solche Variable ist ein Verweis (Pointer) auf ein Objekt dieses Typs! : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 25 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 26 Beispiel Objektvariable als Verweise Beispiel: ; = new ();. = Egon ; String Egon Objektvariable verhalten sich analog zu Array-Variablen: Ein Parameter mit selbstdefiniertem Datentyp ist ein Referenzparameter! Alle Attribute eines mit new neu angelegten Objekts erhalten zunächst den vordefinierten Wert des entsprechenden Datentyps (Zur Erinnerung: Zahlen: 0 bzw. 0.0, Zeichen: \u0000, Wahrheitswerte: false, sonst null) : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 27 : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 28 null: Der undefinierte Verweis. Rekursive Datentypen Der vordefinierte Wert für alle nicht-primitiven Datentypen ist null null kann jeder Variablen mit nicht-primitivem Datentyp zugewiesen werden ( null hat jeden Typ ; Genaueres später) Wenn == null gilt; führt der Zugriff. zu einem Laufzeitfehler!! Achtung: Beim Programmieren aufpassen! Exception in thread "main" java.lang.nullpointerexception at Test.main(Compiled Code) : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn VL 9 29 class { ; ; : Technische Informatik für Ingenieure, WS 2006/07, Universität Paderborn Adress VL 9 0 nam vornam or 5 6 null 5