5
Prof. Martin Hofmann, PhD Ludwig-Maximilians-Universit¨ at M¨ unchen Dr. Steffen Jost Institut f¨ ur Informatik 11. November 2015 4. ¨ Ubung zur Vorlesung Einf¨ uhrung in die Programmierung A4-1 BNF Ein Text ist eine nicht-leere Sequenz von S¨ atzen, die jeweils durch einen Punkt (.) abgeschlossen werden. Ein Satz besteht aus einem Subjekt, gefolgt von einem Pr¨ adikat 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 k¨ onnen Sie folgende Regeln als bereits gegeben betrachten: hSubjekti =“Hund | Katze hPr¨adikati =“sagt | brummt hWorti =“wuff| miauhPunkti =“.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 ¨ uber die Vorlesungs- homepage freundlicherweise sein Klasse GraphicsWindow zur Verf¨ ugung gestellt. In dieser Aufgabe wollen wir verstehen, wie wir die Klasse GraphicsWindow einsetzen k¨ onnen, 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 fri- sches Verzeichnis. Kompilieren Sie die Klasse Test und starten Sie deren main-Methode anschließend. 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? L¨ osen Sie diese Aufgabe mit Hilfe von Javadoc! Hinweis: Da die Dateivorlage in UTF-8 kodiert ist und deutsche Umlaute erh¨ alt, ben¨ otigt 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:

EiP_Uebung04

Embed Size (px)

DESCRIPTION

informatik

Citation preview

Page 1: EiP_Uebung04

Prof. Martin Hofmann, PhD Ludwig-Maximilians-Universitat MunchenDr. Steffen Jost Institut fur Informatik

11. November 2015

4. Ubung zur Vorlesung

Einfuhrung 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 Pradikatund einem Objekt. Das Objekt kann ein Wort oder ein in Anfuhrungszeichen (� bzw. �)eingeschlossener Text sein.

a) Geben Sie eine BNF-Grammatik fur die oben beschriebenen Texte an. Dabei konnenSie folgende Regeln als bereits gegeben betrachten:

〈Subjekt〉= “Hund ” | “Katze ”〈Pradikat〉= “sagt ” | “brummt ”〈Wort〉= “wuff” | “miau”〈Punkt〉= “.”

〈AnfuhrungLinks〉= “�”〈AnfuhrungRechts〉= “�”

b) Leiten Sie aus Ihrer Grammatik den folgenden Text ab:

Hund brummt �Katze sagt miau.�.

A4-2 Die Klasse GraphicsWindow Prof. Hofmann hat Ihnen uber die Vorlesungs-homepage freundlicherweise sein Klasse GraphicsWindow zur Verfugung gestellt. In dieserAufgabe wollen wir verstehen, wie wir die Klasse GraphicsWindow einsetzen konnen, auchwenn wir den Inhalt der Klassendefinition mit den bis jetzt in der Vorlesung behandeltenThemen noch nicht verstehen konnen.

a) Speichern Sie die drei Dateien GraphicsWindow.java, Car.java und Test.java in ein fri-sches Verzeichnis. Kompilieren Sie die Klasse Test und starten Sie deren main-Methodeanschließend. 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 Siediese Aufgabe mit Hilfe von Javadoc!

Hinweis: Da die Dateivorlage in UTF-8 kodiert ist und deutsche Umlaute erhalt, benotigtJavadoc 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 ungefahr das folgende Bild zeichnen:

Page 2: EiP_Uebung04

Hinweise:

• Die ihnen bereits bekannte Klasse java.awt.Rectangle konnte hierfur nutzlichsein. Um ein Objekt der Klasse Rectangle zu zeichnen, ubergeben Sie es als Para-meter an die Methoden draw oder fill eines Objektes der Klasse GraphicsWindow.

• Sie konnen folgendes Programmgerust 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 folgendermaßen zu verstehen:x

y

(0, 0) (1, 0)

(3, 2)

. . .

...

Page 3: EiP_Uebung04

