You are on page 1of 5

Prof.

Martin Hofmann, PhD


Dr. Steffen Jost

Ludwig-Maximilians-Universitat M
unchen
Institut f
ur Informatik
11. November 2015

4. Ubung
zur Vorlesung

Einfu
hrung in die Programmierung
A4-1 BNF Ein Text ist eine nicht-leere Sequenz von Satzen, die jeweils durch einen Punkt
(.) abgeschlossen werden. Ein Satz besteht aus einem Subjekt, gefolgt von einem Pradikat
und einem Objekt. Das Objekt kann ein Wort oder ein in Anf
uhrungszeichen ( bzw. )
eingeschlossener Text sein.
a) Geben Sie eine BNF-Grammatik f
ur die oben beschriebenen Texte an. Dabei konnen
Sie folgende Regeln als bereits gegeben betrachten:
hSubjekti = Hund | Katze
hPr
adikati = sagt | brummt
hWorti = wuff | miau
hPunkti = .
hAnf
uhrungLinksi = 
hAnf
uhrungRechtsi = 
b) Leiten Sie aus Ihrer Grammatik den folgenden Text ab:
Hund brummt

Katze sagt miau..

A4-2 Die Klasse GraphicsWindow


Prof. Hofmann hat Ihnen u
ber die Vorlesungshomepage freundlicherweise sein Klasse GraphicsWindow zur Verf
ugung gestellt. In dieser
Aufgabe wollen wir verstehen, wie wir die Klasse GraphicsWindow einsetzen konnen, auch
wenn wir den Inhalt der Klassendefinition mit den bis jetzt in der Vorlesung behandelten
Themen noch nicht verstehen k
onnen.
a) Speichern Sie die drei Dateien GraphicsWindow.java, Car.java und Test.java in ein frisches Verzeichnis. Kompilieren Sie die Klasse Test und starten Sie deren main-Methode
anschlieend. Was passiert?
Hinweis: Wer nicht wei, was zu tun ist, sollte sich noch einmal Aufgabe A1-1 anschauen!
b) Welche Konstruktoren und Methoden bietet die Klasse GraphicsWindow an? Losen Sie
diese Aufgabe mit Hilfe von Javadoc!
Hinweis: Da die Dateivorlage in UTF-8 kodiert ist und deutsche Umlaute erhalt, benotigt
Javadoc ggf. die Parameter -encoding UTF-8 -charset UTF-8 -docencoding UTF-8.
c) Schreiben Sie eine eigene Klasse Demo zur Demonstration der Klasse GraphicsWindow.
Ihr Demo soll ungef
ahr das folgende Bild zeichnen:

Hinweise:
Die ihnen bereits bekannte Klasse java.awt.Rectangle konnte hierf
ur n
utzlich
sein. Um ein Objekt der Klasse Rectangle zu zeichnen, u
bergeben Sie es als Parameter an die Methoden draw oder fill eines Objektes der Klasse GraphicsWindow.
Sie k
onnen folgendes Programmger
ust verwenden:
import java.awt.Rectangle;
public class Demo {
public static void main(String[] args) {
int margin
= 25;
int box_height = 50;
int box_width = 150;
Rectangle r1 = new Rectangle(margin, margin+box_width,
box_width, box_height);
GraphicsWindow gw = new GraphicsWindow();
gw.fill(r1);
// ...
gw.setText("Klicken Sie zum Beenden.");
gw.mouseClick();
System.exit(0);
}
}
Das Koordinatensystem von GraphicsWindow ist folgendermaen zu verstehen:
x
(0, 0) (1, 0)
...
(3, 2)
..
.
y


d) Andern
Sie Ihre L
osung zu Aufgabenteil c) so ab, dass Sie jeden Zeichenoperation einzeln
beobachten k
onnen. Hierzu konnten die Methoden mouseClick und/oder sleep der
Klasse GraphicsWindow n
utzlich sein.

A4-3 Additive Farbmischung


a)

Erzeugen Sie folgende Grafik mit GraphicsWindow:

Der RGB-Farbwert eines jeden Punktes (x, y) der Grafik wird durch seinen Abstand zu drei
Ecken bestimmt. Der roten Ecke (0, 0), der gr
unen Ecke (0, MAX Y), und der blauen Ecke
(MAX X, MAX Y). Dabei ist die rote (bzw. gr
une, blaue) Komponente des Farbwertes um so
hoher, je n
aher der Punkt and der roten (bzw. gr
unen, blauen) Ecke liegt. Die jeweilige
Komponente ist null, wenn der Punkt weiter als min(width,height) von der jeweiligen Ecke
entfernt ist. An der Ecke ist der jeweilige Farbwert 100%; ansonsten fallt er proportional mit
dem Abstand von der Ecke. Folgende Grafik veranschaulicht den Einflussbereich jeder Ecke
durch Kreise, sowie einen Punkt (x, y) mit gedachten Linien zu den Farbecken, wobei die
Lange der Linie der abnehmenden Farbintensitat entspricht.

