Programmierung WS16/17 Übungsblatt 2 (Abgabe 07.11.2016) Prof.aa Dr. J. Giesl F. Frohn, J. Hensel, D. Korzeniewski Allgemeine Hinweise: • Die Hausaufgaben sollen in Gruppen von je 2 Studierenden aus der gleichen Kleingruppenübung (Tutorium) bearbeitet werden. Namen und Matrikelnummern der Studierenden sind auf jedes Blatt der Abgabe zu schreiben. Heften bzw. tackern Sie die Blätter! • Die Nummer der Übungsgruppe muss links oben auf das erste Blatt der Abgabe geschrieben werden. Notieren Sie die Gruppennummer gut sichtbar, damit wir besser sortieren können. • Die Lösungen müssen bis Montag, den 07.11.2016 um 15:00 Uhr in den entsprechenden Übungskasten eingeworfen werden. Sie nden die Kästen am Eingang Halifaxstr. des Informatikzentrums (Ahornstr. 55). Alternativ können Sie die Lösungen auch vor der Abgabefrist direkt bei Ihrer Tutorin/Ihrem Tutor oder unmittelbar vor Beginn in der Globalübung abgeben. • In einigen Aufgaben müssen Sie in Java programmieren und .java-Dateien anlegen. Drucken Sie diese aus und schicken Sie sie per E-Mail vor Montag, dem 07.11.2016 um 15:00 Uhr an Ihre Tutorin/Ihren Tutor. Stellen Sie sicher, dass Ihr Programm von javac akzeptiert wird, ansonsten werden keine Punkte vergeben. • Codescape gelöst werden: Einige Hausaufgaben müssen im Spiel https://codescape.medien.rwth-aachen.de/progra/ Diese Aufgaben werden getrennt von den anderen Hausaufgaben gewertet. • Halten Sie sich beim Lösen von Programmieraufgaben an die auf der Website zur Vorlesung verfügbaren Codekonventionen. Verstöÿe, die zu unleserlichem Code führen, können zu Punktabzug führen. Tutoraufgabe 1 (Zweierkomplement): a) Sei x eine ganze Zahl. Wie unterscheiden sich die Zweierkomplement-Darstellungen von x und −x? b) Erklären Sie im Detail, wie die beiden Ausgaben des folgenden Programms berechnet werden. public class Test { public static void main ( String [] args ) { int zahl = -2147483648; } } Hinweis: System . out . println ( zahl + 1); System . out . println ( zahl - 1); −231 = −2147483648 c) Welche Zahlen repräsentieren die folgenden Bitfolgen im 5-Bit Zweierkomplement? 00010 10111 11011 01101 10000 Aufgabe 2 (Zweierkomplement): (3+2 Punkte) a) Welche Zahlen repräsentieren die folgenden Bitfolgen im 10-Bit Zweierkomplement? 0100110011 1011011101 1 0000101111 1010000000 Programmierung WS16/17 Übungsblatt 2 (Abgabe 07.11.2016) b) Schreiben Sie für jeden der folgenden Ausdrücke ein Java Programm, das den jeweiligen Ausdruck aus- wertet. Was ist das Ergebnis? Begründen Sie, wie das Ergebnis zustande kommt. i) ii) -2147483648 - 2147483648 > 2147483647 + 2147483647 -2147483648 + (-2147483648) > 2147483647 + 2147483647 Tutoraufgabe 3 (Casting): Bestimmen Sie den Typ und das Ergebnis der folgenden Java-Ausdrücke und begründen Sie Ihre Antwort. Sollte der Ausdruck nicht typkorrekt sein, begründen Sie, worin der Fehler besteht. Dabei seien die Variablen x, y und a) false && true b) 10 / 3 c) 10 / 3. d) x == y ? x > y : y < z e) (byte) (127 + 1) f) 'x' + y + z g) x + y + "z" h) 1 || 0 z wie folgt deklariert: int x = 1; int y = 2; int z = 3; Aufgabe 4 (Casting): (8.5 Punkte) Bestimmen Sie den Typ und das Ergebnis der folgenden Java-Ausdrücke. Begründen Sie Ihre Antwort und geben Sie dabei für alle auftretenden Typkonvertierungen den resultierenden Typ und den resultierenden Wert an. Geben Sie darüber hinaus an, ob es sich um explizite oder implizite Konvertierungen handelt. Sollte der Ausdruck nicht typkorrekt sein, begründen Sie, worin der Fehler besteht. Dabei seien die Variablen x und y wie folgt deklariert: a) '4' + '7' b) (int) ((char) 65536) c) (x < y) < true d) (long)3F/3.1 == (int)3/3.2D e) (long)(3F/3.1) == (int)(3/3.2D) f) 1L + (float) 3D int x = 120; int y = 2; 2 Programmierung WS16/17 Übungsblatt 2 (Abgabe 07.11.2016) Tutoraufgabe 5 (Programmierung): Schreiben Sie ein einfaches Java-Programm, welches den Benutzer auordert, eine positive ganze Zahl (d. h. grö- ÿer als 0) einzugeben. Danach soll das Programm eine durch die Return/Enter-Taste beendete Zahl einlesen. Diese Eingabeauorderung mit anschlieÿendem Einlesen soll solange wiederholt werden, bis der Benutzer eine positive Zahl eingibt. Wenn die Benutzereingabe keine Zahl ist, darf sich das Programm beliebig verhalten. Anschlieÿend soll der Benutzer aufgefordert werden, ein Wort einzugeben. Dieses soll ebenfalls durch die Return/Enter-Taste beendet werden. Das Wort soll eingelesen und schlieÿlich so oft hintereinander in einer Zeile ausgeben werden, wie durch die eingegebene positive Zahl festgelegt wurde. Hinweise: • Verwenden Sie die Methode next() der Klasse Scanner zum Einlesen von Strings. Aufgabe 6 (Programmierung): (6 Punkte) Implementieren Sie eine einfache Passwortverwaltung in Java. Die Passwortverwaltung kann nur ein Passwort System.out System.in. Nutzen sie einen Scanner, um Benutzereingaben über System.in einzulesen. Die Passwortver- speichern. Die Kommunikation zwischen dem Benutzer und der Passwortverwaltung erfolgt über und waltung unterstützt die folgenden Aktionen, wobei die unterstrichenen Buchstaben den Zeichen entsprechen, die der Benutzer eingeben muss, um die jeweilige Aktion auszuwählen. • Anzeigen des Passworts • Setzen des Passworts • Verlassen des Programms Anzeigen des Passworts Wenn der Benutzer A eingibt und seine Eingabe mit Enter bestätigt, dann soll die Passwortverwaltung • den Benutzer darauf hinweisen, dass noch kein Passwort gesetzt wurde, falls die Aktion Setzen des Passworts noch nicht erfolgreich abgeschlossen wurde oder • das Passwort andernfalls auf Setzen des Passworts System.out ausgeben. Wenn der Benutzer S eingibt und seine Eingabe mit Enter bestätigt, dann soll die Passwortverwaltung den Benutzer auordern, das neue Passwort einzugeben. Anschlieÿend soll der Benutzer aufgefordert werden, das neue Passwort zur Bestätigung erneut einzugeben. Falls der Benutzer zweimal das gleiche Passwort eingegeben hat, soll das neue Passwort gespeichert und der Benutzer darüber informiert werden, dass das Passwort erfolgreich geändert wurde. Andernfalls soll das Passwort nicht geändert und der Benutzer darauf hingewiesen werden, dass die Bestätigung des Passworts fehlgeschlagen ist und das Passwort folglich nicht geändert wurde. Verlassen des Programms Wenn der Benutzer V eingibt und seine Engabe mit Enter bestätigt, dann soll sich die Passwortverwaltung beenden. Andere Eingaben Falls die Eingabe des Benutzers zu keinem der genannten Fälle passt, soll die Passwort- verwaltung den Benutzer darauf hinweisen, dass die von ihm gewählte Aktion unbekannt ist. Beispiel Die Interaktion mit der Passwortverwaltung kann also z.B. wie folgt aussehen: W ä hlen Sie eine Aktion : Passwort * A * nzeigen Passwort * S * etzen Programm * V * erlassen > A Es wurde noch kein Passwort gesetzt ! 3 Programmierung WS16/17 Übungsblatt 2 (Abgabe 07.11.2016) > S Neues Passwort eingeben : > test Neues Passwort best ä tigen : > tset Best ä tigung des neuen Passworts fehlgeschlagen . Passwort wurde nicht ge ä ndert . > A Es wurde noch kein Passwort gesetzt ! > S Neues Passwort eingeben : > test Neues Passwort best ä tigen : > test Passwort erfolgreich ge ä ndert ! > A test > test Unbekannte Aktion : test > S Neues Passwort eingeben : > abc Neues Passwort best ä tigen : > abc Passwort erfolgreich ge ä ndert ! > A abc > V Auf Wiedersehen ! Hinweise: • Um zwei Strings str1 und str2 auf Gleichheit zu testen, verwenden Sie Aufgabe 7 (Deck 1): Lösen Sie die Räume von Deck 1 des Spiels str1.equals(str2). (Codescape) Codescape. 4