Blatt 3

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