Informatik I (D-MAVT) Übungsstunde 6 [email protected] Distributed Systems Group, ETH Zürich Ablauf Nachbesprechung Übung 4 Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 6 Aufgabe 1.1: Kein Problem! Schon auf Folien vom letzten Mal... Aufgabe 1.2: Kein Problem! Aufgabe 1.3: for (int i=7; i!=10; i = (i + 2)%11) { ... } 7 mal! for (int f = 15; f != 0; f = f – 2) { ... } Unendlich oft! Aufgabe 2a: ◦ Beispiel mit a = 3.0 und b = 7 ◦ 37 = 3 1 * 32 * 34 = 31 * (31)2 * ((31)2)2 ◦ Also: b durch 2 dividieren wenn b ungerade -> c aufmultiplizieren in jedem schritt a quadrieren Aufgabe 3: Beispiel Ablauf Nachbesprechung Übung 4 Besprechung der Vorlesung Vorbesprechung Übung 6 Structs Pointers Dynamischer Speicher Structs Array: [[int][int][int][int]…[int]] Struct fuer Daten verschiedener Typen: [[int][string][double[n]]] Deklaration: struct type_name { type_of_member_i } declarations; name_of_member_i; später: type_name declarations; 7 Structs Initialisierung durch Aufzählen der Elemente type_name my_struct = {...,...,...} Zugriff ueber ‘.’-Operator my_struct.name_of_member Weitere Möglichkeiten: ◦ Array of Structs: ◦ Arrays in Structs: ◦ Verschachtelte Structs type_name my_struct[25]; struct type_name { int my_array[25]; double my_array2[25]; } 8 Adressen von Variablen Der Adressoperator: & Gibt die physische Speicheradresse einer Variablen zurück 9 Pointer Zeiger auf Speicher von Variablen Nutzen: Datenstrukturen (Bäume, Listen), „call by reference“ Deklaration: int* my_pointer Initialisierung: my_pointer = 0; my_pointer = &my_int; // kein „echter“ Pointer! // zeigt auf my_int Zugriff über Dereferenzierungsoperator: *my_pointer // Wert von my_int 10 Pointer 2fache indirection: Pointer auf Pointer int myInt = 5; int * myIntPtr = &myInt; int ** myIntPtrPtr = &myIntPtr Veraendern des Wertes von my_int: myInt = 7; *myIntPtr = 7; **myIntPtrPtr = 7; Pointer fun with Binky 11 Arrays & Pointer Name eines Arrays ist konstanter Pointer auf den Speicher des Arrays: my_array ist dasselbe wie &my_array[0] ! int my_array[5]; int * int_ptr; int_ptr = my_array; my_array = int_ptr; //OK! //Nein: my_array konstant Pointer-Arithmetik my_array[4] ist dasselbe wie *(my_array + 4) Auch: Anonyme Pointer – „Pointer ohne Typ“ 12 Beispiel fuer Pointer: (Binär)Bäume struct treeElement { int inhalt; treeElement *left, *right; }; treeElement *root; 13 Dynamischer Speicher type* x = new type; ◦ Erzeugt eine Variable vom Typ „type“ und liefert einen Pointer auf den Wert zurück, wo sie erzeugt wird delete x; ◦ Gibt Speicher wieder frei ◦ Speicher kann nun (muss aber nicht!) vom Betriebssystem fuer andere Dinge verwendet werden ◦ «Ich benoetige den Speicher nicht mehr – mach damit, was du willst!» 14 Dynamischer Speicher Allokieren/Deallokieren von Speicher am Heap int * int_ptr = new int; delete int_ptr; Allokieren von Speicher am Heap – Dynamisches Array int * my_array = new int[n]; delete [] my_array; ◦ Ist nicht mehr statisch: Benutzer kann Arraygroesse zur Laufzeit waehlen! 15 Datenstruktur: Linked List ...mit Structs und Pointern Operationen: insert, delete, init, clear,... Beispiel: Implementieren der Operationen struct listElement { int inhalt; listElement *next; }; listElement * my_list; 16 Datenstruktur: Linked List (*my_list).next kann durch my_list->next abgekürzt werden struct listElement { int inhalt; listElement *next; }; listElement * my_list; // Create list // Insert first element into list listElement * node = new listElement; node->key = 25; node->next = 0; my_list = node; 17 Ablauf Nachbesprechung Übung 4 Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 6 Vorbesprechung / Übung 6 Aufgabe 1: Programmanalyse. Arrays und Pointer Aufgabe 2: Programmanalyse. Listen und Pointer Aufgabe 3: Programmanalyse. Structs und Pointer ◦ Schauen wir uns hier mal das point-Struct an... Aufgabe 4: Verwenden von Structs ◦ Wetterdaten mittels Struct-Arrays verarbeiten Informatik I (D-MAVT) Übungsstunde 6 [email protected] Distributed Systems Group, ETH Zürich