03. Übungsblatt - Technische Universität Braunschweig

Werbung
Technische Universität Braunschweig
Institut für Programmierung und Reaktive Systeme
Dr. Werner Struckmann
9. November 2012
Programmieren I
3. Übungsblatt
Hinweis: Auf diesem und den folgenden Übungsblättern finden Sie jeweils eine Pflichtaufgabe. Insgesamt werden in diesem Semester fünf Pflichtaufgaben gestellt. Für die richtige und vollständige Lösung einer Pflichtaufgabe erhalten Sie sechs Übungspunkte. Um
die Prüfungsvorleistung bzw. die Studienleistung zu erbringen, müssen Sie mindestens 15
Übungspunkte erreichen. Dabei muss bei jeder Pflichtaufgabe mindestens ein Übungspunkt
erworben werden. Sie können (und sollten) die Aufgaben in Zweiergruppen bearbeiten.
Nach der Abgabe müssen Sie die Lösung Ihrem Tutor in der Rechnerübung erläutern.
Ihre Lösung der Pflichtaufgabe dieses Übungsblatts müssen Sie bis spätestens zum
18. November 2012 auf der Web-Seite
http://abgabe.yafido.de
abgeben.
Halten Sie sich bei der Programmierung an die in der Vorlesung vorgestellten Richtlinien zur Formatierung von Java-Programmen. Auf der Internetseite zu dieser Veranstaltung finden Sie eine Zusammenstellung dieser Richtlinien. Kommentieren Sie Ihre Lösung
der Pflichtaufgabe. Der Kommentar muss Ihren Namen, Ihre Matrikelnummer und Ihre Übungsgruppe sowie eine Beschreibung Ihrer Lösung enthalten. Auf der Abgabeseite
finden Sie eine Möglichkeit, die Formatierung Ihrer Lösung zu checken.
Aufgabe 16: Was geben die folgenden Druckbefehle aus? Überlegen Sie zuerst und
überprüfen Sie Ihre Antwort anschließend am Rechner.
a)
System.out.println(0+1+2+3+4);
System.out.println(""+0+1+2+3+4);
System.out.println(0+1+2+3+4+"");
System.out.println(0+1+2+""+3+4);
System.out.println(0+1+"2"+3+4);
b)
int a = 4, b = 3, c = 2, d = 1;
System.out.println(++a);
System.out.println(a);
System.out.println(b++);
System.out.println(b);
System.out.println((c++)+(++c));
System.out.println(c);
System.out.println((d++)+(d++));
System.out.println(d);
c)
System.out.println(7<<2);
System.out.println(7>>2);
System.out.println(7>>>2);
System.out.println(-7<<4);
System.out.println(-7>>4);
System.out.println(-7>>>4);
Aufgabe 17:
Wie wird der Buchstabe „ß“ in den folgenden Zeichensätzen dargestellt?
a) ASCII-Zeichensatz
b) Iso-Latin-1-Code
c) Unicode
d) UTF-8-Code
Was muss in System.out.println(’\uxxxx’) bzw. System.out.println(’\yyy’) für
xxxx bzw. yyy eingesetzt werden, damit der Buchstabe „ß“ ausgegeben wird? Wie wird
der ganzzahlige Wert −3 in Java gespeichert?
Aufgabe 18: Welche Dezimalzahlen werden durch die Dualzahlen 10.101010 und 10.10
dargestellt? Wie lautet die Darstellung der Dezimalzahl 2.0/9.0 als Dualzahl?
Aufgabe 19: Die interne Darstellung einer Gleitkommazahl vom Typ double in einem
64-Bit-Wort nach dem IEEE-Standard sieht wie folgt aus:
63
±
62 . . . 52
E
51 . . . 0
M
Der Exponententeil E wird durch 11 Bits dargestellt und liegt im Bereich von 0 bis 2047,
wobei die Werte 0 und 2047 für spezielle Zahlen (Null, denormalisierte Werte, Unendlich,
Not-a-Number) reserviert sind. Der Mantissenteil M beansprucht 52 Bits. Im Normalfall,
d. h. mit Ausnahme der speziellen Zahlen, ist M der Anteil der Mantisse nach dem Dezimalpunkt. Vor dem Dezimalpunkt steht eine 1, die nicht abgespeichert wird. Man sagt,
die Mantisse sei normalisiert.
a) Welcher binäre Exponentenbereich wird durch diese Darstellung abgedeckt? Welcher
Exponentenbereich ergibt sich hieraus für das Dezimalsystem?
b) Wie viele Dezimalstellen können in der binären Mantisse etwa gespeichert werden?
c) Geben Sie eine Zahl an, die in diesem Format nicht exakt darstellbar ist.
–2–
Aufgabe 20: Sie sollen verschiedene Variable in einem Programm deklarieren. Finden
Sie den passenden Typ für Variable, die angeben,
•
•
•
•
•
•
•
•
•
mit welchem Buchstaben Ihr Nachname beginnt,
wie viele Menschen in Deutschland leben,
wie viele Menschen auf der Erde leben,
ob Sie männlich oder weiblich sind,
wie viele Semester Sie studieren werden,
wie viele Student(innen) an dieser Vorlesung teilnehmen,
ob Sie BaFöG erhalten,
wie teuer ein Brot ist,
wie groß die Masse der Erde ist.
Aufgabe 21: Werten Sie – jeweils unter Annahme der Deklaration int x = 7; – die
folgenden Ausdrücke aus. In welchen Fällen wird der Wert von x durch die Auswertung
verändert? Überlegen Sie zuerst und überprüfen Sie Ihre Antwort anschließend am Rechner.
a) x <= 2
e) x & 2
i) x >> 2
b) x -= 2
f) x << 2
j) x += 2
c) x % 2
g) x | 2
k) x =+ 2
d) x / 2
h) x ^ 2
l) x =~ 2
Aufgabe 22: Was geben die folgenden Programmstücke aus? Überlegen Sie zuerst und
überprüfen Sie Ihre Antwort anschließend am Rechner.
a)
boolean b = false;
if (b = true)
System.out.println(true);
else
System.out.println(false);
b)
int i = 0;
if (i<1)
i++;
if (i<1)
i++;
else i--;
System.out.println(i);
c)
int i = 0;
if (i>0)
if (i<1)
i++;
else i--;
System.out.println(i);
–3–
Pflichtaufgabe 23:
In der Klasse java.lang.System befindet sich die Methode
public static long currentTimeMillis()
mit der folgenden Beschreibung:
Returns the current time in milliseconds. Note that while the unit of time of
the return value is a millisecond, the granularity of the value depends on the
underlying operating system and may be larger. For example, many operating
systems measure time in units of tens of milliseconds.
Returns: the difference, measured in milliseconds, between the current time and
midnight, January 1, 1970 UTC.
Nach der Zuweisung
long t = java.lang.System.currentTimeMillis()
besitzt die Variable t daher den Wert, wie viele Millisekunden seit dem 1. Januar 1970,
0:00 Uhr, vergangen sind. Der Wert bezieht sich auf die sog. koordinierte Weltzeit (UTC,
Universal Time Coordinated). Die Mitteleuropäische Zeit (MEZ) erhält man, wenn man
eine Stunde addiert. Die Mitteleuropäische Sommerzeit (MESZ) erhält man, wenn man
zwei Stunden addiert.
Schreiben Sie eine Klasse Uhrzeit, die die aktuelle Uhrzeit mit der Methode
java.lang.System.currentTimeMillis()
berechnet. Die Zeitzone soll als Parameter auf der Kommandozeile übergeben werden. Der
Dialog soll folgendermaßen ablaufen:
javac Uhrzeit.java
java Uhrzeit 1
Die Ausgabe soll wie folgt aussehen:
Es ist jetzt 17:40 Uhr und 32 Sekunden (MEZ).
Falls die Eingabe java Uhrzeit 2 lautet, soll die Ausgabe die Form
Es ist jetzt 18:40 Uhr und 32 Sekunden (MESZ).
besitzen. Falls die Eingabe java Uhrzeit 0 lautet, soll die Ausgabe wie folgt aussehen:
Es ist jetzt 16:40 Uhr und 32 Sekunden (UTC).
Zur Berechnung der Zeit dürfen Sie außer der Methode currentTimeMillis keine
weiteren Methoden der Java-API verwenden. Zeitzonen müssen nicht ganzzahlig sein. Zur
Lösung Ihrer Aufgabe reicht es aber, wenn Sie einen ganzzahligen Wert nehmen. Falls keine
Zeitzone auf der Kommandozeile angegeben wird, soll der Wert 0 angenommen werden.
Aufgabe 24: Mit der Methode currentTimeMillis (s. vorige Aufgabe) können natürlich
auch der Wochentag und das Datum berechnet werden. Der 1. Januar 1970 war ein Donnerstag. Seit 1970 sind alle durch vier teilbaren Jahre Schaltjahre. Die nächste Ausnahme
von dieser Regel ist erst das Jahr 2100. Die Eingabe java Uhrzeit 1 soll zur folgenden
Form der Ausgabe führen:
–4–
Heute ist Mittwoch, der 7. November 2012.
Es ist jetzt 17:40 Uhr und 32 Sekunden (MEZ).
–5–
Herunterladen