You are on page 1of 3

Aufgabenblatt 1

Grundlagen der Informatik, Sommersemester 2015

Abgabe: 4. Mai 2015, 18:00

Allgemeine Hinweise

Damit wir Aufgaben sinnvoll korrigieren konnen


mussen
die Abgaben ubsersetzbar

sein. Ubersetzt
Ihre Abgabe

nicht (z.B. weil package-Anweisungen in Ihren Quellen enthalten sind), wird sie mit 0 Punkten bewertet. Sorgen
ubersetzt

Sie deswegen unbedingt vor der Abgabe dafur,


werden konnen
dass alle Dateien ordnungsgema

(z.B. keine packages verwendet werden).

Ihre Abgaben werden automatisch korrigiert. Bei den Downloads der Ubungsaufgaben
finden Sie eine verkurzte

Version dieses Tests zur Kontrolle. Bitte fuhren


Sie diesen vor der Abgabe durch um mogliche
Fehler aus

zuraumen.
Werden im Test Fehler angezeigt werden Sie sicher nicht die vollen Punkte auf Ihre Abgabe
erhalten.
Bewertet werden ausschlielich Abgaben die vor Ablauf der Abgabefrist korrekt ins EST hochgeladen wurden.
ubertragen
Bitte prufen
Sie nach dem hochladen im EST nochmals nach ob die Dateien ordnungsgema
wur

den in dem Sie diese nochmals herunterladen und deren Inhalt uberpr
ufen.
Die Lesbarkeit von Quellcode hangt

teilweise sehr stark von dessen Formatierung ab. Deswegen bewerten wir in den Abgaben auch die Formatie

rung des Quellcodes anhand der in den Ubungen


vorgestellten Codierrichtlinien und ziehen bei Verstoen
bis
zu 4 Punkte ab.
Ein weiteres Problem sind Plagiate. Wir testen alle Abgaben automatisch auf Plagiate. Die dabei auffallenden

Gruppen werden danach manuell uberpr


uft.
erarbeitet

Sind wir uns sicher, dass der Code nicht eigenstandig


wurde geben wir beiden beteiligten Parteien jeweils 0 Punkte auf die gesamte Aufgabe. Achtung: Die Ab
schreibtests erfolgen nicht immer zeitnah. In begrundeten
Fallen
werden wir vor Abschluss des Semesters

auch ruckwirkend
Plagiate eintragen.

Aufgabe 1.1: Hallo Welt

5 Punkte

Abzugebende Dateien: HelloWorld.java

Das erste Programm, das jeder Informatiker in einer neuen Programmiersprache erstellt, ist Hello World. Auch
Sie sollen die GdI-Vorlesung mit diesem einfachen Programm beginnen.
1. Erstellen Sie eine Java-Datei HelloWorld.java (Zum Beispiel mit Eclipse, Notepad oder einem anderen
Texteditor ihrer Wahl)
2. Kopieren Sie den folgenden Text in die Datei:
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello World!");
}
}

3. Fuhren
Sie ihr Programm aus und geben dieses im EST ab.

