Tutoraufgabe 1 (Seiteneffekte):

Größe: px
Ab Seite anzeigen:

Download "Tutoraufgabe 1 (Seiteneffekte):"

Transkript

1 Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Seiteneffekte): Betrachten Sie das folgende Programm: public class TSeiteneffekte { public static void main ( String [] args ) { [] ws = new [2]; ws [0] = new (); ws [1] = new (); ws [0]. i = 2; ws [1]. i = 1; f(ws [1], ws [1], ws [0]); f(ws [1], ws ); // Speicherzustand hier zeichnen public static void f( w1,... ws) { int sum = 0; // Speicherzustand hier zeichnen for ( int j = 0; j < ws. length ; j ++) { w = ws[j]; sum += w.i; w.i = j + 2; ws [0] = w1; w1 = ws [1]; w1.i = -sum ; public class { public int i; Es wird nun die Methode main ausgeführt. Stellen Sie den Speicher (d.h. alle (implizit) im Programm vorkommenden Arrays (außer args) und alle Objekte) an folgenden Programmstellen graphisch dar: nach der Deklaration von sum in jedem Aufruf der Methode f vor Ende der main Methode Lösung: 1

2 [] Methode main ws [0] int i 2 Methode f... w1 ws sum 0 [1] [] [0] int i 1 [1] [] Methode main ws [0] int i -3 Methode f w1 ws... [1] int i 2 sum 0 [] Methode main ws [0] int i 2 [1] int i 1 Aufgabe 2 (Seiteneffekte): Betrachten Sie das folgende Programm: public class HSeiteneffekte { public static void main ( String [] args ) { w1 = new (); w2 = w1; ( = 6 Punkte) w1.i = 1; w2.i = 2; 2

3 3... Programmierung WS12/13 int x = 3; int [] a = { 4, 5 ; f(w2, x, a); f(w1, x, 6, a [1]); // Speicherzustand hier zeichnen public static void f( w, int x, int... a) { // Speicherzustand hier zeichnen x = a [0]; a [1] = w.i; w.i = x; public class { public int i; Es wird nun die Methode main ausgeführt. Stellen Sie den Speicher (d.h. alle (implizit) im Programm vorkommenden Arrays (außer args) und alle Objekte) an folgenden Programmstellen graphisch dar: bei jedem Aufruf der Methode f vor Ende der main Methode Lösung: Methode main w1 w2 x a int i 2 int[] [0] 4 [1] 5 Methode f w x a 3 3

4 3... Programmierung WS12/13 w1 Methode main w2 x a int i 4 int[] [0] 4 [1] 2 Methode f w x a 3 int[] [0] 6 [1] 2 w1 int i 6 Methode main w2 x 3 int[] a [0] 4 [1] 2 Tutoraufgabe 3 (Refactoring): In dieser Tutor- und der nachfolgenden Hausaufgabe betrachten wir die Datei Geometry.java, welche Sie von unserer Webseite herunterladen müssen. Diese benötigt zusätzlich die Datei Point.java, welche ebenfalls auf unserer Webseite herunterzuladen ist. Beim sogenannten Refactoring geht es darum, die Syntax eines Programms zu verändern, dabei aber die Semantik des Programms unverändert zu belassen. Ziel des Refactorings ist es, den Programmcode hinsichtlich seiner Les- und Wartbarkeit zu verbessern. Die vorgegebene Datei Geometry.java enthält eine main Methode, welche ein durch seine Eckpunkte bestimmtes Polygon im zweidimensionalen Raum einliest und es anschließend auf der Konsole ausgibt. Das gesamte Programm befindet sich hierbei in der main Methode, welche dadurch groß und unübersichtlich ist. Ein besserer Programmierstil ist es, wenn das Programm in mehrere Abschnitte unterteilt und in verschiedenen Methoden implementiert ist. So wird die Hauptstruktur direkt ersichtlich, das Programm kann schneller verstanden und eventuelle Fehler können leichter gefunden werden. Um die Größe einer Methode zu messen, existieren verschiedene Metriken. Eine solche Metrik ist die NCSS (Non-Commenting Source Statements) Metrik. Diese zählt die Anweisungen, Verzweigungen und Schleifen innerhalb einer Methode. Setzt man voraus, dass jede Schleife und jede Verzweigung Blockanweisungen benutzt (also z. B. Verzweigungen der Form if (Bedingung) {Anweisung(en), aber nicht der Form if (Bedingung) Anweisung;), so entspricht diese Metrik der Anzahl der Semikola am Ende von Anweisungen und der öffnenden geschweiften Klammern innerhalb einer Methode (d. h. die erste öffnende geschweifte Klammer des Methodenrumpfes selbst zählt nicht dazu). Die main Methode des gegebenen Programms hat eine NCSS von 35. 4

5 a) Im ersten Teil des Programms werden die vier Variablen minx, maxx, miny und maxy initialisiert und in der anschließenden Schleife mit den Extremkoordinaten (Minimum und Maximum) in beiden Dimensionen belegt. Schreiben Sie eine Klasse ExtremeCoordinates, welche vier nicht-statische int Attribute minx, maxx, miny und maxy hat. Schreiben Sie in dieser Klasse zusätzlich eine statische Methode create() mit Rückgabetyp ExtremeCoordinates, welche ein neues Objekt dieses Typs anlegt, alle seine Attribute mit 0 belegt und dieses Objekt dann zurück liefert. b) Lagern Sie nun den ersten Teil des Programms (vom Kommentar Eingabe der Punkte des Polygons und Bestimmung der Extremkoordinaten bis zum Kommentar Ausgabe des Polygons auf der Konsole ) in eine statische Methode input(point[] polygon) mit Rückgabetyp ExtremeCoordinates aus. Ersetzen Sie dabei die Initialisierung der Variablen minx, maxx, miny und maxy durch einen Aufruf der create() Methode aus der Klasse ExtremeCoordinates und die Belegung der ersetzten Variablen durch eine Belegung der entsprechenden Attribute im erzeugten ExtremeCoordinates Objekt. Liefern Sie dieses Objekt am Ende der Methode input zurück. In der main Methode müssen Sie ebenfalls alle Vorkommen der ersetzten Variablen durch Zugriffe auf die entsprechenden Attribute des zurückgelieferten ExtremeCoordinates Objektes ersetzen. c) Lagern Sie nun den zweiten Teil des Programms (ab dem Kommentar Ausgabe des Polygons auf der Konsole ) in eine statische Methode output(extremecoordinates ex, Point[] polygon) ohne Rückgabe aus. Sie benötigen nun in der main Methode keine Variable mehr, welche das in der input Methode erzeugte ExtremeCoordinates Objekt speichert, sondern können den Aufruf der input Methode direkt als erstes Argument der output Methode nutzen. Die NCSS der main Methode soll anschließend 3 betragen. Nun spiegelt die main Methode genau die oben beschriebene Struktur des Programms wider. Lösung: // kapselt Minima und Maxima in zwei Dimensionen public class ExtremeCoordinates { public int maxx ; public int maxy ; public int minx ; public int miny ; // Initialisierung der Extremkoordinaten public static ExtremeCoordinates create () { ExtremeCoordinates res = new ExtremeCoordinates (); res. minx = 0; res. maxx = 0; res. miny = 0; res. maxy = 0; return res ; public class Geometry { // Eingabe der Punkte des Polygons und Bestimmung der Extremkoordinaten public static ExtremeCoordinates input ( Point [] polygon ) { ExtremeCoordinates res = ExtremeCoordinates. create (); for ( int i = 0; i < polygon. length ; i++) { // Einlesen eines Punktes System. out. println (" Geben Sie die X- Koordinate des " + (i + 1) + "-ten Punktes ein."); int x = Integer. parseint ( System. console (). readline ()); System. out. println (" Geben Sie die Y- Koordinate des " + (i + 1) + "-ten Punktes ein."); int y = Integer. parseint ( System. console (). readline ()); polygon [i] = Point. create (x, y); // Update der Extremkoordinaten res. minx = Math. min ( res. minx, polygon [i]. x); res. miny = Math. min ( res. miny, polygon [i]. y); res. maxx = Math. max ( res. maxx, polygon [i]. x); res. maxy = Math. max ( res. maxy, polygon [i]. y); return res ; // Liest ein Polygon ein und gibt es auf der Konsole aus public static void main ( String [] args ) { 5

6 // Eingabe der Anzahl Punkte, welche das Polygon bestimmen, und Anlegen des zugehoerigen Arrays System. out. println (" Geben Sie die Anzahl an Punkten ein, welche das Polygon bestimmen sollen."); Point [] polygon = new Point [ Integer. parseint ( System. console (). readline ())]; Geometry. output ( Geometry. input ( polygon ), polygon ); // Ausgabe des Polygons auf der Konsole public static void output ( ExtremeCoordinates ex, Point [] polygon ) { System. out. println (); for ( int i = ex. maxy ; i >= ex. miny ; i - -) { for ( int j = ex. minx ; j <= ex. maxx ; j ++) { Point p = Point. create (j, i); // Test, ob Punkt in Polygon liegt boolean in = false ; double sum = 0.0; for ( int k = 0; k < polygon. length ; k++) { // Berechnung des Winkels zwischen den Punkten polygon [i], p und // polygon [i + 1 % polygon. length ] // Ergebnis liegt zwischen -179 und 180 ( positive Werte zeigen einen Winkel gegen den // Uhrzeigersinn an) Point v1 = polygon [k]. sub (p); Point v2 = polygon [( k + 1) % polygon. length ]. sub (p); float signum = Math. signum ( v1. determinant ( v2 )); double angle = Math. todegrees ( Math. acos (( v1. scalarproduct (v2 )) / (v1. norm () * v2. norm ()))); angle = signum == 0? Math. round ( angle ) : signum * angle ; // Sonderfall : Punkt liegt auf einer Ecke oder Kante des Polygons if (p. equals ( polygon [k]) angle == 180) { in = true ; break ; // Aufsummierung der Winkel sum = sum + angle ; // Ist Betrag der Winkelsumme 360 ( Rundung zur Steigerung der Robustheit gegenueber // Rundungsfehlern ) oder ist der Sonderfall eingetreten, so liegt der Punkt innerhalb des // Polygons System. out. print (( in Math. abs ( Math. round ( sum )) == 360)? "#" : " "); System. out. println (); System. out. println (); Aufgabe 4 (Refactoring): (1 + 4 = 5 Punkte) In dieser Hausaufgabe soll das Refactoring aus der vorigen Tutoraufgabe weitergeführt werden. Die dort ausgelagerten Methoden input(point[] polygon) und output(extremecoordinates ex, Point[] polygon) sind immer noch recht komplex und können weiter in sinnvolle Unterabschnitte gegliedert werden. Außerdem wollen wir ein wiederholtes Auftreten des gleichen komplexen Ausdrucks (sogenannte Code-Duplikation) eliminieren. a) Schreiben Sie eine Methode readint() vom Typ int, welche einen vom Benutzer eingegebenen int Wert einliest. Ersetzen Sie sämtliche Vorkommen des Ausdrucks durch Aufrufe Ihrer neuen Methode. Integer.parseInt(System.console().readLine()) b) Lagern Sie weitere Methoden in der Datei Geometry.java aus (ohne die Semantik zu verändern), sodass die NCSS jeder Methode in der resultierenden Datei jeweils höchstens 8 beträgt. Hinweise: Die Programmkommentare liefern gute Hinweise, welche Abschnitte sinnvoll als Methoden ausgelagert werden können (überall da, wo mindestens 4 Anweisungen oder Blöcke zu einem Kommentar gehören, lässt sich die NCSS durch Methodenauslagerung reduzieren). Überlegen Sie sich, welche Variablen innerhalb eines Code-Abschnitts und nach einem Code-Abschnitt benötigt werden. Aus diesen Informationen lassen sich die Argumente und Rückgabetypen der Methoden erschließen. 6

7 In Methoden kann eine Schleife durch die return Anweisung direkt verlassen werden. Dadurch kann die Verwendung der Variablen in vom Typ boolean in Kombination mit der break Anweisung vermieden werden. Lösung: public class Geometry { // Berechnung des Winkels zwischen den Punkten polygon [i], p und polygon [i + 1 % polygon. length ] // Ergebnis liegt zwischen -179 und 180 ( positive Werte zeigen einen Winkel gegen den Uhrzeigersinn // an) public static double angle ( Point p1, Point p2, Point p3) { Point v1 = p1. sub ( p2 ); Point v2 = p3. sub ( p2 ); float signum = Math. signum ( v1. determinant ( v2 )); double angle = Math. todegrees ( Math. acos (( v1. scalarproduct ( v2 )) / ( v1. norm () * v2. norm ()))); return signum == 0? Math. round ( angle ) : signum * angle ; // Test, ob Punkt in Polygon liegt public static boolean inpolygon ( Point p, Point [] polygon ) { double sum = 0.0; for ( int k = 0; k < polygon. length ; k++) { double angle = Geometry. angle ( polygon [k], p, polygon [( k + 1) % polygon. length ]); // Sonderfall : Punkt liegt auf einer Ecke oder Kante des Polygons if (p. equals ( polygon [k]) angle == 180) { return true ; // Aufsummierung der Winkel sum = sum + angle ; // Ist Betrag der Winkelsumme 360 ( Rundung zur Steigerung der Robustheit gegenueber // Rundungsfehlern ), so liegt der Punkt innerhalb des Polygons return Math. abs ( Math. round ( sum )) == 360; // Eingabe der Punkte des Polygons und Bestimmung der Extremkoordinaten public static ExtremeCoordinates input ( Point [] polygon ) { ExtremeCoordinates res = ExtremeCoordinates. create (); for ( int i = 0; i < polygon. length ; i++) { polygon [i] = Geometry. readpoint ( " Geben Sie die X- Koordinate des " + (i + 1) + "-ten Punktes ein.", " Geben Sie die Y- Koordinate des " + (i + 1) + "-ten Punktes ein."); Geometry. updateextremecoordinates (res, polygon [i ]); return res ; // Liest ein Polygon ein und gibt es auf der Konsole aus public static void main ( String [] args ) { // Eingabe der Anzahl Punkte, welche das Polygon bestimmen, und Anlegen des zugehoerigen Arrays System. out. println (" Geben Sie die Anzahl an Punkten ein, welche das Polygon bestimmen sollen."); Point [] polygon = new Point [ Geometry. readint ()]; Geometry. output ( Geometry. input ( polygon ), polygon ); // Ausgabe des Polygons auf der Konsole public static void output ( ExtremeCoordinates ex, Point [] polygon ) { System. out. println (); for ( int i = ex. maxy ; i >= ex. miny ; i - -) { for ( int j = ex. minx ; j <= ex. maxx ; j ++) { System. out. print ( Geometry. inpolygon ( Point. create (j, i), polygon )? "#" : " "); System. out. println (); System. out. println (); // Einlesen eines Integers von der Konsole public static int readint () { return Integer. parseint ( System. console (). readline ()); // Einlesen eines Punktes public static Point readpoint ( String frstmsg, String scndmsg ) { System. out. println ( frstmsg ); int x = Geometry. readint (); System. out. println ( scndmsg ); int y = Geometry. readint (); 7

8 return Point. create (x, y); // Update der Extremkoordinaten public static void updateextremecoordinates ( ExtremeCoordinates ex, Point p) { ex. minx = Math. min ( ex. minx, p.x); ex. miny = Math. min ( ex. miny, p.y); ex. maxx = Math. max ( ex. maxx, p.x); ex. maxy = Math. max ( ex. maxy, p.y); Tutoraufgabe 5 (Blümchen): In dieser Aufgabe soll eine einfache Gartensimulation erstellt werden. Hierbei hat der Benutzer die Aufgabe, sich um das Wohlergehen verschiedener Blümchen zu kümmern, indem er diese mit der richtigen Menge Wasser versorgt. Hierbei ist es auch möglich, dass Blümchen mehr Wasser bekommen, als sie speichern können, und deswegen sterben. Weiterhin ist es möglich, nach Einsatz eines Bienchenschwarms durch Bestäubung neue Blümchen zu erzeugen. In dieser Simulation sollen mehrere Blümchenbeete verwaltet werden, wobei jedes Beet mehrere Blümchen enthalten kann. Sowohl für die Anzahl der Beete als auch für die Anzahl der Blümchen pro Beet ist eine Maximalkapazität vorgegeben. Die Simulation verläuft in Tagesschritten. Die folgende Ausgabe ist ein Beispiel für einen möglichen Tagesablauf: Tag 2 bricht an! Deine Beete sehen aktuell so aus: Beet 1: (1) Rittersporn [6/20] (Verbrauch: 6) (3) Sumpf-Schwertlilie [5/32] (Verbrauch: 5) (1) Rittersporn [12/20] (Verbrauch: 6) (3) Sumpf-Schwertlilie [10/32] (Verbrauch: 5) (1) Rittersporn [12/20] (Verbrauch: 6) (3) Sumpf-Schwertlilie [10/32] (Verbrauch: 5) --- Beet 2: (0) Tulpe [19/40] (Verbrauch: 7) (0) Tulpe [19/40] (Verbrauch: 7) --- Beet 3: (3) Sumpf-Schwertlilie [17/32] (Verbrauch: 5) (0) Tulpe [19/40] (Verbrauch: 7) --- Moechtest du Beet 1 giessen (Wassermenge: 12)? (1 fuer ja, sonst nein) 1 Das Bluemchen (1) Rittersporn [12/20] (Verbrauch: 6) wurde ertraenkt! Das Bluemchen (1) Rittersporn [12/20] (Verbrauch: 6) wurde ertraenkt! Moechtest du Beet 2 giessen (Wassermenge: 12)? (1 fuer ja, sonst nein) 0 Moechtest du Beet 3 giessen (Wassermenge: 12)? (1 fuer ja, sonst nein) 0 Deine Beete sehen aktuell so aus: Beet 1: (1) Rittersporn [18/20] (Verbrauch: 6) (3) Sumpf-Schwertlilie [17/32] (Verbrauch: 5) (3) Sumpf-Schwertlilie [22/32] (Verbrauch: 5) (3) Sumpf-Schwertlilie [22/32] (Verbrauch: 5) --- Beet 2: (0) Tulpe [19/40] (Verbrauch: 7) 8

9 (0) Tulpe [19/40] (Verbrauch: 7) --- Beet 3: (3) Sumpf-Schwertlilie [17/32] (Verbrauch: 5) (0) Tulpe [19/40] (Verbrauch: 7) --- Moechtest du die Bienchen losschicken? (1 fuer ja, sonst nein) 1 In welchem Beet sollen die Bienchen starten? 2 In welchem Beet sollen die Bienchen ihre Reise beenden? 3 Durch das Wunder der Bestaeubung ist das neue Bluemchen (3) Sumpf-Schwertlilie [15/32] (Verbrauch: 5) entstanden! Durch das Wunder der Bestaeubung ist das neue Bluemchen (3) Sumpf-Schwertlilie [15/32] (Verbrauch: 5) entstanden! Druecke Enter, um den naechsten Tag zu beginnen. Der Typ eines jeden Blümchens ist durch den Aufzählungstypen (enum) Typ realisiert. In dieser Aufgabe wird auch häufig der Ordinalwert (berechnet durch typ.ordinal()) verwendet. Beachten Sie folgende Anforderungen an das System: Die Simulation soll in einzelnen Tagen ablaufen, wobei pro Tag folgende Schritte in dieser Reihenfolge durchgeführt werden: 1. Der aktuelle Tag wird angezeigt. 2. Alle Blümchen verbrauchen eine Tagesration Wasser. 3. Der Zustand der Beete wird ausgegeben. Bei jedem Blümchen wird jeweils der Ordinalwert des Typs (z.b. (1)), der Name (z.b. Rittersporn), der aktuelle Wasservorrat des Blümchens (z.b. 6), der maximale Wasservorrat, den das Blümchen verträgt (z.b. 20) sowie sein Tagesverbrauch an Wasser (z.b. Verbrauch: 6) angegeben. 4. Die Beete werden nach Wunsch des Benutzers gegossen. Hierdurch erhöht sich die Wassermenge jedes Blümchens im Beet um 12 Einheiten. Falls dadurch der maximal erlaubte Wasservorrat des Blümchens überschritten wird, stirbt es. 5. Der Zustand der Beete wird ausgegeben. 6. Auf Wunsch des Benutzers wird der Bienchenschwarm losgeschickt. Die Simulation endet, wenn kein Blümchen mehr existiert. Pro Tag wird der Wasserverbrauch der einzelnen Blümchen simuliert, indem der Wasservorrat pro Blümchen um den jeweiligen Tagesverbrauch verkleinert wird. Gibt es für ein Blümchen beim Wasserverbrauchen nicht genug Wasser in seinem aktuellen Vorrat, stirbt es und existiert ab diesem Zeitpunkt nicht mehr im entsprechenden Beet. Jeden Tag ist es pro Beet möglich, alle Blümchen in diesem Beet zu gießen. Es ist nicht möglich, nur einzelne Blümchen zu gießen, es werden immer alle Blümchen des Beetes gegossen. Wird ein Blümchen so stark gegossen, dass der Maximalvorrat überschritten wird, stirbt es und existiert ab diesem Zeitpunkt nicht mehr im entsprechenden Beet. Pro Tag ist es einmal möglich, den Bienchenschwarm loszuschicken. Dieser fliegt von einem Beet A zu einem Beet B, wobei A und B identisch sein dürfen. Für jedes Blümchenpaar a A und b B wird ein neues Blümchen in Beet B erzeugt, sofern der Ordinalwert des Typs von Blümchen a echt kleiner als der Ordinalwert des Typs von Blümchen b ist. Der Typ des neuen Blümchen ist durch (typ(a) + typ(b)) % MAX definiert, wobei typ(a) und typ(b) den Ordinalwert des Typs von Blümchen a bzw. b angeben und MAX die Anzahl verschiedener Blümchentypen ist (die verschiedenen Ordinalwerte der Typen sind also 0,..., MAX 1). Aus den Blümchen a A mit typ(a) = 2 und b B mit typ(b) = 3 9

10 entsteht also mit MAX = 4 ein Blümchen vom Typ (2 + 3) % 4 = 5 % 4 = 1. Beachten Sie, dass neue Blümchen erst zum Schluss dieser Prozedur zum Blümchenbeet B hinzugefügt werden! Wenn in einem Beet kein Platz für ein neues Blümchen ist, wird dieses neue Blümchen ignoriert und nicht eingepflanzt (Jedes Beet kann maximal 9 Blümchen enthalten). In den Informationen, die zu einem einzelnen Blümchen angezeigt werden, müssen folgende Angaben enthalten sein: Ordinalwert des Typs, Name, aktueller Wasservorrat, maximaler Wasservorrat, Verbrauch pro Tag. Das Sterben eines Blümchens kann dadurch realisiert werden, dass der entsprechende Speichereintrag auf null gesetzt wird. Jedes neue Blümchen hat am Anfang genug Wasser für exakt drei Tage. Wenn der erlaubte maximale Wasservorrat des Blümchen hierfür nicht groß genug ist, wird der erlaubte Wasservorrat stattdessen komplett gefüllt. Sie brauchen hier nicht alles selber zu programmieren, sondern sollen auf ein bereits erstelltes Programmgerüst zurückgreifen, welches Sie bei den Materialien zu dieser Übung von der Webseite der Vorlesung herunterladen können. Dieses besteht aus den Dateien Zufall.java (für Zufallszahlen), Bluemchen.java (welche ein Blümchen darstellt), Typ.java (welche die unterschiedlichen Typen von Blümchen darstellt), Bienchen.java (welche den Bienchenschwarm darstellt), Bluemchenbeet.java (welche ein Blümchenbeet darstellt) und Garten.java (welche die Benutzerschnittstelle zur Verfügung stellt). In den Dateien Bluemchen.java, Bienchen.java und Bluemchenbeet.java sind einige Stellen mit // TO DO markiert. An diesen Stellen sollen Sie Ihre eigene Implementierung einfügen. Modifizieren Sie keine anderen Stellen im Code und legen Sie auch keine weiteren Klassen bzw. Dateien an. Sie dürfen Hilfsmethoden zu den Klassen hinzufügen. Bedenken Sie bei der Konzeption Ihrer Lösung, welche der Attribute und Methoden in den von Ihnen erstellten Klassen statisch sein sollten. Hier dürfen (noch) alle Methoden und Attribute public sein. Beginnen Sie Ihre Bearbeitung mit den folgenden drei Methoden: Bluemchen.neuesBluemchen Bluemchen.toString Bluemchenbeet.neuesBluemchen Lösung: Die Lösung finden Sie in den Files Bienchen.java, Bluemchenbeet.java und Bluemchen.java. Aufgabe 6 (Müll): ( = 14 Punkte) Wir beschäftigen uns in dieser Aufgabe mit einer Müllverwertungsfabrik. In dieser Fabrik wird Müll mit Müllwagen angeliefert und auf Müllbänder verteilt. Auf der Homepage zur Veranstaltung finden Sie die Dateien Muell.java, Fabrik.java, Wagen.java und Band.java. Laden Sie diese bitte herunter und verändern Sie diese wie in den folgenden Aufgabenteilen beschrieben. a) Für den Müll unterscheiden wir die Sorten Rest, Metall und Plastik. Schreiben Sie einen Aufzählungstypen (enum) Sorte, der diese drei Sorten abbildet. b) Ein Stück Müll bilden wir durch ein Objekt der Klasse Muell ab. Für jedes solche Objekt merken wir uns die Sorte und ob der Müll sauber ist. Hierfür existieren in der Klassendatei schon entsprechende Felder. Erweitern Sie die Klasse Muell um eine nicht-statische Methode tostring(), die (je nach Sorte des Mülls und der Sauberkeit) eine lesbare String-Darstellung wie in den folgenden Beispielen zurückgibt. Metall Plastik Rest Plastik (sauber) 10

11 c) In der Klasse Wagen ist die Methode zufallswagen vorgegeben, an der Sie nichts verändern müssen und sollen. Diese Methode erzeugt ein Objekt der Klasse Wagen, der einen Müllwagen mit zufälligem Müll als Inhalt repräsentiert. Hierfür wird die statische Methode fuersorte in der Klasse Muell aufgerufen, die noch nicht existiert und von Ihnen implementiert werden soll. Die Methode fuersorte bekommt einen int-wert von 0 bis einschließlich 2 und gibt abhängig von diesem Wert ein neues Muell-Objekt zurück. Dieses Objekt ist nicht sauber und hat die Sorte, die durch das int-argument definiert ist. Wenn also beispielsweise fuersorte mit dem Argument 1 aufgerufen wird und Plastik die zweite Sorte Müll ist, soll ein neues Muell-Objekt mit der Sorte Plastik zurückgegeben werden. Hinweis: Benutzen Sie die statische Methode values(), die in jedem Aufzählungstypen existiert und ein Array der einzelnen Aufzählungswerte zurückgibt. Das Argument können Sie als Index für dieses Array benutzen. d) Ein Müllband repräsentieren wir durch die Klasse Band. Die Datei enthält bereits die Deklaration eines Attributs vom Typ Muell[], das (analog zu den Wagen) benutzt wird, um den auf dem Band befindlichen Müll zu speichern. Für die nachfolgenden Aufgabenteile möchten wir uns anzeigen lassen, was für Müll in einem Wagen bzw. auf einem Band ist. Da beide Klassen Band und Wagen ein Array vom Typ Muell[] zum Speichern benutzen, bietet es sich an, eine Hilfsmethode zu schreiben. Diese Hilfsmethode soll ein Argument vom Typ Muell[] bekommen und einen String zurückliefern, der wie in folgendem Beispiel aufgebaut ist: Metall, Plastik (sauber), Rest, Rest, Plastik Für den Ergebnis-String werden also die tostring()-ausgaben der einzelnen Muell-Objekte entsprechend miteinander verbunden. Schreiben Sie diese Hilfsmethode mit dem Namen arraytostring in der Klasse Band und deklarieren Sie diese als static, wenn dies Sinn macht. Hinweis: Beachten Sie, dass das Array auch null-einträge enthalten kann und überspringen Sie diese! Erweitern Sie anschließend die Klassen Band und Wagen jeweils um eine Methode tostring(), die einen String entsprechend obiger Beschreibung zurückgibt. Verwenden Sie hierfür jeweils die Hilfsmethode! e) Für den Betrieb der Fabrik muss der Müll aus dem Wagen auf die Bänder verteilt werden. Schreiben Sie hierfür zuerst eine nicht-statische Methode leere() in der Klasse Wagen. Diese Methode soll ein Muell- Objekt aus dem inhalt-array zurückgeben und den Array-Eintrag auf null setzen. Nach entsprechend oft wiederholter Anwendung dieser Methode soll das Array also nur noch null enthalten. Falls das Array kein Muell-Objekt mehr enthält, soll die Methode leere() null zurückgeben. f) Schreiben Sie in der Klasse Band eine Methode drauf ohne Rückgabe. Diese Methode soll ein Muell- Objekt als Argument bekommen und dieses an einer freien Stelle (also mit Inhalt null) im inhalt-array des Bandes speichern. Wenn das Array keinen null-eintrag mehr enthält, soll nichts passieren. g) Verwenden Sie nun an der mit TODO markierten Stelle in der Klasse Fabrik die Methoden leere und drauf, um den Müll aus dem Wagen auf die Bänder bandeins und bandzwei zu verteilen. Wechseln Sie hierbei nach jedem Muell-Objekt das Band, so dass das erste, dritte,... Objekt dem ersten Band und das zweite, vierte,... Objekt dem zweiten Band hinzugefügt wird. Hinweis: Beachten Sie wieder, dass das Array auch null-einträge enthalten kann und überspringen Sie diese! Geben Sie vorher und nach jedem Hinzufügen aus, welchen Inhalt die Bänder und der Wagen haben. Orientieren Sie sich hierfür an der folgenden Beispielausgabe: Wagen: Rest, Plastik, Plastik, Metall, Plastik, Plastik, Rest, Metall, Plastik, Rest Band 1: Band 2: Wagen: Plastik, Plastik, Metall, Plastik, Plastik, Rest, Metall, Plastik, Rest 11