width

red (0,0)

(x,y)
height

green (0,height)

blue (width,height)

GraphicsWindow erwartet als Farbangabe ein Objekt der Klasse java.awt.Color. Diese bietet verschiedene Konstruktoren, z.B. Color(int r, int g, int b) erwartet ganze Zahlen
im Bereich 0255 oder Color(float r, float g, float b) erwartet Zahlen im Bereich 0.0
1.0; den Datentyp float k
onnen Sie aus double kovertieren. In beiden Fallen gibt es eine
Fehlermeldung, falls ein Argument nicht im erwarteten Zahlenbereich liegt! Den Punkt (x, y)
farben Sie also mit den Anweisungen:
GraphicsWindow gw = new GraphicsWindow();
int red
= ... Wert zwischen 0 und 255 ...
int green = ... Wert zwischen 0 und 255 ...
int blue = ... Wert zwischen 0 und 255 ...
gw.setColor(new Color(red,green,blue));
gw.drawPoint(new Point(x,y));
Um alle Punkte zu f
arben, brauchen Sie nat
urlich Schleifen!
b) Hohe MAX Y und Breite MAX X der Grafik soll problemlos veranderbar sein! Testen Sie
verschiedene Werte und u
ufen Sie, ob Ihre Implementation den Anforderungen gen
ugt!
berpr
c) Verandern Sie schnell Ihr Programm, so dass der grote Farbwert f
ur blau in der Mitte
der rechten Bildschirmkante erreicht wird!

H4-1 Backus-Naur Form (6 Punkte; Abgabe: H4-1.txt oder H4-1.pdf)


Gegeben sei folgende BNF-Grammatik mit dem Startsymbol hSmileyi:
hSmileyi ::= hFr
ohlicherSmileyi | hTraurigerSmileyi
hFr
ohlicherSmileyi ::= (: | ; | B) [hNasei] hFr
ohlicherMundi
hTraurigerSmileyi ::= (: | 8) [hNasei] hTraurigerMundi
hNasei ::= o | -
hFr
ohlicherMundi ::= ())+ | D
hTraurigerMundi ::= ( | |
a) Entscheiden Sie f
ur die folgenden Worter jeweils, ob sie in der Sprache dieser Grammatik
sind. Begr
unden Sie Ihre Antwort! Geben Sie weiterhin f
ur Worter, die in der Sprache
sind, eine ausf
uhrliche Ableitung an! F
uhren Sie dabei jeden Schritt einzeln aus!
i) 8o|
ii) :-(((
b) Geben Sie einen Smiley in der Sprache dieser Grammatik an, der aus genau 5 Zeichen
(Terminalsymbolen) besteht.
c) Geben Sie eine Grammatik an, deren Sprache aus allen Folgen von Smileys besteht,
welche mit einem traurigem Smiley beginnen und in denen frohliche und traurige Smileys
immer abwechselnd vorkommen.
Zum Beispiel sollen die W
orter :-( ;-) oder :-( :-) :-( in der Sprache sein.
Nicht in der Sprache sein sollen zum Beispiel :-( :-) :-) (nicht immer abwechselnd) oder :-) :-( (beginnt mit frohlichem Smiley) oder (es muss mindestens
ein trauriger Smiley am Anfang stehen).
Sie d
urfen die Nichterminalsymbole der Grammatik aus Aufgabenteil a) verwenden,
ohne die Regeln daf
ur zu wiederholen. Mogliche Leerzeichen zwischen den einzelnen
Smileys brauchen Sie nicht zu beachten.
H4-2 Mit Schleifen malen (5 Punkte; Datei: Schleife.java)
Dies ist eine Fortsetzung von Aufgabe A4-3: Schreiben Sie ein Programm, welches ein GraphicsWindow
mit genau 640x480 Pixeln
offnet und dieses wie folgt einfarbt:
Der Punkt mit den Koordinaten (x, y) soll rot eingefarbt werden, falls
 f (x, y) 0 ist.
Ansonsten soll der Punkt mit dem RGB-Farbwert r(x, y), g(x, y), b(x, y) eingefarbt werden.
Diese Funktionen sind dabei wie folgt spezifiziert:
!3





 
 !
x 200 2
200 y 2
x 200 2
200 y 3
f (x, y) =
+
1

120
100
120
100
r(x, y) = 0

g(x, y) = 150

1200 x y
1000

b(x, y) = 150

x+y
1000

Abgabe: Hausaufgaben k
onnen bis Dienstag, den 17.11.2015, mit UniworX eingereicht werden. Abschreiben bei Hausaufgaben kann zum Ausschluss von der Klausur f
uhren.

You might also like