Willkommen zu informatik I (D-MAVT)

Werbung
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
Herunterladen