12 Band 1: Rest Band 2: Wagen: Plastik, Metall, Plastik, Plastik, Rest, Metall, Plastik, Rest Band 1: Rest Band 2: Plastik Wagen: Metall, Plastik, Plastik, Rest, Metall, Plastik, Rest Band 1: Rest, Plastik Band 2: Plastik Wagen: Plastik, Plastik, Rest, Metall, Plastik, Rest Band 1: Rest, Plastik Band 2: Plastik, Metall Wagen: Plastik, Rest, Metall, Plastik, Rest Band 1: Rest, Plastik, Plastik Band 2: Plastik, Metall Wagen: Rest, Metall, Plastik, Rest Band 1: Rest, Plastik, Plastik Band 2: Plastik, Metall, Plastik Wagen: Metall, Plastik, Rest Band 1: Rest, Plastik, Plastik, Rest Band 2: Plastik, Metall, Plastik Wagen: Plastik, Rest Band 1: Rest, Plastik, Plastik, Rest Band 2: Plastik, Metall, Plastik, Metall Wagen: Rest Band 1: Rest, Plastik, Plastik, Rest, Plastik Band 2: Plastik, Metall, Plastik, Metall Wagen: Band 1: Rest, Plastik, Plastik, Rest, Plastik Band 2: Plastik, Metall, Plastik, Metall, Rest h) Nachdem der Müll nun auf die Bänder verteilt ist, soll die Fabrik damit etwas machen. Schreiben Sie die Methode bearbeite ohne Rückgabe in der Klasse Fabrik. Diese Methode soll ein Array vom Typ Muell[] übergeben bekommen und darin alle Muell-Objekte der Sorte Metall entfernen (im Array durch null ersetzen) alle Muell-Objekte der Sorte Plastik reinigen (siehe unten) alle Muell-Objekte der Sorte Rest ignorieren alle null-einträge ignorieren Zum Reinigen der Plastik-Objekte schreiben Sie in der Klasse Muell die Methode reinige() und verwenden diese. Die Methode hat kein Argument und keine Rückgabe und setzt das Attribut sauber des jeweiligen Muell-Objekts auf true. Rufen Sie die Methode bearbeite nach Ihrem bisherigen Code in der main-methode der Klasse Fabrik auf und übergeben Sie das Muell-Array des zweiten Bandes. Geben Sie anschließend den Inhalt dieses Bandes aus. Daraus ergibt sich (als Fortsetzung des vorherigen Beispiels) diese Ausgabe: Band 2: Plastik (sauber), Plastik (sauber), Rest Lösung: Die Lösung finden Sie in den Files Band.java, Fabrik.java, Sorte.java und Wagen.java. 12

