Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Operatoren, Kontrollstrukturen und Funktionen. Logische Operatoren  zum Vergleich zweier Ausdrücke  ==, !=,, =  Ergebnis ist vom Typ bool  Achtung!

Ähnliche Präsentationen


Präsentation zum Thema: "Operatoren, Kontrollstrukturen und Funktionen. Logische Operatoren  zum Vergleich zweier Ausdrücke  ==, !=,, =  Ergebnis ist vom Typ bool  Achtung!"—  Präsentation transkript:

1 Operatoren, Kontrollstrukturen und Funktionen

2 Logische Operatoren  zum Vergleich zweier Ausdrücke  ==, !=,, =  Ergebnis ist vom Typ bool  Achtung! Große Verwechslungsgefahr von Vergleicher '==' mit Zuweiser '='  bool lvalue = expr expr

3 Logische Operatoren  logisches AND (binär): &&  logisches OR (binär): ||  logisches NOT (unär): !  Ergebnis vom Typ bool  result = ((true && false) || !true)

4 Bitweise Operatoren  AND &, OR |, XOR ^, NOT !  Bit shift left ( >) lvalue = expr dasDoppelte = wert << 1 0100111078 ^0010011139 =01101001105 <<0010110145 =0101101090

5 Zuweisungen  Zuweisungsoperator =  Zuweisungskurzformen *=, /=, %=, +=, -=, >=, &=, |=, ^= binäre Operatoren einem der Operanden soll Ergebnis zugewiesen werden var1 = var1 + var2 wird zu var1 += var2  lvalue expr

6 Typecasts  explizite Umwandlung bei Variablen unterschiedlichen Typs der Compiler kann nicht immer entscheiden nur verwenden, wenn unbedingt nötig  Casts ohne Überprüfung reinterpret_cast Bitmuster wird einfach uminterpretiert möglichst nicht verwenden!

7 Typecasts  Überprüfung zur compile-time static_cast Probleme, wenn Wertebereich nicht ausreicht Typinformation muss zur compile-time vorliegen lvalue = static_cast (expr)  Überprüfung zur run-time dynamic_cast nur für Objekte, nicht primitive Datentypen lvalue = dynamic_cast (expr)

8 Kontrollstrukturen: if … else  if (condition) statement else statement if (a < b) cout << "a bigger than b"; else cout << "b bigger or equal a";  geschweifte Klammern, falls mehr als ein Statement  Erweiterungen möglich: if () … else if () … else  Verkürzte Form: „conditional expression“ a = b > c ? b : c; condition ? true : false

9 Kontrollstrukturen: switch … case  Kopf: switch (condition) condition muss ein Ganzzahldatentyp sein (incl. char!)  Rumpf: case const_n: statement_n beliebige Anzahl von case-Klauseln Abarbeitung der Statements ab condition==const_n mittels break; wird der switch-Block verlassen Standardbearbeitung mittels default:

10 Kontrollstrukturen: switch … case switch (a) { case 1: cout << "a = 1" << endl; case 2: cout << "a < 3" << endl; break; case 3: cout << "a = 3" << endl; break; default: cout 3" << endl; }

11 Kontrollstrukturen: while while (condition) statement  Überprüfung von condition vor Abarbeitung von statement ------------------------------------------------------------------------- do statement while (condition)  Überprüfung von condition nach Abarbeitung von statement

12 Kontrollstrukturen: for for (init; condition; step-expr) statement  Ausdrücke können leer sein  break; Schleife wird sofort verlassen  continue; nächster Schleifendurchlauf

13 Funktionen  Zusammenfassung mehrerer Anweisungen [qualifier] retval function-name (param-list) { block-of-code }  Funktionskopf und Funktionsrumpf  Parameterübergabe immer call-by-value  Rückgabewert über return expr;

14 Funktionen  Strukturierung der Software  Schaffung von Abstraktionslevel  Gemeinsamkeiten von Code auf sinnvoll parametrisierbare Codestücke abbilden  Deklaration: Signatur (Kopf) der Funktion vor der Benutzung (Prototyp)

15 Funktionen // function declaration int square(int num, bool show); // function call int b = 10; int a = square(b, true); // function definition int square(int num, bool show) { int result = num * num; if (show) cout << "Calculated result: " << result; return result; }

16 Funktionen – Overloading  mehrere Funktionen mit dem selben Namen  müssen sich in mindestens einem Parameter unterscheiden  Anzahl und/oder Typ  Unterscheidung durch Rückgabetyp reicht nicht aus int square(int num, bool show); float square(float num);

17 Funktionen – Overloading  Name-Mangling bei Funktionsdeklaration interne Erweiterung des Funktionsnamens um Parametersatz und return-Wert (Typen)  interne Aufhebung der Namensgleichheit  Bei Funktionsaufruf Auswahl der passenden Funktion durch den Compiler  nur Parametersatz zur Unterscheidung

18 Funktionen – Default Parameter  Zuweisung des default-Wertes des Parameters in der Funktionsdeklaration int square(int num, bool show = false);  Aufruf auch ohne Parameter möglich int b = 10; int a = square(b);

19 Funktionen – Default Parameter  Anzahl Default-Parameter beliebig  müssen alle am Ende der Parameterliste stehen  Zuweisung von Werten von links nach rechts int defFunc(int v1, int v2 = 0, int v3=0, int v4=0);

20 Funktionen - inline  Einfügen des Funktionscodes an die Aufrufstelle durch den Compiler  Reduktion des Overheads durch einen Funktionsaufruf  inline ist nur ein „Vorschlag“ an den Compiler  Verwendung bei: kurzen Funktionen häufigen Aufrufen inline int square(int num) { return num * num; }

21 Funktionen - Rekursion  Aufruf der Funktion aus sich selbst  Gefahr von Endlosschleifen oder stack- overflow long fact(long num) { if (num <= 1) return 1; else return num * fact(num -1); }

22 Aufgabe 4: Spiel Zahlenraten  Begrüßung  Spieler gibt gewünschten Schwierigkeitsgrad an leicht: Bereich 1 – 10 mittel: Bereich 1 – 50 schwer: Bereich 1 – 500  Ermittlung der Zufallszahl  Spieler rät, bis er die Zahl gefunden hat Hinweis geben, ob geratene Zahl größer oder kleiner als die gesuchte Zahl  Verabschiedung mit Angabe der Anzahl der Versuche

23 Zufall – nicht wirklich  Generator ermittelt Folge zufällig wirkender Zahlen komplexes Muster Muster immer gleich zufällige Initialisierung des Startwertes, meist über aktuelle Zeit Generator liefert Zahl zwischen 0 und 32.767 // Zufallsgenerator initialisieren srand(timeGetTime()); // Zufallszahl ermitteln int randomNumber = rand();

24 Einbinden von Bibliotheken  Bibliotheken liegen in compiliertem Zustand vor  Einbindung über #pragma comment (lib, "libName") ggf. libName mit vollständigem Pfad // Bibliothek zur Ermittlung der aktuellen Zeit #include #pragma comment (lib, "winmm.lib")


Herunterladen ppt "Operatoren, Kontrollstrukturen und Funktionen. Logische Operatoren  zum Vergleich zweier Ausdrücke  ==, !=,, =  Ergebnis ist vom Typ bool  Achtung!"

Ähnliche Präsentationen


Google-Anzeigen