Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2009 Praktikum: Grundlagen der Programmierung Aufgabenblatt 1 Prof. R. Westermann, R. Fraedrich, R. Fülöp, H.G. Menz 2. November 2009 Abgabe: In KW 45/46 (5. November 11. November) vor der Übung. Einführung, Variablentypen, einfache Berechnungen und Funktionen 1.1 (Ü) Hello World Gegeben sei folgendes Java-Programm: c l a s s HelloWorld { p u b l i c s t a t i c void main ( S t r i n g [ ] a r g s ) { System. out. p r i n t l n ( H e l l o World! ) ; } } Was macht dieses Programm? Geben Sie das Programm mit Hilfe eines Editors ein. Speichern Sie das Programm unter dem Namen HelloWorld.java ab. Übersetzen Sie das Programm auf der Konsole mit dem Befehl javac HelloWorld.java. Führen Sie Ihr Programm mit dem Befehl java HelloWorld aus. 1.2 (Ü) Hello World in Eclipse Starten Sie nun die IDE (integrated development environment) Eclipse. Laden Sie das Eclipseprojekt zu dem aktuellen Aufgabenblatt von dem herunter und importieren Sie es. Elearning Portal der TUM: https://www.elearning.tum.de/ Wiederholen Sie nun die Hello World Aufgabe. Erstellen Sie die Klasse HelloWorld im Package de.tum.ws2009.grprog.uebungsblatt01 in der Entwicklungsumgebung. Machen Sie sich mit den grundlegenden Funktionen wie dem Erstellen und Ausführen des Programms vertraut. Exportieren Sie nun das aktuelle Projekt als Archiv Datei und laden Sie die Datei als Lösung für das Übungsblatt 1 im Elearning Portal hoch. (Sie können später Ihre vollständige Lösung für das 1
Übungsblatt 1 erneut hochladen. Die zuletzt angegebene Version wird anschließend von den Tutoren bewertet.) 1.3 (Ü) Allgemeine Fragen zu Java (a) Welche Basistypen stehen in Java zur Verfügung? (b) Wie werden Variablen deklariert? (c) Wie sieht eine Zuweisung aus? (d) Mit welchem Datentyp werden Zeichenfolgen repräsentiert? (e) Was sind Packages in Java? 1.4 (Ü) Variablentypen In einem Programm zur Verwaltung von Bestellungen in einem Versandhandel werden u.a. folgende Variablen verwendet: (a) nameofcompany: Enthält den Firmennamen, der auf die Rechnungen gedruckt wird. (b) numberoforders: In dieser Variable wird die Anzahl der Bestellungen gespeichert, die am einem Tag durchgeführt wurden. (c) shippingcost: Europreis für die Verandkosten. (d) averageordersinmonth: Diese Variable enthält die durchschnittliche Anzahl von Bestellungen pro Monat. (e) currentdate: heutiges Datum Welche Variablentypen würden Sie für die verschienden Variablen verwenden? Begründen Sie Ihre Wahl. 1.5 (Ü) Werte vertauschen Gegeben seien die beiden Variablen a und b mit den Werten a = 3 und b = 9. Schreiben Sie nun ein Programm, dass die Werte in den Variablen vertauscht, so dass anschließend a = 9 und b = 3 gilt. Erweitern Sie hierzu die Klasse SwapValues entsprechend. 1.6 (Ü) PC Einkauf Sie wollen sich einen neuen Rechner mit folgenden Komponenten kaufen: PC im Wert von e 599,- Monitor im Wert von e 189,90 Maus im Wert von e 20,79 Keyboard im Wert von e 49,99 Drucker im Wert von e 129,90 Hinzu kommt, dass Sie zwei Gutscheine haben, die Sie für den Einkauf verwenden können. Einen 2
Wertgutschein in Höhe von e 150,- und einen Rabatt von 20 %, die kombiniert werden dürfen. Nehmen Sie zuerst an, dass erst der Wertgutschein und auf den Restbetrag der Rabatt angewendet werden kann. Berechnen Sie die folgende Beträge und geben Sie diese mit System.out.println() aus: Summe aller Komponenten Betrag des Wertgutscheins Zwischensumme nach Abzug des Wertgutscheins Ersparnis durch den Rabatt Endsumme nach Abzug des Rabatts Enthaltene Mehrwertsteuer (19 %) Ändern Sie das Programm anschließend so ab, dass erst der Rabatt angewendet wird und danach der Wertgutschein abgezogen wird und passen Sie die Ausgabe entsprechend an. Erweitern Sie die Klasse Shopping entsprechend. 1.7 (Ü) Fragen zu Funktionen in Java (a) Was versteht man unter einer Funktion/Methode? (b) Wie wird eine Funktion definiert? (c) Wofür ist das Schlüsselwort return gut? (d) Was ist das besondere an der public static void main(string[] args) Funktion? (e) Erstellen Sie nun eine Funktion public static String greatme(string name) in Ihrer HelloWorld Klasse die eine Begrüßung mit dem übergebenen Namen als String zurückgibt. Geben Sie die Nachricht auf der Konsole aus. 1.8 (Ü) Geometrische Objekte in 2D Im folgenden sollen der Umfang U und die Fläche F einfacher geometrischer Objekte bestimmt werden. Vervollständigen Sie hierzu die entsprechenden Funktionen in der Klasse GeometricObjects2D. Testen Sie Ihre Funktionen mit geeigneten Beispielen. Die Formeln zur Berechung von Umfang U und Fläche F sind für einen Kreis K: mit r dem Radius des Kreises. U K = 2 r π F K = r 2 π, für ein an den Koordinatenachsen ausgerichtetes Rechteck R, dass durch den unteren linken Punkt (x 1, y 1 ) und den rechten oberen Punkt (x 2, y 2 ) geben ist, U R = 2 a + 2 b F R = a b, wobei a und b jeweils die Seitenlängen des Rechtecks sind. 3
für ein beliebiges Dreieck D mit den Eckpunkten (x 1, y 1 ), (x 2, y 2 ), (x 3, y 3 ): U D = a + b + c a, b und c seien die Seitenlängen des Dreiecks. F D = s (s a) (s b) (s c) mit s = a + b + c. 2 Anmerkungen: Die euklidische Entfernung zwischen zwei Punkten A = (x a, y a ) und B = (x b, y b ) ist gegeben durch A B 2 = (x a x b ) 2 + (y a y b ) 2. Die Quadratwurzel kann mit double Math.sqrt(double a) berechnet werden. π steht als double Math.PI zur Verfügung. 1.9 (Ü) JavaDoc Es ist sehr wichtig, dass Quellcode lesbar und gut verständlich geschrieben wird. Hierzu gehört auch eine ausführliche und prägnante Dokumentation des Codes. JavaDoc bietet eine Möglichkeit Quellcode intuitiv und unkompliziert durch kontextsensitive Kommentare zu erweitern. Sehen Sie sich dazu die Klasse GeometricObjects2D an und erklären Sie Ihrem Tutor wie die Dokumentation hier gehandhabt wurde. Dokumentieren Sie in Zukunft Ihre Lösungen für JavaDoc. Anmerkung: Sie werden feststellen, dass alle in Java eingebauten Methoden und Klassen englische Namen haben. Um Quellcode möglichst lesbar zu halten bietet es sich an, für die eigenen Bezeichner ebenfalls englische Namen zu wählen. 1.10 (H) Lohnrechner (8 Punkte) Ihre Aufgabe ist es zu einem gegebenen Brutto-Lohn die gesetzlichen Abzüge und das resultierende Netto-Einkommen zu berechnen. Erweitern Sie dazu die Funktion computenetwages in der Klasse SalaryCalculator. Vereinfachend werden die gesetzlichen Beträge und Abgaben wie folgt angenommen: Grundfreibetrag 1 pro Jahr: e 7834,- Prozentual vom Brutto-Lohn (Arbeitnehmeranteil): Krankenversicherung: 7,9 % Rentenversicherung: 9,95 % Arbeitslosenversicherung: 1,4 % Pflegeversicherung: 1,225 % Prozentual vom zu versteuernden Einkommen (Brutto-Lohn Freibetrag): Lohnsteuer: 14 % Prozentual von der Lohnsteuer: Solidaritätszuschlag: 3,75 % 1 Der Grundfreibetrag ist ein der Teil des Einkommens auf den keine Steuer erhoben wird. Da Kontrollstrukturen wie if noch nicht bekannt sind, soll vereinfachend angenommen werden, dass der Funktion nur Einkommen über der Freibetragsgrenze übergeben werden. 4
Kirchensteuer: 8 % Die Funktion soll basierend auf dem gegebenen Brutto-Monatslohn (grosswagespermonth) folgende Beträge berechnen und ausgeben: (a) Lohn mit und ohne Freibetrag: - Brutto-Monatslohn - Freibetrag - Zu versteuerndes Einkommen (b) Sozialabgaben: - Krankenversicherung - Rentenversicherung - Arbeitslosenversicherung - Pflegeversicherung - Summe dieser Sozialabgaben (c) Steuern: - Lohnsteuer - Solidaritätszuschlag - Kirchensteuer - Summe dieser Steuern (d) Netto-Lohn (= Brutto-Lohn Sozialabgaben Steuern) (e) Prozentualer Anteil der Abgaben Abschließend soll der berechnete Netto-Lohn von der Funktion zurückgegeben werden. Hinweise: Verwenden Sie für die Berechnung ausschließlich den Datentyp double und achten Sie genau darauf auf welche Beträge die Abgaben angewendet werden. Rufen Sie die Methode in der main-methode auf um die Richtigkeit der Ausgabe zu testen. Für ein Einkommen von e 1000,- sollten die Summe der Sozialabgaben e 204,75, die Steuern e 54,31 und der Nettolohn folglich e 740,94 betragen. Der prozentuale Anteil aller Abgaben im Verhältnis zum Bruttolohn beträgt entsprechend 25,9 %. 1.11 (H) Geometrische Objekte in 3D (6 Punkte) Ähnlich wie in der Übung sollen im folgenden Oberfläche O und Volumen V von Objekten im drei dimensionalen Raum bestimmt werden. Vervollständigen Sie hierzu die entsprechenden Funktionen in der Klasse GeometricObjects3D. Testen Sie Ihre Funktionen mit geeigneten Beispielen. Die Formeln zur Berechung von Oberfläche O und Volumen V sind für eine Kugel: r ist der Radius der Kugel. O Kugel = 4 π r 2 V Kugel = 4 3 π r3. für einen an den Koordinatenachsen ausgerichteten Quader Q, der durch den unteren linken 5
vorderen Punkt (x 1, y 1, z 1 ) und den rechten oberen hinteren Punkt (x 2, y 2, z 2 ) geben ist, O Q = 2 a b + 2 b c + 2 c a V Q = a b c, wobei a, b und c jeweils die Seitenlängen des Quaders sind. für einen regulären Tetraeder T mit den Eckpunkten (x 1, y 1, z 1 ), (x 2, y 2, z 2 ), (x 3, y 3, z 3 ), (x 4, y 4, z 4 ): O T = 3 s 2 s sind die Seitenlängen des regulären Tetraeder. V T = 2 s3 12. Anmerkung: Die euklidische Entfernung zwischen zwei Punkten A = (x a, y a, z a ) und B = (x b, y b, z b ) berechnet sich analog zu dem 2D Fall durch B A 2 = (x b x a ) 2 + (y b y a ) 2 + (z b z a ) 2. 6