Tutoraufgabe 1 (Seiteneekte):

Tutoraufgabe 1 (Seiteneekte): Prof. aa Dr. J. Giesl Programmierung WS14/15 C. Aschermann, F. Frohn, J. Hensel, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung

Mehr

Tutoraufgabe 1 (Pilze):

Tutoraufgabe 1 (Pilze): Prof. aa Dr. J. Giesl Programmierung WS14/15 C. Aschermann, F. Frohn, J. Hensel, T. Ströder Tutoraufgabe 1 (Pilze): In dieser Aufgabe beschäftigen wir uns mit dem berühmten Gaunerpärchen Bonnie und Clyde.

Mehr

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Syntax und Semantik): 1. Was ist Syntax? Was ist Semantik? Erläutern Sie den Unterschied. 2.

Mehr

Methoden und Wrapperklassen

Methoden und Wrapperklassen Methoden und Wrapperklassen CoMa-Übung IV TU Berlin 06.11.2012 CoMa-Übung IV (TU Berlin) Methoden und Wrapperklassen 06.11.2012 1 / 24 Themen der Übung 1 Methoden 2 Wrapper-Klassen CoMa-Übung IV (TU Berlin)

Mehr

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Tag 5 Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Methoden Deklaration

Mehr

Java Übung. Übung 3. Werner Gaulke. 2. Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Java Übung. Übung 3. Werner Gaulke. 2. Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Java Übung Übung 3 Universität Duisburg-Essen Kommedia, Übung EinPro SS06, 2. Mai 2006 (UniDUE) 2. Mai 2006 1 / 17 Aufgabe 1 Umwandeln von do while in for Schleife. Listing 1: aufgabe3 1.java 1 public

