Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener ([email protected])...
Transcript of Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener ([email protected])...
![Page 2: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/2.jpg)
Lernziele
− (E)BNF - (Extended) Backus-Naur-Form
− Structs
− Function overloading
− Operator overloading
− Tribool
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 2 / 24
![Page 3: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/3.jpg)
(E)BNF - (Extended) Backus-Naur-Form
− Eine Anzahl Regeln, die alle erlaubten Sequenzen von Zeichenbeschreibt
− Diese nennt man Satze.
− Funktioniert rekursiv
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 3 / 24
![Page 4: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/4.jpg)
(E)BNF - Beispiel
− Alphabet: {A, a, _}
− Regeln:
− A darf nur nach einem Bodenstrich oder als erstes Symbolvorkommen.
− durfen nicht in Paaren oder am Anfang oder am Schluss derSequenz vorkommen.
− Erlaubt: Aaaaa aaa
− Nicht erlaubt: AaaaaAaa
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 4 / 24
![Page 5: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/5.jpg)
EBNF - Beispiel
− Regeln in neuer Form:
− seq = term | term "_" seq
− term = "A" | "A" lowerterm | lowerterm
− lowerterm = "a" | "a" lowerterm
− | trennt die moglichen Optionen
→ Problem: lowerterm nicht klar definiert
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 5 / 24
![Page 6: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/6.jpg)
EBNF - Beispiel
− Regeln in neuer Form:
− seq = term | term "_" seq
− term = "A" | "A" lowerterm | lowerterm
− lowerterm = "a" | "a" lowerterm
− | trennt die moglichen Optionen
→ Problem: lowerterm nicht klar definiert
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 5 / 24
![Page 7: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/7.jpg)
EBNF - Beispiel
Losung mit EBNF:
− seq = term | term "_" seq
− term = "A" { "a" } | "a" { "a" }
− Zusatzlicher Syntax: { ... }
Inhalt in Klammern kann 0...n Mal wiederholt werden
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 6 / 24
![Page 8: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/8.jpg)
EBNF - Beispiel
Weitere Vereinfachung:
− seq = term [ "_" seq ]
− term = "A" { "a" } | "a" { "a" }
− Zusatzlicher Syntax: [ ... ]
Inhalt in Klammern kann 0 oder 1 Mal wiederholt werden
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 7 / 24
![Page 9: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/9.jpg)
Structs
− Moglichkeit um ein Gruppe von verschiedenen Datentypen in einObjekt zu packen
→ Container fur thematisch zusammengehorende Daten
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 8 / 24
![Page 10: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/10.jpg)
Structs
1 struct rational {
2 int n;
3 int d; // INV: d != 0
4 }; // ; nicht vergessen!
5
6 int main () {
7 // Element -wise initialization
8 rational r;
9 r.n = 1;
10 r.d = 2;
11
12 // Initializer list
13 rational d = {1, 2};
14
15 // "Incomplete" initializer list
16 rational g = {1};
17 // g.n == 1 und g.d == 0
18 }
− Vergesst das Semikolon nicht!
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 9 / 24
![Page 11: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/11.jpg)
Structs
1 struct strange {
2 int n;
3 bool b;
4 int a[3];
5 };
6 int main () {
7 // Element -wise initialization
8 strange x;
9 x.n = 1;
10 x.b = true;
11 x.a[0] = 1;
12 x.a[1] = 2;
13 x.a[2] = 3;
14 // Initializer list
15 strange d = {1, true , {1,2,3}};
16 // C++ can copy C arrays this way
17 strange y = x;
18 }Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 10 / 24
![Page 12: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/12.jpg)
Old Exam QuestionFeb. 2010, Ex. 5
![Page 13: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/13.jpg)
Exercise
In this exercise we will implement a representation of3D-geometrical objects in a computer game.
Given is a struct point which stores 3D-points.
2
struct point {
double x, y, z;
};
(x,y,z)
(From: Exam Feb. 2010, Ex. 5)
![Page 14: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/14.jpg)
Exercise a)
(From: Exam Feb. 2010, Ex. 5) 3
// POST: returns the distance between p and
// the origin
double distance(const point& p);
struct point {
double x, y, z;
};
(x,y,z)
Exercise a)
Implement the following function which computes the distance between a given point and the origin.
Hint: The function std::sqrt (double d) computes thesquare root of d.
![Page 15: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/15.jpg)
Exercise a)
(From: Exam Feb. 2010, Ex. 5) 4
// POST: returns the distance between p and the origin
double distance(const point& p) {
return std::sqrt(p.x * p.x + p.y * p.y + p.z * p.z);
}
Solution a)
![Page 16: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/16.jpg)
Exercise b)
(From: Exam Feb. 2010, Ex. 5) 5
struct point {
double x, y, z;
};
(x,y,z)
Exercise b)
Propose a struct named line, which can be used torepresent 3D-straight-lines.
A particular straight line does not have to be representableuniquely, but conversely every object of type line has torepresent a unique straight line. If necessary you can for thisreason define a suitable invariant (// INV:...) which hasto be met when using the line struct.
![Page 17: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/17.jpg)
Exercise b)
(From: Exam Feb. 2010, Ex. 5) 6
line
Solution b)
![Page 18: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/18.jpg)
Exercise b)
(From: Exam Feb. 2010, Ex. 5) 7
line
Two different points
unique line
Solution b)
![Page 19: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/19.jpg)
Exercise b)
(From: Exam Feb. 2010, Ex. 5) 8
struct line {
point a, b; // INV: a != b
};
Solution b)
![Page 20: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/20.jpg)
Exercise c)
(From: Exam Feb. 2010, Ex. 5) 9
struct line {
point a, b; // INV: a != b
};
// POST: returns a straight line through a and b
line compute_line (const point& a, const point& b);
struct point {
double x, y, z;
};
Exercise c)
Based on your struct line implement the following function whichcomputes the straight line through two points.
Make sure to meet your invariant from part b). You should defineand verify a suitable PRE-condition for this reason.
![Page 21: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/21.jpg)
Exercise c)
(From: Exam Feb. 2010, Ex. 5) 10
// PRE: a != b
// POST: returns a straight line through a and b
line compute_line (const point& a, const point& b) {
line g;
g.a = a;
g.b = b;
return g;
}
Solution c)
assert( (a.x != b.x) && (a.y != b.y) && (a.z != b.z) );
![Page 22: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/22.jpg)
Function overloading
− Mehrere Funktion mit dem gleichen Namen− Mussen jedoch eindeutig unterscheidbar sein!− Unterscheidung durch Anzahl Parameter:
1 int f (int a) {
2 ...
3 }
4 int f (int a, int b) {
5 ...
6 }
− Unterscheidung durch Parametertyp:
1 int f (int a) {
2 ...
3 }
4 int f (float a) {
5 ...
6 }
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 11 / 24
![Page 23: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/23.jpg)
Function overloading
1 int f (int a) {
2 ...
3 }
4 int f (int b) {
5 ...
6 }
Geht dieses Overloading?
Nein! Denn der Parametername wird bei Aufruf nicht benutzt.
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 12 / 24
![Page 24: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/24.jpg)
Function overloading
1 int f (int a) {
2 ...
3 }
4 int f (int b) {
5 ...
6 }
Geht dieses Overloading?Nein! Denn der Parametername wird bei Aufruf nicht benutzt.
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 12 / 24
![Page 25: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/25.jpg)
Function overloading
1 int f (int a) {
2 ...
3 }
4 double f (int a) {
5 ...
6 }
Geht dieses Overloading?
Nein!
1 void caller () {
2 f(1); // call without return type
3 // what function should be called?
4 }
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 13 / 24
![Page 26: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/26.jpg)
Function overloading
1 int f (int a) {
2 ...
3 }
4 double f (int a) {
5 ...
6 }
Geht dieses Overloading?Nein!
1 void caller () {
2 f(1); // call without return type
3 // what function should be called?
4 }
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 13 / 24
![Page 27: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/27.jpg)
Function overloading - Regeln
Erlaubt
− Unterscheidung durch Anzahl Argumente
− Unterscheidung durch Typ der Argumente
Nicht erlaubt:
− Name des Arguments
− Ruckgabetyp
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 14 / 24
![Page 28: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/28.jpg)
Function Overloading
1 double calculation (double value) {
2 return value / 2.0;
3 }
4
5 int main () {
6 int number;
7 std::cin >> number;
8 double result = calculation(number);
9 std::cout << result;
10 return 0;
11 }
Was passiert, wenn number = 15 ist?
Resultat: 7.5
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 15 / 24
![Page 29: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/29.jpg)
Function Overloading
1 double calculation (double value) {
2 return value / 2.0;
3 }
4
5 int main () {
6 int number;
7 std::cin >> number;
8 double result = calculation(number);
9 std::cout << result;
10 return 0;
11 }
Was passiert, wenn number = 15 ist? Resultat: 7.5
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 15 / 24
![Page 30: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/30.jpg)
Function Overloading
1 int calculation (int value) {
2 return value / 2;
3 }
4
5 double calculation (double value) {
6 return value / 2.0;
7 }
8
9 int main () {
10 int number;
11 std::cin >> number;
12 double result = calculation(number);
13 std::cout << result;
14 return 0;
15 }
Was passiert, wenn number = 15 ist?
Resultat: 7
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 16 / 24
![Page 31: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/31.jpg)
Function Overloading
1 int calculation (int value) {
2 return value / 2;
3 }
4
5 double calculation (double value) {
6 return value / 2.0;
7 }
8
9 int main () {
10 int number;
11 std::cin >> number;
12 double result = calculation(number);
13 std::cout << result;
14 return 0;
15 }
Was passiert, wenn number = 15 ist? Resultat: 7
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 16 / 24
![Page 32: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/32.jpg)
Operator overloading
1 rational& operator += (rational& a, const
rational b) {
2 a.n = a.n * b.d + a.d * b.n;
3 a.d *= b.d;
4 return a;
5 }
6 ...
7 a += b;
8 operator +=(a, b); // equivalent
− Warum Referenz als Ruckgabetyp?
− Analog fur − =, ∗ =, / =
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 17 / 24
![Page 33: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/33.jpg)
Operator overloading
1 rational operator+ (rational a, const
rational b) {
2 return a += b;
3 }
4 ...
5 rational t = a + b;
6 rational t = operator +(a, b); // equivalent
− Analog fur ∗, −, /
− Definition fur += wird benutzt → weniger Redundanz
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 18 / 24
![Page 34: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/34.jpg)
Operator overloading
Von alt:
1 struct rational {
2 int n;
3 int d; // INV: d != 0
4 };
Zu neu:
1 struct rational {
2 bool sign;
3 unsigned int n;
4 unsigned int d; // INV: d != 0
5 };
Nur + = etc. mussen dann angepasst werden und nicht auch + etc.
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 19 / 24
![Page 35: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/35.jpg)
Operator overloading - Pre- und Postincrement
Preincrement:
1 rational& operator ++ (rational& r) {
2 rational s = {1 ,1};
3 return r += s;
4 }
Postincrement:
1 rational operator ++ (rational& r, int i) {
2 rational s = {1 ,1};
3 rational r_0 = r;
4 r += s;
5 return r_0;
6 }
→ Unterscheidung durch dummy variable i (i wird nie benutzt)
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 20 / 24
![Page 36: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/36.jpg)
Operator overloading
1 std:: ostream& operator << (std:: ostream& o,
rational r) {
2 o << r.n << "/" << r.d;
3 return o;
4 }
5 ...
6 rational a = {2, 5}
7 std::cout << a << std::endl; // output: 2/5
− Ubergabe von Outstream als Referenz, da wir Streams nichtkopieren konnen.
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 21 / 24
![Page 37: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/37.jpg)
Operator overloading - Regeln
− (Fast) alle Operatoren in C++ konnen uberladen werdenAusnahmen:
− conditional (?:)− sizeof
− scope (::)− member selector (.)− member pointer selector (.*)
− Nur existierende Operatoren konnen uberladen werden→ kein **-Operator definierbar
− Min. ein Operand/Parameter muss ein selbst-definierter Typ sein→ kein neuer +-Operator mit den Parameter float und intdefinierbar, aber mit float und rational geht
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 22 / 24
![Page 38: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/38.jpg)
Tipps zu den Ubungen
− Task 1) Neue Zahl definieren mit Wertebereich von 0 bis 7 (3bit-System) & Modulo 7 nutzen
− Task 2a)
− std:: istream& operator >>(
std:: istream& i, Complex c) fur Eingabe− Char einlesen: char b; std::cin >>b;
− Arithmetische Operationen: Besser zuerst gut uberlegen undnachlesen, wie das bei komplexen Zahlen geht, bevor manlange coded.
− (a + bi)(c + di) = (ac − bd) + (bc + ad)i
− a+ibc+id = (a+ib)(c−id)
(c+id)(c−id)− Benutzt die gegebene Main-Funktion erst, wenn ihr glaubt,
fertig zu sein. Vorher nur Teile debuggen.
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 23 / 24
![Page 39: Informatik - Übungsstunde · Informatik - Ubungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zurich Woche 10 - 08.05.2018](https://reader034.fdocuments.net/reader034/viewer/2022050520/5fa3c2bd85dafd35371dd740/html5/thumbnails/39.jpg)
Code Style
− Code einrucken
− Variablenamen in Englisch
− Codeblocke kommentieren
− Statement nach if/else/for/while immer mit {} umschliessen
− PRE- und POST-Condition fur jede Funktion
Jonas Lauener (ETH Zurich) Informatik - Ubung Woche 10 24 / 24