4. Deklarieren Sie in der main-Methode in der Zeile nach der Anweisung System.out.println("Hello
World!"); eine Variable mit dem Name hallo und dem Datentypen float.
5. Initialisieren Sie die Variable hallo mit dem Wert 42.
6. Legen Sie eine weitere Variable mit dem Bezeichner welt fur
einen ganzzahligen Datentyp an und initialisieren Sie diese mit dem Wert 23.
7. Geben Sie (mit System.out.println) die Summe von hallo und welt aus.
8. Fuhren
Sie ihr Programm erneut aus und geben dieses nochmals im EST ab.

Aufgabe 1.2: Runloop

14 Punkte

Abzugebende Dateien: Runloop.java

In den kommenden Ubungen


werden wir haufig
mit dem GdI-Framework arbeiten und damit Anwendungen

F. Bauer, L. Hocker,
V. Lange, L. Schmidt https://gdi.cs.fau.de/s15

Seite 1 von 3

Aufgabenblatt 1
Grundlagen der Informatik, Sommersemester 2015

Abgabe: 4. Mai 2015, 18:00

schreiben. Der Kern des Frameworks ist ein sogenannter Runloop, dessen Verhalten Sie in dieser Aufgabe implementieren sollen. Im Wesentlichen ist ein Runloop eine Endlosschleife, in der periodisch definierte Methoden
aufgerufen werden.
1. Laden Sie das GdI-Framework (gdi-01.jar) fur
diese Aufgabe von der GdI-Webseite herunter.

2. Binden Sie die .jar-Datei in Ihr Projekt ein (eine Beschreibung fur
Eclipse finden Sie im Ubungsfoliensatz
Klassenbibliotheken auf der GdI-Webseite).
3. Erstellen Sie eine Java-Datei Runloop.java und fugen
Sie dort den folgenden Text ein:

import gdi.game.runloop.GdiKit;
public class Runloop extends GdiKit{
public static void main(String[] args){
GdiKit.main(args);
}
protected static void setupWorld() {
}
protected static String update(String inStr, double time) {
return null;
}
protected static void render(String str){
}
}

4. Fuhren
Sie Ihr Programm aus. Es sollte nun eine Text der Art Booting World with Version ... ange
zeigt werden.
5. Bevor der Runloop startet, muss das Programm durch einen Aufruf von setupWorld() initialisiert werden.
Fugen
Sie diesen am Ende der main-Methode ein.

6. Erweitern Sie den Rumpf der setupWorld-Methode so, dass die Zeichenkette
Starte Verarbeitung...
angezeigt wird. Starten Sie Ihr Programm. In der (Eclipse-)Konsole sollte der obige Text angezeigt werden.
7. Ihr Programm soll ein vorgegebenes Textdokument zeilenweise lesen, jede Zeile verschlusseln
und an
schlieend in einem vordefinierten Format auf der Konsole ausgeben. In einem Runloop gibt es dazu
typischerweise zwei Methoden: update um Werte zu berechnen und render um Werte anzuzeigen.
Erweitern Sie die render-Methode so, dass die ubergebene
Zeichenkette str auf der Konsole ausgege
ben wird.
8. In der update-Methode soll die Zeichenkette in inStr mit Hilfe der Methode GdiKit.encrypt verschlusselt

werden. Verwenden Sie die Dokumentation (doc-01.zip fur


diese Aufgabe auf der Webseite) fur
eine ge
nauere Erklarung
der Methode.
Neben der zu verschlusselnden
Zeichenkette muss noch ein Chiffre ubergeben
werden. Dieser soll aus

der Zeit berechnet werden. Multiplizieren Sie dazu die ubergebene


Zeit mit 10 und speichern Sie die
se in einer int-Variable mit der Bezeichnung chiffre. Verwenden Sie den Modulo-Operator, um den
so berechneten Wert in das Intervall 1-13 zu transformieren und ubergeben
Sie diesen der Methode

GdiKit.encrypt. Eine ubergebene


Zeit von 0.2s sollte also den Chiffre 3, die Zeit 1.7s den Chiffre 5

erzeugen.
9. Die Methode update soll nicht mehr null zuruckgeben,
sondern eine wie folgt formatierte Zeichenkette:

[chiffre]:[inStr]:[GdiKit.encrypt(inStr, chiffre)].
Fur
werden.
den Aufruf update("Hallo", 1.7) soll also 5:Hallo:Mfqqt zuruckgegeben

10. Bevor wir den eigentlichen Runloop einfugen


konnen,
muss noch die zu lesende Textdatei geladen und die

Zeit initialisiert werden. Rufen Sie dazu GdiKit.loadTextFromFile und GdiKit.initTime in der Methode
setupWorld auf.
11. Nun kann der eigentliche Runloop am Ende der main-Methode eingefugt
werden. Der Runloop soll eine
Endlosschleife sein, die pro Durchlauf eine Zeile der geladenen Textdatei liest (GdiKit.getLine). Diese
Zeichenkette soll in update verschlusselt
und das Ergebnis an render ubergeben
werden. Wenn keine

F. Bauer, L. Hocker,
V. Lange, L. Schmidt https://gdi.cs.fau.de/s15

Seite 2 von 3

Aufgabenblatt 1
Grundlagen der Informatik, Sommersemester 2015

Abgabe: 4. Mai 2015, 18:00

weitere Zeile mehr gelesen werden kann, soll die Schleife verlassen werden.
12. Der update-Methode muss als weiterer Parameter die aktuelle Zeit (time in Sekunden) ubergeben
wer
den. Verwenden Sie GdiKit.getTime(), um die korrekten Werte zu erzeugen. Starten Sie Ihr Programm.
Es sollte in etwa die folgende Ausgabe angezeigt werden:
Starte Verarbeitung...
1:We can only see:Xf dbo pomz tff
1:a short distance:b tipsu ejtubodf
1:ahead, but we can:bifbe, cvu xf dbo
1:see plenty there:tff qmfouz uifsf
1:that needs to be:uibu offet up cf
1:done.:epof.
1:(Alan Turing, 1950):(Bmbo Uvsjoh, 2061)
13. Die Ausgabe wird im Moment zu schnell erzeugt. Verwenden Sie die Dokumentation (doc-01.zip fur
diese

Aufgabe auf der Webseite), um eine Methode zu finden, mit der Sie sicherstellen konnen,
dass die Schleife
nur zweimal pro Sekunde durchlaufen wird.
14. Wenn Sie sicher sind, dass Ihr Programm korrekt funktioniert, testen Sie Ihre Abgabe mit dem studentischen Vorabtest.

Dazu konnen
Sie entweder die Zeile
GdiKit.main(args);

durch
GdiKit.main(new String[]{"--test"});

ersetzen oder Ihr Programm mit dem Argument --test (siehe Run Configurations Arguments Program Arguments in Eclipse) ausfuhren.

F. Bauer, L. Hocker,
V. Lange, L. Schmidt https://gdi.cs.fau.de/s15

Seite 3 von 3