Mehr

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2 Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Tutoraufgabe 1 (Zweierkomplement): a) Sei x eine ganze Zahl. Wie unterscheiden sich die Zweierkomplement-Darstellungen

Mehr

Institut für Informatik und Angewandte Kognitionswissenschaften

Institut für Informatik und Angewandte Kognitionswissenschaften Grundlegende Programmiertechniken (»Programmierung«), WS 2007/2008 Übungsblatt 5 Präsenzaufgaben: 11, 12, 13 Hausaufgabe: 14 Aufgabe 11 STRING- UND OBJEKT-VERGLEICH String s1 = new String("Test String");

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Tutoraufgabe 1 (Überladen von Methoden):

Tutoraufgabe 1 (Überladen von Methoden): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung

Mehr

Tutoraufgabe 1 (Fibonacci-Zahlen):

Tutoraufgabe 1 (Fibonacci-Zahlen): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Fibonacci-Zahlen): Die Folge der Fibonacci-Zahlen ist folgendermaßen definiert: F 0 = 0 F 1 =

Mehr

int i=1; //Integerzahl i anlegen und mit 1 initialisieren float wert; //Floatzahl deklarieren scanf( %f,&wert); //Wert über Tastatur eingeben

int i=1; //Integerzahl i anlegen und mit 1 initialisieren float wert; //Floatzahl deklarieren scanf( %f,&wert); //Wert über Tastatur eingeben Datenfelder (Array) Seite 1 von 7 Bei den bisherigen Programmen wurde für jede verwendete Variable (oder für jedes Objekt) ein eigener Typ und Name vergeben. Die Initialisierung, d.h. die Belegung mit

