Informatik I (D-MAVT) Übungsstunde 5 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich
Ablauf Nachbesprechung Übung 4 Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 5
Ablauf Nachbesprechung Übung 4 Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 5
Arrays Folge von Elementen desselben Typs Deklaration: int my_array[#elements]; Initialisierung: int my_array[#elements] = {e1,e2,..,en}; Zugriff über Index: my_array[4]; 4
Arrays Anzahl der Elemente eines Arrays muss Konstante sein const int max_size = 250; int my_array[max_size]; Anzahl der Elemente eines Arrays muss Konstante sein const int max_size = 250; int my_array[max_size]; (das hier ist keine Wiederholung!) Mehrdimensionale Arrays (Matrizen, Tensoren) const int max_cols = 10; const int max_rows = 5; int my_matrix[max_rows][max_cols]; 5
Arrays Anzahl der Elemente eines Arrays muss Konstante sein const int max_size = 250; int my_array[max_size]; (das hier ist auch keine Wiederholung!) Abgaben zu Uebung 5, welche diesen Code enthalten: int max_size; cin >> max_size; int my_array[max_size];...bekommen direkt 0 Punkte! 6
Einige Algorithmen...Aufsummieren der Elemente. Welchen Aufwand hat das? -> Aufwand O(n) O(n): «Aufwand steigt linear mit Laenge des Arrays» 7
Einige Algorithmen...Finden des groessten Elements Aufwand: O(N) 8
Einige Algorithmen Sortieren eines Arrays Aufwand: N*(N/2) = O(N 2 ) 9
Einige Algorithmen Suchen eines Elements im Array Aufwand: N/2 = O(N) 10
Einige Algorithmen Array a[], bereits sortiert Suchen in einem sortierten Arrays Aufwand: O(log 2 (N)) 11
C-Strings C-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 } Beide Ausdrucksweisen sind GLEICH! Bibliothek <cstring> für weitergehende Kommandos (z.b. strlen()) 12
C-Strings 13
Adressen von Variablen Der Adressoperator: & Gibt die physische (tatsaechliche!!) Speicheradresse einer Variablen zurück. Beispiel: Adresse von Variablen am Stack int i = 5; cout << &i << endl;...sehen wir s uns grad mal mit Arrays an. 14
Ablauf Nachbesprechung Übung 4 Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 5
Vorbesprechung / Übung 5 Theorieaufgabe 1: Algorithmen Was machen die Programmstuecke in a) und b)? Theorieaufgabe 2: Pseudocode Elektronisches Speichern von Kinoticketreservierungen Reservierung: Name + Reihe/Platz + Anzahl Abfrage: Name Ausgabe auf Abfrage: Reihe/Platz + Anzahl Array benutzen Hilfe: Eingaben immer gueltig, nur eine Vorstellung
Vorbesprechung / Übung 5 Programmieraufgabe 3: Vektoren Maximale Dimension: Nach Dimension n fragen 2 * n Elemente einlesen Skalarprodukt und Supremumsnorm berechnen 10 (d.h. Arrays Laenge 10 benutzen)
Vorbesprechung / Übung 5 Programmieraufgabe 4: «Caesar Cipher» Satz im Klartext + Passwort Verschluesselter Satz char Array char text [500]; Befehl zum Einlesen: cin.getline(text, 500); Effektive Laenge des Textes mit: strlen(text); Verschluesselung: char atextchar = h ; char apasswordchar = x ; char ciphertext = atextchar ^ apasswordchar; Bitwise XOR
Programmieraufgabe 4: «Caesar Cipher» Wir kennen schon die logischen Operatoren: AND && OR NOT! Es gibt auch Bitweise Operatoren diese arbeiten auf Bit-Ebene! Bit-AND: & Bit-OR: Bit-NOT: ~ Bit-XOR: ^
char mychar = x ; // ASCII 120, Hex 0x78, Binary 0111 1000 char anotherchar = a ; // ASCII 97, Hex 0x61, Binary 0110 0001 char bitandchar = mychar & anotherchar; // bitandchar ist nun: 0110 0000 -> 0x60 KLAR?! char bitorchar = mychar anotherchar; // bitorchar ist nun: 0111 1001 -> 0x79 KLAR?! char bitnotchar = ~anotherchar; // bitnotchar ist nun: 1001 1110 -> 0x9e KLAR?! char bitxorchar = mychar ^ anotherchar; // bitxorchar is nun: 0001 1001 -> 0x19 KLAR?!
Vorbesprechung / Übung 5 Programmieraufgabe 4: «Caesar Cipher» Xor: Exclusive OR: «Entweder das eine, oder das andere, aber nicht beide» Toller Effekt von Xor: Umkehrbarkeit nachricht: 1101 0010 passwort: 1010 ciphertext: 0111 1000 passwort: 1010 cleartext: 1101 0010
Vorbesprechung / Übung 5 char atextchar = h ; char apasswordchar = x ; Bitwise XOR char ciphertext = atextchar ^ apasswordchar; Problem 1: Password wrap-around Im Allgemeinen Passwort kuerzer als Text Also:??? Problem 2: Steuerzeichen Erste 32 ASCII Zeichen sind Steuerzeichen, diese sollen im Ciphertext nicht vorkommen! Loesung: VOR dem XOR sollen die obersten 3 Bits des Passworts auf 0 gesetzt werden! Mittels: veranden des Passwort-chars mit 0x1f char ciphertext = atextchar ^ (apasswordchar & 0x1f);
Informatik I (D-MAVT) Übungsstunde 5 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich