4. Übungsblatt

Werbung
M∪Φ
X
Lehrstuhl
Übungen zur Vorlesung
Mathematik für Informatiker I
Wintersemester 2016/2017
Prof. Dr. Knut Hüper, Thorsten Reichert
Aufgabenblatt Nr. 4
7.11.2016
(20 Punkte. Abzugeben bis 14.11.2016 um 12:00 Uhr)
Hausaufgaben
Aufgabe 4-1: Induktionsbeweise
Beweisen Sie durch Induktion:
i) Sei n ∈
N. Dann gilt
n
X
k=
k=1
n(n + 1)
2
(3 Punkte)
N
ii) Sei n ∈ . Wir betrachten ein Schachbrett der Größe 2n × 2n , bei dem eines der vier Eckfelder
entfernt wurde (hier abgebildet für n = 3, links):
Die Steine:
Das Feld:
Zeigen Sie, dass das gesamte Feld (ohne die ausgeschlossene Ecke) durch Steine, wie oben rechts
abgebildet, überdeckt werden kann.
(3 Punkte)
Hinweis: Überlegen Sie sich, um wie viel ein Schachbrett der Größe 2n+1 × 2n+1 größer ist, als
eins der Größe 2n × 2n .
1
Aufgabe 4-2: Rechnen mit komplexen Zahlen
Beweisen Sie Satz 2.4 durch direktes Nachrechnen für komplexe Zahlen w = a + bi und z = c + di:
i) |w|2 = Re(w)2 + Im(w)2 , |w|2 = w · w und |Re(w)|, |Im(w)| ≤ |w|
ii) Re(w) =
w+w
2
und Im(w) =
w−w
2i
(4 Punkte)
(2 Punkte)
iii) w = w, wz = w · z, w + z = w + z und w/z = w/z
(4 Punkte)
iv) |wz| = |w| · |z| und |w| = |w|
(2 Punkte)
Aufgabe 4-3: Komplexe Zahlen in der Spieleentwicklung
Wir nehmen an, Sie sind als Senior Developer bei einem Spieleentwickler angestellt und sollen ein
Spiel programmieren, in dem ein Auto auf einem quadratischen Straßengitter umherfährt:
Die aktuelle Fahrtrichtung wird durch ein Tupel (h, v) ∈ {(1, 0), (−1, 0), (0, 1), (0, −1)} ⊂
ben:
(0, 1) für ↑
(−1, 0) für ←
(1, 0) für →
(0, −1) für ↓
R2 angege-
Das Auto kann an jeder Kreuzung entweder geradeaus fahren, links abbiegen oder rechts abbiegen.
Sie haben einen ihrer Praktikanten damit beauftragt, die Steuerung in Java zu implementieren und
erhalten von ihm folgenden Code:
...
public enum Input {
RIGHT, LEFT, STRAIGHT
}
// Zulässige Werte:
//
(0,1) für ‘‘oben’’
//
(0,-1) für ‘‘unten’’
//
(1,0) für ‘‘rechts’’
//
(-1,0) für ‘‘links’’
public class Direction {
int horizontal;
int vertical;
}
2
Direction handleInput(Direction direction, Input input) {
if (input == Input.LEFT) {
if (direction.horizontal == 1) {
// rechts -> oben
direction.horizontal = 0;
direction.vertical
= 1;
}
else if (direction.horizontal == -1) {
// links -> unten
direction.horizontal = 0;
direction.vertical
= -1;
}
else if (direction.vertical == 1) {
// oben -> links
direction.horizontal = -1;
direction.vertical
= 0;
}
else if (direction.vertical == -1) {
// unten -> rechts
direction.horizontal = 1;
direction.vertical
= 0;
}
}
else if (input == Input.RIGHT) {
if (direction.horizontal == 1) {
// rechts -> unten
direction.horizontal = 0;
direction.vertical
= -1;
}
else if (direction.horizontal == -1) {
// links -> oben
direction.horizontal = 0;
direction.vertical
= 1;
}
else if (direction.vertical == 1) {
// oben -> rechts
direction.horizontal = 1;
direction.vertical
= 0;
}
else if (direction.vertical == -1) {
// unten -> links
direction.horizontal = -1;
direction.vertical
= 0;
}
}
return direction;
}
...
Obwohl der Code korrekt ist, gefallen Ihnen die 8 Fallunterscheidungen nicht. Glücklicherweise gibt
es komplexe Zahlen: wenn Sie die Fahrtrichtung als komplexe Zahl z ∈
auffassen, lässt sich die
Funktion “handleInput” drastisch vereinfachen. Wir identifizieren also zunächst die Fahrtrichtungen
C
3
wie folgt:
−1 für ←
i für ↑
−i für ↓
1 für →
C
Zeigen Sie, dass “links abbiegen” dann durch Multiplikation der Richtung z ∈
mit einer festen
komplexen Zahl l ∈ , und “rechts abbiegen” durch Multiplikation mit einer anderen komplexen Zahl
r ∈ beschrieben werden kann.
(2 Punkte)
Hinweis: Sie müssen die Funktion handleInput nicht neu programmieren, lediglich beschreiben, wie
diese funktionieren würde.
C
C
4
Herunterladen