Mehr

Einführung in die Programmierung für NF MI. Übung 04

Einführung in die Programmierung für NF MI. Übung 04 Einführung in die Programmierung für NF MI Übung 04 Inhalt Arrays Einführung in Objekte Einführung in die Programmierung für NF Übung 04 2 Arrays Arrays repräsentieren Reihungen von Objekten, z.b. Variablen

Mehr

Tag 4 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java) Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)

Mehr

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 5. Dezember 2016 Programmieren I 5. Übungsblatt Hinweis: Auf diesem und den folgenden Übungsblättern

Mehr

Aufgabenblatt 5. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Aufgabenblatt 5. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt: Aufgabenblatt 5 Kompetenzstufe 1 Allgemeine Informationen zum Aufgabenblatt: Die Abgabe erfolgt in TUWEL. Bitte laden Sie Ihr IntelliJ-Projekt bis spätestens Freitag, 05.01.2018 13:00 Uhr in TUWEL hoch.

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 6.11.07, Weitere Anweisungen Übersicht 1 Verbundanweisung 2 Bedingte Anweisung 3 Auswahlanweisung 4 for Schleife 5 while Schleife 6 do Schleife 7 break Anweisung 8 continue Anweisung 9 Leere

Mehr

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen

Themen der Übung. Methoden und Wrapperklassen. Vorteile von Methoden. Methoden. Grundlagen Themen der Übung 1 Organisatorisches Methoden und Wrapperklassen 2 Methoden 3 Wrapper-Klassen CoMa-Übung IV TU Berlin 07.11.2012 Organisatorisches: Im Pool nur auf die Abgabeliste setzen, wenn ihr wirklich