d) Andern Sie Ihre Losung zu Aufgabenteil c) so ab, dass Sie jeden Zeichenoperation einzelnbeobachten konnen. Hierzu konnten die Methoden mouseClick und/oder sleep derKlasse GraphicsWindow nutzlich 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 dreiEcken bestimmt. Der roten Ecke (0, 0), der grunen Ecke (0, MAX Y), und der blauen Ecke(MAX X, MAX Y). Dabei ist die rote (bzw. grune, blaue) Komponente des Farbwertes um sohoher, je naher der Punkt and der roten (bzw. grunen, blauen) Ecke liegt. Die jeweiligeKomponente ist null, wenn der Punkt weiter als min(width,height) von der jeweiligen Eckeentfernt ist. An der Ecke ist der jeweilige Farbwert 100%; ansonsten fallt er proportional mitdem Abstand von der Ecke. Folgende Grafik veranschaulicht den Einflussbereich jeder Eckedurch Kreise, sowie einen Punkt (x, y) mit gedachten Linien zu den Farbecken, wobei dieLange der Linie der abnehmenden Farbintensitat entspricht.

Page 4: EiP_Uebung04

red

blue

width

height(x,y)

(0,0)

(0,height)green (width,height)

GraphicsWindow erwartet als Farbangabe ein Objekt der Klasse java.awt.Color. Diese bie-tet verschiedene Konstruktoren, z.B. Color(int r, int g, int b) erwartet ganze Zahlenim Bereich 0–255 oder Color(float r, float g, float b) erwartet Zahlen im Bereich 0.0–1.0; den Datentyp float konnen Sie aus double kovertieren. In beiden Fallen gibt es eineFehlermeldung, 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 farben, brauchen Sie naturlich Schleifen!

b) Hohe MAX Y und Breite MAX X der Grafik soll problemlos veranderbar sein! Testen Sieverschiedene Werte und uberprufen Sie, ob Ihre Implementation den Anforderungen genugt!

c) Verandern Sie schnell Ihr Programm, so dass der großte Farbwert fur blau in der Mitteder rechten Bildschirmkante erreicht wird!

Page 5: EiP_Uebung04

H4-1 Backus-Naur Form (6 Punkte; Abgabe: H4-1.txt oder H4-1.pdf)Gegeben sei folgende BNF-Grammatik mit dem Startsymbol 〈Smiley〉:

〈Smiley〉 ::= 〈FrohlicherSmiley〉 | 〈TraurigerSmiley〉〈FrohlicherSmiley〉 ::= (“:” | “;” | “B”) [〈Nase〉] 〈FrohlicherMund〉〈TraurigerSmiley〉 ::= (“:” | “8”) [〈Nase〉] 〈TraurigerMund〉

〈Nase〉 ::= “o” | “-”

〈FrohlicherMund〉 ::= (“)”)+ | “D”

〈TraurigerMund〉 ::= “(” | “|”

a) Entscheiden Sie fur die folgenden Worter jeweils, ob sie in der Sprache dieser Grammatiksind. Begrunden Sie Ihre Antwort! Geben Sie weiterhin fur Worter, die in der Sprachesind, eine ausfuhrliche Ableitung an! Fuhren 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 Smileysimmer abwechselnd vorkommen.

Zum Beispiel sollen die Worter “:-( ;-)” oder “:-( :-) :-(” in der Sprache sein.Nicht in der Sprache sein sollen zum Beispiel “:-( :-) :-)” (nicht immer abwech-selnd) oder “:-) :-(” (beginnt mit frohlichem Smiley) oder “” (es muss mindestensein trauriger Smiley am Anfang stehen).

Sie durfen die Nichterminalsymbole der Grammatik aus Aufgabenteil a) verwenden,ohne die Regeln dafur zu wiederholen. Mogliche Leerzeichen zwischen den einzelnenSmileys 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:

f(x, y) =

((x− 200

120

)2

+

(200− y

100

)2

− 1

)3

((x− 200

120

)2

·(

200− y

100

)3)

r(x, y) = 0 g(x, y) = 150 · 1200− x− y

1000b(x, y) = 150 · x + y

1000

Abgabe: Hausaufgaben konnen bis Dienstag, den 17.11.2015, mit UniworX eingereicht wer-den. Abschreiben bei Hausaufgaben kann zum Ausschluss von der Klausur fuhren.