Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung WS 2010 Praktikum: Grundlagen der Programmierung Aufgabenblatt 1 Prof. R. Westermann, A. Lehmann, R. Fraedrich, F. Reichl 02. November 08. November Einführung, Variablentypen, einfache Berechnungen und Funktionen 1.1 (Ü) Hello World Gegeben sei folgendes Java-Programm: class HelloWorld { public static void main ( String [] args ) { System. out. println (" Hello 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. Was bedeutet Übersetzen? Diskutieren Sie die Notwendigkeit mit Ihrem Tutor. 1.2 (Ü) Fortgeschrittene Editoren Programmcode kann in einfachen Standard-Editoren wie Notepad oder TextEdit schnell sehr unübersichtlich werden. Insbesondere das sogenannte Syntax-Highlighting ist für die Lesbarkeit des Codes sehr hilfreich. Falls Sie nicht bereits einen derartigen Editor benutzen, laden Sie sich nun beispielsweise Notepad++ (Windows) TextMate (OS X) jedit (alle Plattformen) http://notepad-plus-plus.org/ http://macromates.com/ http://www.jedit.org/ herunter und machen Sie sich mit den grundlegenden Funktionen vertraut. Für ein korrektes Syntax- Highlighting müssen Sie einstellen, welche Programmiersprache Sie verwenden möchten - in dieser Veranstaltung wird das ausschließlich Java sein. 1
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 an einem Tag durchgeführt wurden. (c) shippingcost: Europreis für die Versandkosten. (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, das die Werte in den Variablen vertauscht, so dass anschließend a = 9 und b = 3 gilt. Erweitern Sie hierzu entsprechend die Klasse SwapValues. 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 Wertgutschein in Höhe von e 150,- und einen Rabatt von 20 %, die kombiniert werden dürfen. 2
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 und danach der Wertgutschein abgezogen wird. 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 greetme(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 dem Radius r des Kreises. U K = 2 π r F K = π r 2 für ein an den Koordinatenachsen ausgerichtetes Rechteck R, das 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. 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 F D = s (s a) (s b) (s c) mit s = a + b + c 2 3
a, b und c seien die Seitenlängen des Dreiecks. 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. Zusatzfrage: Diskutieren Sie mit Ihrem Tutor, was bei ungültigen Eingaben (z.b. negativer Radius eines Kreises) passiert. Welche Schlüsse ziehen Sie aus Ihren Ergebnissen? Wie sollte mit derartigen Eingaben umgegangen werden? 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 mithilfe von JavaDoc! Anmerkung: Sie werden feststellen, dass alle in Java eingebauten Methoden und Klassen englische Namen haben. Um Quellcode möglichst lesbar zu halten, gehört es zum guten Ton, für die eigenen Bezeichner ebenfalls englische Namen zu wählen. Vermeiden Sie insbesondere Umlaute! 1.10 (H) Lohnrechner (+) 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 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 aus 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 dementsprechend 25,9 %. 1.11 (H) Geometrische Objekte in 3D (++) Ähnlich wie in der Übung sollen im folgenden Oberfläche O und Volumen V von Objekten im dreidimensionalen 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 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 5
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 V T = 2 s3 12 s sind die Seitenlängen des regulären Tetraeders. 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 zum 2D Fall durch B A 2 = (x b x a ) 2 + (y b y a ) 2 + (z b z a ) 2. 6