Informatik II Übung 5

Ähnliche Dokumente
Repetitorium Informatik (Java)

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

Java Einführung Klassendefinitionen

Advanced Programming in C

AuD-Tafelübung T-B5b

Algorithmen und Programmierung II

Java Kurs für Anfänger Einheit 5 Methoden

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

1 Polymorphie (Vielgestaltigkeit)

Java I Vorlesung 6 Referenz-Datentypen

6 Speicherorganisation

Javakurs für Anfänger

Einstieg in die Informatik mit Java

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

Propädeutikum zur Programmierung

Vorkurs C++ Programmierung

Algorithmen und Datenstrukturen

2. Methoden. n Generelles zum Aufruf von Methoden. n Parameterübergabemechanismen (call by value, call by reference)

Modul 122 VBA Scribt.docx

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Java Virtual Machine (JVM) Bytecode

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Modellierung und Programmierung 1

Java Einführung Collections

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

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

Zusammenfassung des Handzettels für Programmieren in C

Javakurs zu Informatik I. Henning Heitkötter

Dr. Monika Meiler. Inhalt

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

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

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

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

Software Engineering Klassendiagramme Einführung

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Theorie zu Übung 8 Implementierung in Java

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

Programmierung mit C Zeiger

Objektorientierte Programmierung

Probeklausur: Programmierung WS04/05

Ein erstes Java-Programm

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Einführung in die Programmierung

Einstieg in die Informatik mit Java

Hochschule Ravensburg-Weingarten Schriftliche Prüfung Programmieren Prof. Dr. M. Zeller

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Klassen mit Instanzmethoden

Distributed Computing Group

Die Programmiersprache C Eine Einführung

Gebundene Typparameter

Datenbankanwendungsprogrammierung Crashkurs Java

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

Speicher und Adressraum

Javakurs für Anfänger

Remote Method Invocation

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

Große Übung Praktische Informatik 1

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

1. Übung zu "Numerik partieller Differentialgleichungen"

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

Java Einführung Methoden in Klassen

KV Software Engineering Übungsaufgaben SS 2005

Programmierkurs. Manfred Jackel

Probeklausur: Programmierung WS04/05

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

5. Tutorium zu Programmieren

Java - Programmierung - Objektorientierte Programmierung 1

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

CORBA Implementierung von Client und Server

1. Grundlegende Konzepte in Java (6 Punkte)

Programmierkurs Java

3 Objektorientierte Konzepte in Java

Themen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Einstieg in die Informatik mit Java

Prof. W. Henrich Seite 1

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

II.3.1 Rekursive Algorithmen - 1 -

Bachelor-Klausur im WiSe 2013 / Grundlagen der Informatik

Algorithmen und Datenstrukturen in Java Jiri Spale, Algorithmen und Datenstrukturen in Java 1

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Java I Vorlesung Vererbung und Sichtbarkeit

Funktionen in PHP 1/7

Die Programmiersprache C99: Zusammenfassung

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

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

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Einführung in Java. Arne Hüffmeier. Angelehnt an Java-Vorkurs der Freitagsrunde. Methoden implementieren. Michelle Liebers, Dennis Hoffmann

Programmiertechnik Klassenmethoden

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

Kapitel 9. Inner Classes. 9.1 Wiederholung: Iteratoren. Ausführen einer Operation auf allen Elementen einer Containerklasse

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Deklarationen in C. Prof. Dr. Margarita Esponda

Java Remote Method Invocation (RMI)

Einführung in die Programmierung 1

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Klassenmethoden

3 Objektorientierte Konzepte in Java

Transkript:

Informatik II Übung 5 Florian Scheidegger florsche@student.ethz.ch Folien mit freundlicher Genehmigung adaptiert von Gábor Sörös und Simon Mayer gabor.soros@inf.ethz.ch, simon.mayer@inf.ethz.ch 27.03.2013 Informatik II 1

Ablauf Nachbesprechung Übung 4 Stack (Implementierung mit Array) Ackermannfunktion Java-Bytecode Übungsbezogene Themen: Call by Value vs Call by Reference Verkettete Listen Stack (Implementierung mit verketteter Liste) Informatik II

Nachtrag: Testat Insgesamt mindestens 75% der Aufgaben bearbeitet Und mindestens 50% der Punkte erreicht Gesamtpunktzahl ist die Summe von Übung 1 bis 11 Übung 12 wird als Bonus gewertet

L4.A2 Ackermann-Funktion Rekursive Definition der Ackermann Funktion 28.03.2012 4

more Java insights 5

Datentypen Primitive Typen z.b. byte, int, float, char Referenz-Typen z.b. Arrays, Strings, Klassen Bsp: String s = new String(); Bsp: Date d = new Date(); s und d sind Referenzen auf Instanzen der Klasse String respektive Date. 6

Call-by-... Call by value an Funktion übergebenen Daten werden kopiert keine Verbindung mehr zwischen den Daten beim Aufrufer und den Daten in der Funktion Call by reference Anstatt Daten zu kopieren werden Referenzen auf die Daten übergeben Methodenaufrufe an einem so übergebenen Objekt arbeiten also auf demselben Objekt, das auch außerhalb sichtbar ist 7