Mehr

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Aufgabenblatt 4 Prof. R. Westermann, A. Lehmann,

Mehr

Übungsblatt 2. Java Vorkurs (WS 2017)

Übungsblatt 2. Java Vorkurs (WS 2017) Übungsblatt 2 Java Vorkurs (WS 2017) Aufgabe 1 Logische Operatoren Manchmal ist es wichtig zwei Werte miteinander zu vergleichen. Dazu gibt es in Java folgende Vergleichsoperatoren: Text Math. Zeichen

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Tag 8 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java) Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Programmanalyse): Prof. aa Dr. J. Giesl Programmierung WS14/15 C. Aschermann, F. Frohn, J. Hensel, T. Ströder Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung

Mehr

Ausgabe:

Ausgabe: Aufgabe 2.10: Schreiben Sie ein Programm, das zunächst die Quadratzahlen zu den Zahlen 1-10 mit Hilfe einer While- Schleife und danach die Quadratzahlen zu den Zahlen 3, 6, 9,.., 30 mit Hilfe einer For-Schleife

Mehr

pue13 January 28, 2017

pue13 January 28, 2017 pue13 January 28, 2017 1 Aufgabe 1 (Klammern und Anweisungsblöcke) Wie Sie in der Vorlesung gelernt haben, werden Anweisungsblöcke in Java nicht durch Einrückung, sondern mithilfe von geschweiften Klammern

Mehr

Grundlagen der OO- Programmierung in C#

Grundlagen der OO- Programmierung in C# Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3

Mehr

EidP. Blocktutorium SS 2014

EidP. Blocktutorium SS 2014 EidP. Blocktutorium SS 2014 Praktischer Teil //Programmieren = Theoriewissen + Handwerk; Bücher, Folien, Videos, Vorträge,... Können Theorie vermitteln. Der Rest ist ÜBUNG! Beste Vorbereitung: Programmieren

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden

Mehr

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom Einstieg in die Informatik mit Java, Vorlesung vom 2.5.07 Übersicht 1 2 definition 3 Parameterübergabe, aufruf 4 Referenztypen bei 5 Überladen von 6 Hauptprogrammparameter 7 Rekursion bilden das Analogon

Mehr

Objektorientiertes Programmieren (Java)

Objektorientiertes Programmieren (Java) Grundlagen Objektorientiertes Programmieren (Java) Java folgt gewissen Rechtschreibregeln die Syntax. Diese besagt, dass hinter jeden Befehl ein Semikolon( ; ) stehen muss, damit der Computer weiß, dass

Mehr

Tutoraufgabe 1 (Programmanalyse):

Tutoraufgabe 1 (Programmanalyse): Prof. aa Dr. M. Müller Programmierung WS15/16 C. Aschermann, J. Hensel, J. Protze, P. Reble Allgemeine Hinweise: Die Hausaufgaben sollen in Gruppen von je 3 Studierenden aus der gleichen Kleingruppenübung

Mehr

Vorbereitende Aufgaben

Vorbereitende Aufgaben Praktikum zu Einführung in die Informatik für LogWiIngs und WiMas Wintersemester 2017/18 Fakultät für Informatik Lehrstuhl 14 Lars Hildebrand Übungsblatt 4 Besprechung: 13. 17.11.2017 (KW 46) Vorbereitende

Mehr

GI Vektoren

GI Vektoren Vektoren Problem: Beispiel: viele Variablen vom gleichen Typ abspeichern Text ( = viele char-variablen), Ergebnisse einer Meßreihe ( = viele int-variablen) hierfür: Vektoren ( = Arrays = Feld ) = Ansammlung

Mehr

System.out.println("TEXT");

System.out.println(TEXT); Inhaltsübersicht - Erstes Beispiel - Datentypen - Ausdrücke und Operatoren - Schleifen / Bedinungen - Struktogramme - Grundgerüst eines Programms in JAVA - Einlesen von Daten Erstes Beispiel public class

Mehr

Aufgabenblatt 3. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt:

Aufgabenblatt 3. Kompetenzstufe 1. Allgemeine Informationen zum Aufgabenblatt: Aufgabenblatt 3 Kompetenzstufe 1 Allgemeine Informationen zum Aufgabenblatt: Die Abgabe erfolgt in TUWEL. Bitte laden Sie Ihr IntelliJ-Projekt bis spätestens Freitag, 24.11.2017 13:00 Uhr in TUWEL hoch.

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 4213 Variablen 17.834 float Flugzeug 36812736294 I write code Hund long String Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 3 + 4 1 Variablen sind wie Becher. Sie speichern etwas. // Variablen

Mehr

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen

