Übungsblatt 2

Werbung
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
Herunterladen