Call by value vs. Call by reference In C++ beide sind möglich Call by value: Daten werden kopiert und übergeben //C++ void swap(a, b); Call by reference: Referenz auf die Daten wird übergeben Java ist IMMER call by value! Das heisst, dass auch die bei Übergabe von einem Referenz-Typ wird der Adressenwert in eine lokale Variable kopiert! Die Referenz zeigt jedoch noch aufs gleiche Objekt, wodurch natütlich dieses bearbeitet wird. //C++ Bei Übergabe von einem Primitiven Typ wird der Wert in eine lokale Variable kopiert void swap(&a, &b); 8

Call by value vs. Call by reference // Situation in main() Point mypoint = new Point(3,4); mypoint int x; int y; // Aufruf von dosomething(...) dosomething(point methodpoint) mypoint methodpoint int x; int y;

Call by value vs. Call by reference in Java Was heisst das für uns? Ist das Modifizieren von übergebenen Werten möglich? Wie / Warum nicht? Ist das Vertauschen von übergebenen Werten möglich? Wie / Warum nicht? 10

Call by value vs. Call by reference in Java Modifizieren ist möglich, Vertauschen aber nicht! Methode: Public static void swap(point arg1, Point arg2) mypoint1 mypoint2 main(...) int x1; int y1; int x2; int y2; Hauptprogramm ruft irgendwo swap(mypoint1,mypoint2) mypoint1 arg1 mypoint2 arg2 int x1; int y1; int x2; int y2; Nach swap(...) mypoint1 arg2 mypoint2 arg1 int x1; int y1; int x2; int y2; Gute Referenz:http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html 11

Allocation of primitives and objects int a = 5; Tier fido = new Tier( fido,m); Tier rex = new Hund( rex,m, braun); Tier (name, String, "fido") (geschlecht, char, 'm') Hund Tier (name, String, "rex") (geschlecht, char, 'm') (fellfarbe, String, "braun") STACK (rex, Tier, ) (fido, Tier, ) (a, int, 5) HEAP 12

Allocation of primitives and objects foobar(rex, a); void foobar(tier t, int p) { t.name = "#@!&"; p = 42; t = new Tier( xena,w); } STACK Tier (name, String, "fido") (geschlecht, char, 'm') Hund Tier (name, String, "#@!&") "rex") (geschlecht, char, 'm') (fellfarbe, String, "braun") Tier (name, String, "xena") (geschlecht, char, 'w') (p, int, 42) 5) (t, Tier, ) (rex, Tier, ) (fido, Tier, ) (a, int, 5) HEAP 13

Hinweise zu U05 14

Ü5 Listen Die gesamte Übungsserie 5 betrachtet das Konzept von rekursiv definierten Listen Umgehen mit Referenzen ('Pointer') Klasse list.list (als rekursive Definition) Entweder die Leere Liste oder eine Verkettung einer Ganzzahl und einer Liste Funktionale Definition: List := null int List hier: null ist die Leere Liste null ist als Parameter immer zu erwarten! 15

Ü5 Verkettete Listen Verkettete Liste Dynamische Datenstruktur Singly-linked, Doubly-linked,... Felder einer (nicht-leeren) Liste Wertefeld + Referenz(en) Für eine einfach verkettete Liste: Wert + Zeiger auf das nächste Element der Liste Das nächste Element ist wiederum eine Liste Felder der Leeren Liste (null) zu betrachten als: Wert: (nicht vorhanden: Zugriff wirft Exception) Next: null 16

Ü5.A1/A2/A3 Statische, rekursive Methoden vervollständigen Es sollen keine neuen Listen erzeugt, sondern die übergebenen Listen verändert werden alles Rekursiv lösen, ohne Schleifen! Test-Cases zum Überprüfen der Implementation 17

Ü5.A1/A2/A3 public static String tostring(list list) List add(list list, int value) Aufgabe 1 int size(list list) int sum(list list) List sublist(list list, int index) throws... List last(list list) int valueat(list list, int index) throws... int index(list list, int value) throws... void append(list list, int value) throws... Aufgabe 2 void concat(list head, List tail) throws... void insertat(list list, int i, int value) throws... void insertat(list list, int i, List nl) throws... List remove(list list, int index) throws... List insertsorted(list list, int value) throws Aufgabe... 3 List sort(list list) throws... 18

Ü5.A1 tostring(list list) public static String tostring(list list) { if (list == null) return "null"; } return list.value + "," + tostring(list.next); mylist value value value value value 76 15 22 3 32 next next next next next 76,15,22,3,34,null u5a1.lists.tostring(mylist) 19

Ü5.A4 Stack mit List implementieren Liste (Implementierung) ist von aussen unsichtbar Alle Stack-Operationen können direkt in Operationen auf Listen übersetzt werden Leere Liste: der einzige Spezialfall, der von der Klasse Stack selber beachtet werden muss! 20

viel Spass! 21