Mehr

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7. CoMa 04 Java II Paul Boeck Humboldt Universität zu Berlin Institut für Mathematik 7. Mai 2013 Paul Boeck CoMa 04 7. Mai 2013 1 / 13 Verzweigungen Wenn-Dann Beziehungen if (BEDINGUNG) { else if (BEDINGUNG2)

Mehr

Programmieren in Java -Eingangstest-

Programmieren in Java -Eingangstest- Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit

Mehr

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben

Die for -Schleife HEUTE. Schleifen. Arrays. Schleifen in JAVA. while, do reichen aus, um alle iterativen Algorithmen zu beschreiben 18.11.5 1 HEUTE 18.11.5 3 Schleifen Arrays while, do reichen aus, um alle iterativen Algorithmen zu beschreiben Nachteil: Steuermechanismus ist verteilt Übersicht nicht immer leicht dazu gibt es for (

Mehr

Übungsblatt 1. Java Vorkurs (WS 2017)

Übungsblatt 1. Java Vorkurs (WS 2017) Übungsblatt 1 Java Vorkurs (WS 2017) Aufgabe 1 Hallo-Welt Erstelle ein neues Projekt mit dem Namen HelloJava. Erzeuge in diesem Projekt eine neue Klasse HelloJava. (a) Schreibe die main-methode in die

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen Welche Arten von Anweisungen gibt es? Anweisungen

Mehr

Tag 7 Repetitorium Informatik (Java)

Tag 7 Repetitorium Informatik (Java) Tag 7 Repetitorium Informatik (Java) Dozent: Patrick Kreutzer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

JAVA für Nichtinformatiker - Probeklausur -

JAVA für Nichtinformatiker - Probeklausur - JAVA für Nichtinformatiker - Probeklausur - Die folgenden Aufgaben sollten in 150 Minuten bearbeitet werden. Aufgabe 1: Erläutere kurz die Bedeutung der folgenden Java-Schlüsselwörter und gib Sie jeweils

Mehr

Grundlagen der Programmierung

Grundlagen der Programmierung Grundlagen der Programmierung Einführung in die strukturierte Programmierung Teil 5 Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur erstellt. Darüber hinaus sind viele Teile

Mehr

Einführung in das Programmieren Probeklausur Lösungen

Einführung in das Programmieren Probeklausur Lösungen Einführung in das Programmieren Probeklausur Lösungen Frederik Kanning 01.07.2013 Aufgabe 1 b/c) void definiert Methode ohne Rückgabewert return beendet aktuellen Methodenaufruf wenn Rückgabetyp nicht

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 47 Einstieg in die Informatik mit Java Anweisungen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 47 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung,

Mehr

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Rekursion Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 27 Motivation Beispiel: Fibonacci-Folge

Mehr

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services C# - Einführung in die Programmiersprache Methoden Leibniz Universität IT Services 02.07.12 Methoden... sind Subroutinen in einer Klasse. können einen Wert an den Aufrufer zurückgeben. verändern die Eigenschaften

Mehr

Tutoraufgabe 1 (Überladen von Methoden):

Tutoraufgabe 1 (Überladen von Methoden): Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Überladen von Methoden): Lösen Sie die folgende Aufgabe ohne Einsatz eines Computers. Bedenken

Mehr

Tutoraufgabe 1 (Fibonacci-Zahlen):

Tutoraufgabe 1 (Fibonacci-Zahlen): Prof. aa Dr. J. Giesl Programmierung WS11/12 M. Brockschmidt, F. Emmes, C. Fuhs, C. Otto, T. Ströder Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java Vorlesung vom 25.4.07, Anweisungen Übersicht 1 Ausdrucksanweisung 2 Einfache Ausgabeanweisung 3 Einfache Eingabeanweisung, Vorbereitungen 4 Verbundanweisung 5 Bedingte Anweisung 6 Auswahlanweisung 7 for

Mehr

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3

Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Aufgabenblatt 3 Übung zur Vorlesung Programmieren, Wintersemester 13/14 Übungsleiter: Sebastian Ebers Allgemeines Aufgabenblatt 3 Abgabe: 10.12.2013, vor der Vorlesung (14:15 Uhr, AM 1) Max.

Mehr

Lösungshinweise/-vorschläge zum Übungsblatt 5: Software-Entwicklung 1 (WS 2017/18)

Lösungshinweise/-vorschläge zum Übungsblatt 5: Software-Entwicklung 1 (WS 2017/18) Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 5: Software-Entwicklung 1 (WS 2017/18)

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Informatik B von Adrian Neumann

Informatik B von Adrian Neumann Musterlösung zum 7. Aufgabenblatt vom Montag, den 25. Mai 2009 zur Vorlesung Informatik B von Adrian Neumann 1. Java I Schreiben Sie ein Java Programm, das alle positiven ganzen Zahlen 0 < a < b < 1000

Mehr

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

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. ) 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:

Mehr

Objektorientierung. Programmierstarthilfe WS 2010/11 Fakultät für Ingenieurwissenschaften und Informatik

Objektorientierung. Programmierstarthilfe WS 2010/11 Fakultät für Ingenieurwissenschaften und Informatik Programmierstarthilfe WS 2010/11 Fakultät für Ingenieurwissenschaften und Informatik Organisatorisches Im Web unter http://www.uni-ulm.de/psh Vorwissen Du kannst bereits Klassen als Typen mit statischen

Mehr

Programmierung für Mathematik (HS13)

Programmierung für Mathematik (HS13) software evolution & architecture lab Programmierung für Mathematik (HS13) Übung 11 1 Aufgabe: Codeverständnis 1.1 Aufgabenstellung Notieren Sie, was der folgende Code ausgeben würde, wenn er so in einer

Mehr

Übungsblatt 2. Java Vorkurs (WS 2015)

Übungsblatt 2. Java Vorkurs (WS 2015) Übungsblatt 2 Java Vorkurs (WS 2015) Aufgabe 1 Logische Operatoren Manchmal ist es wichtig zwei Werte miteinander zu vergleichen. Dazu gibt es in Java folgende Vergleichsoperatoren: Text Math. Zeichen

Mehr

2 Teil 2: Nassi-Schneiderman

2 Teil 2: Nassi-Schneiderman 2 Teil 2: Nassi-Schneiderman Wie kann man Nassi-Schneiderman in einer objektorientierten Sprache verwenden? Jedes Objekt besitzt Methoden, welche die Attribute des Objektes verändern. Das Verhalten der

Mehr

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010

Grundlagen der Programmierung Teil1 Einheit III Okt. 2010 Grundlagen der Programmierung Teil1 Einheit III - 22. Okt. 2010 GDP DDr. Karl D. Fritscher basierend auf der Vorlesung Grundlagen der Programmierung von DI Dr. Bernhard Pfeifer Einschub Bevor wir mit den

Mehr

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14 Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14 Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Iman Kamehkhosh, Marcel Preuß, Henning Timm Übungsblatt 11

Mehr

Arrays (Reihungen) Arrays (Reihungen) in Java: Syntax, Typisierung, Semantik.

Arrays (Reihungen) Arrays (Reihungen) in Java: Syntax, Typisierung, Semantik. Arrays (Reihungen) Arrays (Reihungen) in Java: Syntax, Typisierung, Semantik. Wichtige Algorithmen mit Arrays Arrays als Implementierung von Mengen und Listen Finden von Maximum und Minimum Binäre Suche

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 26 Einstieg in die Informatik mit Java Methoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Methoden 2 Methodendefinition 3 Parameterübergabe, Methodenaufruf

Mehr

5. Java Arrays und Strings

5. Java Arrays und Strings Arrays Arrayvariable deklarieren: int[] z; z 5. Java Arrays und Strings Array erzeugen: z = new int[5]; Allokation, Referenzen, Elementzugriff, Mehrdimensionale Arrays, Strings, Stringvergleiche z ist

Mehr

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */)

