Ablauf Informatik I (D-ITET) Übungsstunde 5, 26.10.2009 simonmayer@student.ethz.ch ETH Zürich Nachbesprechung Übung 3 Besprechung/Vertiefung der Vorlesung [21.10.2009] Vorbesprechung Übung 5 2.c) Test auf Primzahl mittels for bool foo(unsigned int n) { 3. Verschachtelte Schleifen Beispiel... for(int i = 2; i < n/2; i++) { if (n%i == 0) return false; } 4. Euler Nochmal: Die Abbruchbedingung return true; } Ablauf Arrays Demo: arrays.cpp Nachbesprechung Übung 3 Folge von Elementen desselben Typs Deklaration: int my_array[#elements]; Besprechung/Vertiefung der Vorlesung [21.10.2009] Vorbesprechung Übung 5 Initialisierung: int my_array[#elements] = {e1,e2,..,en}; Zugriff über Index: my_array[4]; 6 1
Arrays Summe von Arrayelementen Anzahl der Elemente eines Arrays muss Konstante sein const int max_size = 250; int my_array[max_size]; Mehrdimensionale Arrays (Matrizen, Tensoren) const int max_cols = 10; const int max_rows = 5; int my_array[max_rows][max_cols]; 7 8 grösstes Arrayelement Suchen eines Elements 9 10 Matrix-Vektor Produkt C-Strings Demo: cstrings.cpp Strings sind Arrays von chars (Zeichen) Letztes Zeichen: null-character ( \0 ) char x[7] = 123456 char x[7] = { 1, 2, 3, 4, 5, 6, \0 } Bibliothek <cstring> für weitergehende Kommandos (z.b. strlen()) 11 12 2
C-Strings Der Typ String Vereinfachung! Bibliothek <string> Neu (z.b): Zuweisen: Zusammenfügen: string1 = string2 string1 = string2 + string3 13 14 Strings Nochmal Typen Demo: shortintfloat.cpp Erlauben Interpretation des Speicherinhalts Wiederholung: Demo + wichtige Datentypen Limits Unsigned Typen Explizites Initialisieren von Variablen wichtig Unterschiede zwischen Typen: 42 dezimal 0x42 hexadezimal 15 16 Nochmal Typen: char Nochmal Typen: bool Grösse: 1 Byte > 8Bit -> 2 8 = 256 Zeichen speicherbar Numerische Werte werden als boolesche Werte interpretiert Speicherung von Buchstaben/Zeichen als Integer-Werte gemäss ASCII code 0 -> false!= 0 -> true Escape-Sequenzen in char-ausgabe (z.b. \n, \t, \\, \ ) 17 18 3
Nochmal Typen: Casts Nochmal Operatoren Demo: binops.cpp Typenkonversion / Casts: Explizit oder Implizit Implizit, wenn Zuweisung verschiedener Typen int my_int = 2.4; Ausdrücke mit verschiedenen Typen 2.4 / 4; Funktionsargumente int my_func (int input_a) {... } my_func(2.4); Explizit mit Cast-Notation (int) 35.4 Int (35.4) Funktionsaufruf, oder? Funktion int, Argument 35.4 Leftshift << haben wir schon gesehen... Wenn eine nicht-vorzeichenbehaftete Ganzzahl um 1 Bit nach links geschoben wird, wird sie verdoppelt (unsigned int) 6 = 4 + 2 = 2 2 + 2 1 = 0000 0110 0000 0110 << 1 = 0000 1100 = 2 3 + 2 2 = 8 + 4 = 12 Wenn eine nicht-vorzeichenbehaftete Ganzzahl um 1 Bit nach rechts geschoben wird, wird sie halbiert und auf eine Ganzzahl abgerundet (unsigned int) 9 = 8 + 1 = 2 3 + 2 0 = 0000 1001 0000 1001 >> 1 = 0000 0100 = 2 2 = 4 Warum eigentlich nur bei nicht-vorzeichenbehafteten Ganzzahlen? Antwort: Codierung von negativen Zahlen (2er Komplement) 19 20 Nochmal Operatoren Structs AND a & b OR a b NOT ~a XOR a ^ b Exklusives OR true, wenn a true oder b true, aber nicht wenn beide true Struct: Deklaration: struct type_name { type_of_member_1 type_of_member_2... } declarations; [int][char][double] name_of_member_1; name_of_member_2; Später Deklaration von Variablen des Typs type_name mit type_name my_variable_of_type_typename; 21 22 Structs Demo: struct.cpp Unions Demo: unions.cpp Initialisierung durch Aufzählen der Elemente type_name my_struct = {...,...,...}; Eigentlich wie Structs,... Zugriff my_struct.name_of_member Aber: Members sind nicht nebeneinander gespeichert, sondern an derselben Speicherstelle Weitere Möglichkeiten: Array of Structs: type_name my_struct[25]; Arrays in Structs: struct type_name { int my_array[25]; double my_array2[25]; } Verschachtelte Structs 23 24 4
Enums Demo: enums.cpp Aufzählungstypen enumerations Verschiedene Arten, Arrays zu sortieren... enum colors {red, green, blue} Unterschiede Laufzeit (#Vergleiche/Kopieraktionen) Wie schnell? -> Demo Neuer Typ colors So wie man der Veriable int a; die Werte 0, 1, 4550 zuweisen kann, kann man der Variable colors my_color die Werte red, blue, green zuweisen Stabil Welches Resultat? In situ/in place vs. Ex situ/out of place Wieviel Speicher / Wo? Natürlich Was ist mit sortierten Daten? 25 26 Verschiedene Arten, Arrays zu sortieren, z.b. Verschiedene Arten, Arrays zu sortieren, z.b. Bogosort Sehr langsam, intuitiv Zufällig schütteln, schauen ob ok Worst Case: inf. Avg. Case: O(n! * n) Best Case: O(n) Selectionsort In der Vorlesung Suche nach Minimum, vertausche mit erstem Element des aktuellen Teilbereichs Worst Case: O(n 2 ) [n 2 / 2] Average Case: O(n 2 ) [n 2 / 2] Best Case: Übung 5 Bubblesort Langsam, einfach zu implementieren Nebeneinanderliegende Elemente vertauschen Worst Case: O(n 2 ) [n 2 / 2] Average Case: O(n 2 ) [n 2 / 4] Best Case: O(n) Insertionsort In Übung 5 Nimm nächstes Element, füge es an korrekter Stelle in den sortierten Bereich ein Worst Case: O(n 2 ) [n 2 / 2] Average Case: O(n 2 ) [n 2 / 2] Best Case: Übung 5 27 28 Verschiedene Arten, Arrays zu sortieren, z.b. Bubblesort... Quicksort Schnell, rekursiv ( Divide-and-Conquer Prinzip) Wähle ein Element (das Pivotelement) und teile das Array in 2 Teil-Arrays ( Divide ) L enthält Elemente kleiner als das Pivotelement; R entählt Elemente grösser als das Pivotelement Sortiere die Teil-Arrays mittels Quicksort ( Conquer ) Vereine die Teil-Arrays Worst Case: O(n 2 ) Average Case: O(n log n) Best Case: O(n log n) Quicksort... Quicksort mit zufälliger Wahl des Pivotelements... Slowsort Langsam, rekursiv ( Multiply-and-Surrender Prinzip) Worst Case: O(n log(n) / (2) ) Best Case: O(n log(n) / (2 + epsilon) ) 29 30 5
Ablauf Nachbesprechung Übung 3 1. Insertionsort Beispielsortierung (Tafel) Besprechung/Vertiefung der Vorlesung [21.10.2009] Vorbesprechung Übung 5 2. Algorithmenanalyse Insertionsort vs. Selectionsort a) Vergleich der Anzahl Vergleichsoperationen b) Vergleich der Anzahl Zuweisungsoperationen Achtung!! Haben wir nicht betrachtet! Folien online unter www.n.ethz.ch/student/mayersi 3. Farbdecoder Widerstände mit Farbringcodierung In Tabelle (ist aber falsch...) a. Structs designen widerstand mit 4 Farbe -Members nennwert mit Ohm als double, Toleranz als int b. nennwert decode_widerstand(widerstand r) Informatik I (D-ITET) Übungsstunde 5, 26.10.2009 simonmayer@student.ethz.ch ETH Zürich c. main(...) anpassen 6