Ãbung 1 Datentypen in Java
Ãbung 1 Datentypen in Java
Ãbung 1 Datentypen in Java
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Algorithmen und Datenstrukturen 1<br />
Prof. Dr. C. Stamm christoph.stamm@fhnw.ch Tel.: 056 462 47 44<br />
Übung 1 <strong>Datentypen</strong> <strong>in</strong> <strong>Java</strong><br />
Aufgabe 1: <strong>Java</strong>-Syntax<br />
Repetieren Sie oder eignen Sie sich die <strong>Java</strong>-Syntax für Ausdrücke, Zuweisungen, Datentypkonversionen<br />
und Kontrollstrukturen an.<br />
Aufgabe 2: Zuweisungen und Zahlentypen<br />
Nehmen Sie, dass folgende Variablen def<strong>in</strong>iert seien:<br />
byte bi;<br />
<strong>in</strong>t i;<br />
long l;<br />
char c;<br />
boolean b;<br />
float f;<br />
double d;<br />
a) Gültige und ungültige Zuweisungen<br />
Betrachten Sie die folgenden Zuweisungen und entscheiden Sie ohne Computer, welche der<br />
folgenden Zuweisungen korrekt s<strong>in</strong>d.<br />
i = 97;<br />
bi = i;<br />
c = i;<br />
c = (char)i;<br />
c = 'a';<br />
c = 8364;<br />
c = 0x20ac;<br />
c = '€';<br />
c = \u20ac;<br />
c = '\n';<br />
i = c;<br />
bi = (byte)257;<br />
b = 1;<br />
b = true;<br />
i = l;<br />
l = i;<br />
b = i < l;<br />
b = i > c;<br />
f = i;<br />
i = f;<br />
d = 2.3;<br />
i = 2.3;<br />
f = d;<br />
d = f;
) Berechnen Sie den Wert<br />
Berechnen Sie den Wert der Variablen nach der Zuweisung ohne Computer.<br />
// arithmetische Operatoren<br />
l = 20/6; l =<br />
l = 20%6; l =<br />
i = -20%6; i =<br />
i = 5;<br />
i += 10; i =<br />
i++; i =<br />
++i; i =<br />
bi = 7;<br />
b = 7 == bi++; b =<br />
// logische und vergleichende Operatoren<br />
b = 2.5 > 50.0; b =<br />
b = 40.0/6.0 == 6.666666; b =<br />
f = (float)2.0000000000001;<br />
b = f != 2; b =<br />
d = 2.0000000000001;<br />
b = d == 2; b =<br />
b = (true && false) || (true && !false); b =<br />
b = (true || false) && (false || !true); b =<br />
b = (1/10) == 0.1; b =<br />
Aufgabe 3: Zahlentypen und Genauigkeit<br />
a) Integerüberläufe, Genauigkeitsverluste <strong>in</strong> Rechenoperationen<br />
Alle <strong>Datentypen</strong> haben e<strong>in</strong>en klar def<strong>in</strong>ierten Wertebereich. So bewegen sich ganze Zahlen<br />
vom Typ <strong>in</strong>t im Bereich von -2 31 bis 2 31 -1. Was passiert, wenn das Resultat e<strong>in</strong>er Rechenoperation<br />
plötzlich diesen Bereich verlässt Diese Problematik soll hier untersucht werden.<br />
Erzeugen Sie zunächst e<strong>in</strong> neues <strong>Java</strong> Projekt, um die Programme dieser Aufgabe aufnehmen<br />
zu können. Nennen Sie dieses Projekt zum Beispiel „Aufgabe2“.<br />
Schreiben Sie e<strong>in</strong> kle<strong>in</strong>es Programm mit dem Namen IntegerLimits.<br />
• Deklarieren Sie <strong>in</strong> diesem Programm e<strong>in</strong>e Variable vom Typ <strong>in</strong>t und <strong>in</strong>itialisieren Sie die<br />
Variable auf den Wert 1.<br />
• Multiplizieren Sie den Wert Ihrer Variablen mit 256 und drucken Sie das Resultat auf dem<br />
Bildschirm aus.<br />
• Wiederholen Sie den letzten Schritt m<strong>in</strong>destens 4-mal.<br />
Beobachten Sie (mit dem Debugger und an der Programmkonsole), was mit der Variablen<br />
passiert.<br />
Was ist der grösstmögliche Integerwert<br />
Was ist der kle<strong>in</strong>ste (negative) Integerwert<br />
In <strong>Java</strong> gibt es auch den e<strong>in</strong>fachen Datentyp long. Welches ist der grösstmögliche und<br />
welches der kle<strong>in</strong>stmögliche Wert des Datentyps long
) Genauigkeit der unter <strong>Java</strong> verwendeten Fliesskommazahlen<br />
Schreiben Sie nun e<strong>in</strong> kle<strong>in</strong>es Programm mit dem Namen FloatPrecision.<br />
• Deklarieren Sie <strong>in</strong> diesem Programm e<strong>in</strong>e float Variable und <strong>in</strong>itialisieren Sie ihren Wert<br />
auf 1.<br />
• Multiplizieren Sie den Wert Ihrer Variablen mit 256 und drucken Sie das Resultat auf dem<br />
Bildschirm aus.<br />
• Wie oft können Sie den letzten Schritt wiederholen, bevor e<strong>in</strong> Überlauf stattf<strong>in</strong>det Wie<br />
oft können Sie den Schritt wiederholen, wenn Sie die Variable als double def<strong>in</strong>ieren<br />
Versuchen Sie anschliessend das Folgende:<br />
• Setzen Sie e<strong>in</strong>e float Variable auf den Wert 1'000'000'000 (e<strong>in</strong>e Milliarde, oder 1.e9)<br />
• Def<strong>in</strong>ieren Sie e<strong>in</strong>e zweite Variable vom Typ float, setzen Sie deren Wert auf<br />
1'000'000'001 (e<strong>in</strong>e Milliarde und E<strong>in</strong>s)<br />
• Berechnen Sie den Unterschied (Differenz) zwischen den beiden Variablen<br />
• Testen Sie, ob die beiden Werte gleich s<strong>in</strong>d mit dem Operator ==<br />
Erklären Sie die Befunde. Würden Sie die gleichen Resultate antreffen, hätten Sie statt e<strong>in</strong>er<br />
float Variable e<strong>in</strong>e double Variable oder e<strong>in</strong>e <strong>in</strong>t Variable verwendet<br />
Aufgabe 4: Testfragen<br />
a) Gibt es e<strong>in</strong>en <strong>in</strong>t-Wert, für den gilt: -x == x<br />
b) Welches ist die kle<strong>in</strong>ste float/double Zahl, für die gilt: x == x + 1<br />
c) Gibt es e<strong>in</strong>e float-Zahl, für die gilt: x != x