Java Cheatsheet. Mehrzeiliger Kommentar (beginnt mit /* und endet mit */) Good code is its own best documentation. (Steve McConnell) Java Cheatsheet Java Grundlagen Aufbau einer Klasse Name der Klasse public class MeineKlasse { Textdatei MeineKlasse.java (muss dem Namen der

Mehr

Lösungshinweise/-vorschläge zum Übungsblatt 4: Software-Entwicklung 1 (WS 2017/18)

Lösungshinweise/-vorschläge zum Übungsblatt 4: Software-Entwicklung 1 (WS 2017/18) Dr. Annette Bieniusa Mathias Weber, M. Sc. Peter Zeller, M. Sc. TU Kaiserslautern Fachbereich Informatik AG Softwaretechnik Lösungshinweise/-vorschläge zum Übungsblatt 4: Software-Entwicklung 1 (WS 2017/18)

Mehr

Arbeitsblatt zu Methoden

Arbeitsblatt zu Methoden Arbeitsblatt zu Methoden In den vorhergehenden Programmen haben wir bereits jede Menge Methoden benutzt: 1. kara.move(), kara.turnright(), kara.putleaf() Dies sind alles Methoden, die etwas ausführen,

Mehr

1 Klassen und Objekte

1 Klassen und Objekte 1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente

Mehr

Tag 4 Repetitorium Informatik (Java)

Tag 4 Repetitorium Informatik (Java) Tag 4 Repetitorium Informatik (Java) Dozent: Patrick Kreutzer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2016/2017 Willkommen zum Informatik-Repetitorium!

Mehr

Umsetzung einer Klassenkarte in einer Programmiersprache

Umsetzung einer Klassenkarte in einer Programmiersprache Klassen in Java Umsetzung einer Klassenkarte in einer Programmiersprache Objektorientierte Programme bestehen (nur) aus Klassendefinitionen In Klassendefinitionen wird die Struktur der Objekte festgelegt,

Mehr

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 10 Gudrun Fischer Sascha Kriewel programmierung@is.informatik.uni-duisburg.de Übungsblatt Nr. 10 Aufgabe 20: Code Verständnis Löse diese Aufgabe selbständig als Vorbereitung zur Übung auf dem Papier. a) Gib

Mehr

Wissenschaftliches Rechnen

Wissenschaftliches Rechnen Institut für Numerische und Angewandte Mathematik 11.04.2012 FB Mathematik und Informatik der Universität Münster Prof. Dr. Christian Engwer, Dipl. Math. Dipl. Inf. Sebastian Westerheide Übung zur Vorlesung

Mehr

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4 Folienpaket 7 Themenschwerpunkte: Methoden in OOP 284 09/2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4 Eine Klasse entwerfen Eine Klasse enthält folgende Information: Name der Klasse (ist auch der

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 27 Einstieg in die Informatik mit Java Methoden / Funktionen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick 2 Zweck von Methoden 3 Methodendefinition

Mehr

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken Aufgabe 1.60 a) Welchen Wert erhält die boolesche Variable z in folgendem Beispiel? int i = 2, j = 5; boolean

Mehr

Probeklausur Informatik 2 Sommersemester 2013

Probeklausur Informatik 2 Sommersemester 2013 Probeklausur Informatik 2 Sommersemester 2013 1 Probeklausur Informatik 2 Sommersemester 2013 Name: Matrikelnummer: Hilfsmittel: Es sind alle schriftlichen Unterlagen, aber keine elektronischen Hilfsmittel

Mehr

Programmierung für Mathematik HS12 Übung 3

Programmierung für Mathematik HS12 Übung 3 Programmierung für Mathematik HS12 Übung 3 14. Oktober 2012 1 Aufgabe: Code verstehen 1.1 Ziele Präzedenz verstehen. If else kennen lernen. 1.2 Aufgabenstellung 1.2.1 Präzedenz Lesen Sie folgende Codeaussschnitte.

Mehr

Programmieren in Java

Programmieren in Java Ein Projekt 2 Wiederholung: new-operator Werte nicht-primitiver Datentypen müssen mit new erzeugt werden Es gibt keine Möglichkeit primitive Daten mit new zu erzeugen Beispiele int[] myarray = new int[]

Mehr

Prozeduren vs. Funktionen

Prozeduren vs. Funktionen Prozeduren vs. Funktionen Mit der Formalisierung wird auch der Unterschied zwischen Prozeduren und Funktionen noch einmal klar. Der Aufruf beider Varianten bewirkt zunächst das Gleiche: die Eingabevariablen

Mehr

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener

Mehr

JAVA - Methoden

JAVA - Methoden Übungen Informatik I JAVA - http://www.fbi-lkt.fh-karlsruhe.de/lab/info01/tutorial Übungen Informatik 1 Folie 1 sind eine Zusammenfassung von Deklarationen und Anweisungen haben einen Namen und können

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Lösungsblatt 4 Prof. R. Westermann, A. Lehmann, R.

Mehr

3.2 Datentypen und Methoden

3.2 Datentypen und Methoden Kap03.fm Seite 217 Dienstag, 7. September 2010 1:48 13 3.2 Datentypen und Methoden 217 3.2 Datentypen und Methoden Wie bei vielen höheren Programmiersprachen gibt es auch in Java einfache und strukturierte

Mehr

Institut für Informatik

Institut für Informatik Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Lösungsblatt 6 Prof. R. Westermann, A. Lehmann, R.

Mehr

Prozeduren Software Entwicklung 1

Prozeduren Software Entwicklung 1 Prozeduren Software Entwicklung 1 Annette Bieniusa, Mathias Weber, Peter Zeller In diesem Abschnitt befassen wir uns mit dem wichtigsten Abstraktionsmechanismus der imperativen Programmierung: Prozeduren.

Mehr

Grundlagen der Programmierung

Grundlagen der Programmierung Grundlagen der Programmierung Einführung in die strukturierte Programmierung Teil 5 Die Inhalte der Vorlesung wurden primär auf Basis der angegebenen Literatur erstellt. Darüber hinaus sind ausgewählte

Mehr

Android will doch nur spielen. Java Übung

Android will doch nur spielen. Java Übung Android will doch nur spielen Java Übung Vorbereitung: Erstellen Sie mit Eclipse zunächst ein neues Java Projekt JavaUebungen. Lassen Sie die restlichen Einstellungen unverändert. Erzeugen Sie das Projekt

Mehr

Institut für Programmierung und Reaktive Systeme 20. November Programmieren I. 4. Übungsblatt

Institut für Programmierung und Reaktive Systeme 20. November Programmieren I. 4. Übungsblatt Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 20. November 2017 Programmieren I 4. Übungsblatt Hinweis: Auf diesem und den folgenden Übungsblättern

Mehr

Algorithmen und Programmierung III

Algorithmen und Programmierung III Musterlösung zum 4. Aufgabenblatt zur Vorlesung WS 2006 Algorithmen und Programmierung III von Christian Grümme Aufgabe 1 Amortisierte Analyse 10 Punkte Zu erst betrachte ich wie oft die letzte Ziffer

Mehr

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag Ludwig-Maximilians-Universität München WS 2017/18 Institut für Informatik Übungsblatt 6 Prof. Dr. R. Hennicker, P. Wendler Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:

Mehr

2 Eine einfache Programmiersprache

2 Eine einfache Programmiersprache 2 Eine einfache Programmiersprache Eine Programmiersprache soll Datenstrukturen anbieten Operationen auf Daten erlauben Kontrollstrukturen zur Ablaufsteuerung bereitstellen Als Beispiel betrachten wir

Mehr

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

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java: Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Wiederholung So sieht ein leeres Java-Programm aus public class Programmname { public static void main (String[] args) { // Hier stehen die Anweisungen } } Anweisungen mit Variablen Wiederholung Deklaration

Mehr

Tutoraufgabe 1 (Listen):

Tutoraufgabe 1 (Listen): Prof. aa Dr. J. Giesl Programmierung WS16/17 F. Frohn, J. Hensel, D. Korzeniewski Allgemeine Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet

Mehr