Fakultät für Informatik Lehrstuhl 1 Dr. Lars Hildebrand Carla Delgado-Battenfeld Fatih Gedikli Tobias Marschall Benjamin Schowe Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11 Hinweis: Übungsblatt 3 Bearbeitungszeit: 08.10.11.2010 Auf diesem Übungsblatt müssen Sie in einigen Aufgaben bestimmte Webseiten önen. Wenn Sie die entsprechenden URLs nicht abschreiben wollen, können Sie die jeweilige Webseite önen, indem Sie in dem PDF dieses Übungsblatts ihre URL anklicken. Aufgabe 3.1 Fehlersuche In dieser Aufgabe sollen Sie nicht programmieren. Bearbeiten Sie stattdessen die Aufgabe nur auf dem Papier so, wie Sie es auch in der Klausur tun müssen. • Betrachten Sie das untenstehende Java-Programm. Was soll es Ihrer Meinung nach ausgeben? • Das Programm enthält Syntaxfehler, die dazu führen, dass das Programm nicht kompiliert werden kann. Unterstreichen Sie die Syntaxfehler im Programmtext und korrigieren Sie sie auf den entsprechenden Linien daneben. • Werden Laufzeitfehler auftreten, wenn das Programm nach der Korrektur der Syntaxfehler ausgeführt wird? Wenn ja, welche Laufzeitfehler erwarten Sie? • Enthält das Programm auÿerdem Semantikfehler, die dazu führen, dass das Programm nicht das berechnet, was von ihm erwartet wird? Wenn ja: Wie müssen die Fehler korrigiert werden: Der Programmtext: 1 2 3 4 5 Class WochenImSchaltjahr { public static void main ( string [] args ) { integer tage ; int wochen ; int resttage ; 6 tage = 366 wochen = tage * 7; resttage = tage % 7; 7 8 9 10 11 12 13 14 15 16 } { System . out . pint ( " Ein Schaltjahr besteht " ); // System . out . print (" manchmal "); Systemout . println ( " aus " + wochen + " Wochen und " resttage + " Tagen .); Seite 1 von 5 Aufgabe 3.2 Die Java-VM In Kapitel 1 (Folie 6) der Vorlesung wurde das allgemeine Konzept einer virtuellen Maschine (VM) vorgestellt. In dieser Aufgabe sollen Sie nun Informationen speziell über die Java-VM und die Java-API sammeln. Lesen Sie dazu folgenden Text auf den Webseiten der Firma Sun: http://java.sun.com/docs/books/tutorial/getStarted/intro/definition.html Bearbeiten Sie dann die folgenden Fragen: • Beschreiben Sie noch einmal in eigenen Worten, was beim Kompilieren eines Java-Programms geschieht. • Wie lautet der Name des Java-Kompilierprogramms? • Woraus besteht eine • Was ist der Vorteil, den die Java-VM im Hinblick auf verschiedene Betriebssystem-Plattformen bietet? • Können Sie demnach eine .class-Datei? .class-Datei, die Sie an der Uni unter dem Betriebssystem Linux kompiliert haben auch zu Hause in Ihrer Java-VM unter einem anderen Betriebssystem ausführen? • Was ist der Nachteil der in der VM ausgeführten Java-Programme im Vergleich zu betriebssystemabhängigen (sogenannten nativen ) Programmen, wie sie zum Beispiel mit der Programmiersprache C erstellt werden? • Wofür steht die Abkürzung API? • Woraus besteht die Java-API? Aufgabe 3.3 Primitive Datentypen und Strings In Kapitel 1 (Folien 1122) der Vorlesung haben Sie unterschiedliche Datendarstellungen kennengelernt. Schauen Sie sich diese Folien noch einmal an und betrachten Sie zusätzlich den folgenden Text auf der Sun-Webseite: • http://java.sun.com/docs/white/langenv/Simple.doc1.html#1225 Lesen Sie den Abschnitt 2.1.1 über primitive Datentypen. Tragen Sie dann alle primitiven Datentypen der Programmiersprache Java in der folgenden Tabelle ein und beschreiben Sie kurz in eigenen Worten, worum es sich bei dem jeweiligen Datentyp handelt. Seite 2 von 5 Datentyp • Beschreibung Lesen Sie dann noch den Abschnitt 2.1.4 über Strings und notieren Sie, was Ihnen wichtig erscheint: Aufgabe 3.4 Einlesen von der Tastatur In dieser Aufgabe werden Sie ein Programm schreiben, das zwei Zahlen vom Benutzer einlesen kann. Schreiben Sie zunächst folgenden Quellcode ab und führen Sie das Programm aus. 1 import java . util . Scanner ; 2 3 4 5 6 7 8 9 10 class Einlesen { public static void main ( String [] args ) { Scanner scanner = new Scanner ( System . in ); System . out . print ( " Bitte geben Sie eine Zahl ein " ); int x = scanner . nextInt (); System . out . println ( " Ihre Eingabe war : " + x ); } } Bis auf die Zeilen 1, 5 und 7 sollte Ihnen alles bekannt sein. In Zeile 1 teilen Sie dem Compiler mit, dass eine Klasse, die den Namen Scanner hat, aus der Java-API eingebunden werden soll. Was genau eine Klasse ist, erfahren Sie in den nächsten Wochen. Im Moment ist wichtig, dass der Scanner verschiedene Datentypen von der Tastatur einlesen kann, insbesondere auch Zahlen vom Typ int. In Zeile 5 wird der Scanner gestartet, oder auch initialisiert. Auch dies wird erst später genauer erklärt. In Zeile 7 wird der Scanner benutzt: Sobald das Programm an die Stelle kommt, an der scanner.nextInt() steht, wird eine Zahl vom Benutzer abgefragt und kann vom Programm weiterverwendet werden. Erweitern Sie das Programm so, dass zwei Zahlen abgefragt werden und anschlieÿend ihre Summe und ihre Dierenz ausgegeben werden. Seite 3 von 5 Aufgabe 3.5 Typ Boolean Schauen Sie sich folgendes Programm an und überlegen Sie, was die Ausgabe sein könnte. 1 2 3 4 5 6 7 8 class BooleanBeispiel { public static void main ( String [] args ) { boolean a = 7 > 6; boolean b = -5 < -10; boolean c = 11 == 11; System . out . println ( " a : " + a + " , b : " + b + " , c : " + c ); } } Notieren Sie die von Ihnen vermutete Ausgabe: Führen das Programm nun in Java aus (nachdem Sie es abgeschrieben haben) und überprüfen Sie Ihre Vermutung. Beschreiben Sie kurz, was das Programm tut: Aufgabe 3.6 Teilbarkeit Verwenden Sie das in den Aufgaben 3.4 und 3.5 Gelernte und schreiben Sie ein Programm, das folgendes leistet: a) Den Benutzer auordern eine ganze Zahl einzugeben. b) Die Zahl einlesen. c) Feststellen, ob die eingegebene Zahl durch 3 teilbar ist und das Ergebnis in einer Variable vom Typ boolean speichern. d) Das Ergebnis ausgeben. Aufgabe 3.7 Zahlensysteme In dieser Aufgabe wollen wir ein Programm zur Umrechnung von Binärzahlen in Dezimalzahlen schreiben. Konkret sollen Sie ein Programm schreiben, dass vom Benutzer vier mal jeweils ein Bit (0 oder 1) einliest und die resultierende Dezimalzahl ausgibt. Betrachten Sie folgende Tabelle und testen Sie zunächst, ob Ihr Programm die in den ersten beiden Zeilen angegebenen Zahlen korrekt ausrechnet. Fügen Sie dann die fehlenden Werte ein. Bit 3 Bit 2 Bit 1 Bit 0 Dezimalzahl 0 1 0 1 5 1 1 0 0 12 0 0 1 0 1 1 1 1 1 0 0 1 Seite 4 von 5 Ergänzende Aufgaben Aufgabe 3.8 Strings In der Aufgabe 3.3 haben Sie sich schon etwas mit der Klasse String vertraut gemacht. Auch wenn Sie erst zu späterem Zeitpunkt in der Vorlesung erfahren, was genau eine Klasse ist, wollen wir Strings hier schon benutzen. Eine Variable vom Typ String kann zum Beispiel durch den folgenden Befehl deklariert und initialisiert werden: String s = " Hallo Welt " ; Man sagt s ist ein Objekt String. Auf Objekten können bestimmte (je nach Objekt) Operationen vom Typ ausgeführt werden. Zum Beispiel können wir einen String in Groÿbuchstaben verwandeln: String t = s . toUpperCase (); Wir bezeichnen toUpperCase() als Verwenden Sie auch die Methoden Methode Methode der Klasse String. Probieren Sie das obige Beispiel aus. toLowerCase(), length() und trim() und notieren Sie ihren Eekt: Eekt toLowerCase() length() trim() Aufgabe 3.9 Zahlensysteme II In Aufgabe 3.7 haben Sie ein Programm erstellt, um Zahlen aus dem Zweiersystem (Binärsystem) in das Zehnersystem (Dezimalsystem) umzurechnen. Man kann nicht nur Zahlensysteme zur Basis 2 oder 10, sondern zu jeder anderen Basis n betrachten; dabei muss n eine ganze Zahl gröÿer 1 sein. Erweitern Sie das Programm aus Aufgabe 3.7, so dass erst vom Benutzer die Basis des Zahlensystems eingelesen wird und dann vier Ziern einer Zahl. Die Zahl soll dann aus dem angegebenen Zahlensystem in das Dezimalsystem umgerechnet und ausgegeben werden. Vervollständigen Sie mit Hilfe Ihres Programms die folgende Tabelle: Basis Zier 3 Zier 2 Zier 1 Zier 0 Dezimalzahl 2 0 1 0 1 5 10 0 1 0 2 102 8 7 0 1 3 3595 5 4 1 2 2 6 4 1 2 2 8 0 7 3 5 Seite 5 von 5