Programmierkurs (Java) 30. Oktober 2017 Institut für Informatik Winter 2017/18 Dr. V. Weil ÜBUNGBLATT 02 Online-Abgabe bis spätestens 06.11.2017 um 14:00 Uhr; Online-Abgabe nur mit Benutzernamen und Passwort. Nur Online-Abgabe-Aufgaben können online eingereicht werden. Handschriftliche Abgaben bis spätestens 06.11.2017 um 14:00 Uhr im Briefkasten Weyertal 121, 5. Etage. Dieses Übungsblatt wird in der Woche des 06. November besprochen. = http://informatik.uni-koeln.de/weil/programmierkurs.php Organisatorische Informationen In der Woche vom 06.11. werden die Übungsblätter 01 und 02 besprochen. Wenn möglich, bringen Sie Ihren eigenen Laptop zu den Übungen mit. Handschriftliche Abgaben: Vergessen Sie nicht, Name und Matrikelnummer auf Ihre Abgabe zu schreiben. Sie dürfen zu insgesamt dritt abgeben. Feiertage: Hinweise dazu gab es in der Vorlesung und auf Übungsblatt 01. Aufgabe 14 [Deklarationen von Variablen] 6 Punkte Eine Liste der reservierten Schlüsselwörter für Java finden Sie beispielsweise hier: http://openbook.rheinwerk-verlag.de/javainsel/javainsel_02_001.html Geben Sie an, welche Namen als Variablennamen in Java verboten sind. (a) Switch (b) if (c) 2_codierung (d) _TolleWolle (e) main (f) return42 (g) String (h) this (i) that (j) returns (k) bit (l) true Hinweis: Variablennamen, die Konventionen nicht einhalten, aber sonst den Namensregeln entsprechen, gelten folglich als erlaubt. Aufgabe 15 [Binärkodierung] 3 Punkte Das im alltäglichen Gebrauch verwendete System, um Zahlen darzustellen, ist das Dezimalsystem. Im Dezimalsystem wird eine nichtnegative Ganzzahl 1 als nicht durch Kommata getrennte Folge von Koeffizienten des folgenden Terms kodiert: 1 also die Zahlen 0, 1, 2, 3, 4... w = a n 10 n + a n 1 10 n 1 +... + a 1 10 + a 0 10 0 (1) 1
Der Koeffizient zur kleinsten Potenz steht dabei ganz rechts, der Koeffizient zur zweitkleinsten Potenz links daneben und so weiter. Die Koeffizienten können einen der Werte {0, 1,..., 9} annehmen, also a i {0,..., 9} für i {0,..., n}. Wir berechnen den Wert w einer nichtnegativen Ganzzahl, indem wir also ihre Kodierung q = a n a n 1... a 1 a 0 anhand des Terms in (1) dekodieren. Beispiel: Schreiben wir im Alltag 230, so kodieren wir damit (in der Regel unbewusst) die nichtnegative Ganzzahl mit Wert 230 im Dezimalsystem. Wir schreiben lediglich die Koeffizienten a 2 = 2, a 1 = 3 und a 0 = 0 auf. Wir berechnen den Wert, für den die Kodierung 2 2 3 0 steht, dann so: 230 = 2 10 2 + 3 10 1 + 0 10 0. Was etwas verwirrend sein mag: Die Kodierung (230) und der Wert (230), den wir aus der Kodierung berechnen, sind hier identisch. Das liegt daran, dass wir bereits im Dezimalsystem denken und schreiben. Den Wert w einer natürlichen Zahl, die binär kodiert ist, berechnen wir auf eine ganz ähnliche Weise. Statt der Basis 10 legen wir einen zu (1) analogen Term zugrunde, diesmal zur Basis 2: w = a n 2 n + a n 1 2 n 1 +... + a 1 2 + a 0 2 0 (2) Zurück zum Beispiel: Wir möchten den Wert w einer nichtnegativen Ganzzahl berechnen. Diese Zahl ist im Binärcode q angegeben: Wir können w dann so berechnen: q = c n c n 1... c 1 c 0 w = c n 2 n + c n 1 2 n 1 +... + c 1 2 + c 0 2 0 (3) Sei also eine natürliche Zahl, binär kodiert, so angegeben: q = 11100110 (4) Dann ermitteln wir den Wert w der durch den Code q dargestellten Zahl so: w = 1 128 + 1 64 + 1 32 + 0 16 + 0 8 + 1 4 + 1 2 + 0 1 (5) = 230 Wir wandeln also eine Zahl, die im Binärcode angegeben ist, in Dezimalcode um 3. Geben Sie (im Dezimalcode) den Wert w der Zahl an, die wir durch die Binärkodierung q angegeben haben. (6) (a) q = 1101 (b) q = 0100 (c) q = 1111001010 (d) q = 1001 (e) q = 1 (f) q = 10 2 Die Leerzeichen zwischen 2 und 3 sowie 3 und 0 dienen lediglich der Verdeutlichung, im Alltag schreiben wir sie nicht hin. 3 Hinweis: Die Bibliotheken dieser Hochschule bieten eine großzügige Menge an Büchern (gebunden oder elektronisch) an, in denen dieser Sachverhalt nochmals erklärt wird. Zu finden beispielsweise in einführenden Büchern zur Informatik, welche Zahlensysteme behandeln, wie zum Beispiel das hier besprochene Binär- beziehungsweise Dualsystem. 2
Aufgabe 16 [Wert Name Datentyp] 5 Punkte In Abbildung 1. sehen Sie den Ausschnitt eines Quellcodes. Für die Stellen Stelle 2 bis Stelle 6 im Programm geben Sie bitte an, welches der aktuelle Wert der Variablen z, y und q ist. Für Stelle 1 haben wir Ihnen das beispielhaft angegeben: Stelle 1: Wert von z ist 0, Wert von y ist 0, Wert von q ist false. Abbildung 1: Aufgabe 16. Es folgt eine Aufgabe mit Online-Abgabe auf der nächsten Seite. 3
Aufgabe 17 [Online-Abgabe: Binärkodierung] 16 Punkte Schreiben Sie ein Programm mit 2 Klassen und folgender Struktur und Namensgebung: Projekt: Blatt_02 Package: aufg_17 Class: Main Class: Binaer Dabei muss Ihre Main-Klasse wie in Abbildung 2 aussehen. Diese Klasse darf von Ihnen nicht verändert werden. Wir stellen Ihnen Main.java und Binaer.java zur Verfügung 4 (siehe ). Abbildung 2: Main-Klasse in Aufgabe 17. Weiterhin muss Ihre Binaer-Klasse wie in Abbildung 3 aussehen. Abbildung 3: Binaer-Klasse für Aufgabe 17. Sie dürfen nun den Blockkommentar JAVA löschen und dort Ihre Anweisungen hinschreiben. Um das Programm laufen bzw. testen zu lassen, führen Sie die Main-Klasse aus. Kurz gesagt: Programmieren in Binaer.java, ausführen mit Main.java. Die Variablen bit1, bit2, bit4, bit8 und decimal haben wir bereits für Sie deklariert. Das bedeutet, Sie deklarieren diese Variablen nicht noch einmal (Sie können und müssen sie aber natürlich benutzen). 4 Es bleibt Ihnen überlassen, ob Sie die Main.java selbst abtippen oder herunterladen. 4
Sollten Sie weitere Variablen benötigen, so können Sie diese problemlos in Ihrem Programmierabschnitt deklarieren. Schreiben Sie nun ein Programm, welches den Wert von bit1 als Koeffizient c 0, bit2 als Koeffizient c 1, bit3 als Koeffizient c 2 und bit8 als Koeffizient c 3 aufnimmt (siehe Aufgabe 15) und daraus die Dezimaldarstellung des kodierten Wertes berechnet und in decimal speichert. Weiterhin sollte Ihr Programm prüfen, ob die für die Variablen bit1 bis bit8 eingegebenen Werte tatsächlich gleich 1 oder gleich 0 sind. Sollte etwas anderes eingegeben werden, so sollte in Ihrem Code der Wert der Variablen falscheeingabe auf true und decimal auf den Wert 1 gesetzt werden. Ihr Programm sollte ausschließlich die in der Vorlesung und in den Übungen angegebenen Werkzeuge benutzen, also im Wesentlichen die Auswahlstruktur if, die Vergleichsoperatoren (siehe unten), die arithmetischen Operatoren zur Addition von Zahlwerten (das hier: + ) und zur Multiplikation von Zahlwerten ((das hier: * ; siehe auch Aufgabe 16). Sie dürfen die Werte der Variablen 5 bit1 bis bit4 in der Klasse Binaer zu Ihrer eigenen Kontrolle ( Habe ich das jetzt richtig progammiert? ) ändern. Diese Werte werden von uns aus Testgründen ohnehin überschrieben. In der Vorlesung haben Sie bereits den Vergleichsoperator 6 < ( kleiner als ) kennengelernt. Vergleichsoperatoren vergleichen Ausdrücke anhand ihrer numerischen Werte miteinander. Als Ergebnis liefert ein solcher Vergleich einen Wert, der vom Typ boolean ist und somit entweder true ( richtig, wahr ) oder false ( falsch, unwahr ) ist. Beispiel: Hat die int-variable y den Wert 5, dann ist der Wert des Ausdrucks y < 4 false und ist vom Typ boolean. Die Vergleichsoperatoren in Java sind < kleiner als <= kleiner als oder gleich > größer als >= größer als oder gleich == gleich! = ungleich Weitere Beispiele: Hat die int-variable y den Wert 5, dann ist der Wert des Ausdrucks y == 4 und des Ausdrucks y <= 4 false und ist vom Typ boolean. Der Wert des Ausdrucks y > 4, y >= 4 und y!= 4 ist true und ist vom Typ boolean. Möchten Sie Ihr Programm auf unseren Server hochladen, so folgen Sie bitte den Anweisungen aus Aufgabe 3 (Insbesondere laden Sie bitte eine einzige.zip - Datei hoch). ACHTUNG: Da wir in unser Testsystem noch die Testfälle einpflegen müssen, macht es noch keinen Sinn, bereits jetzt Ihre Lösung hochzuladen. Schauen Sie bitte regelmäßig auf die Webseite, dort wird angekündigt, ab wann Sie Aufgabe 17 hochladen können. 5 nicht aber deren Datentyp oder Name 6 auch relationaler Operator genannt 5