Informatik I (D-MAVT) Übungsstunde 1 [email protected] Distributed Systems Group, ETH Zürich “kurze Stunden mit Stoffueberblick -> mehr Zeit fuer Fragen…” This semester’s menu... Imperative Programmierung (anhand von C++) ◦ Grundlagen: ◦ Hilfreiches: ◦ Konzepte: Variablen, Zuweisungen, Anweisungen Bedingungen, Schleifen, Prozeduren Pointer, Rekursion Datenstrukturen: Listen, Bäume Algorithmen: Suchen, Sortieren Objektorientierung Ablauf Administratives Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 1 Administratives Abgabe der Übungen (gern zu zweit) ◦ So viel wie moeglich (immer: Programme!) per mail... ◦ Wenn nicht moeglich/erstrebenswert (z.B. Uebung 2): Ausdrucke/Handschriftlich Testat = 7.5 Punkte ◦ 1 Punkt = Eine sinnvolle Lösung Fragen zum Stoff/Vorlesung/Übungen ◦ Folien online: ◦ Fragen: http://people.inf.ethz.ch/mayersi/ -> Teaching Page Am besten per email an mich... Abgabe der Übungen (gern zu zweit) ◦ So viel wie moeglich (immer: Programme!) per mail... ◦ Wenn nicht moeglich/erstrebenswert (z.B. Uebung 2): Ausdrucke/Handschriftlich Abschreiben verboten. ◦ 0 Punkte Administratives Prüfung ◦ 2h schriftlich in Session nach FS11 ◦ Erfahrungsgemäss nicht theorielastig ◦ Programmierkenntnisse! Ablauf Administratives Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 1 Besprechung der Vorlesung Scripts/Interpretierte Sprachen ◦ Für kleine Projekte/zur schnellen Erstellung von Programmen ◦ Langsam, eher fehleranfällig (z.B. kein Type-Checking) Kompilierte Sprachen ◦ Compiler übersetzt Sourcecode in Objektdatei ◦ Linker verbindet Objektdatei und Bibliotheken zu Programm Besprechung der Vorlesung Programmbau Basics 1. Compiler: Sourcecode Assembly Analysiert Quellcode (auf Fehler) + generiert Code Optimiert das Programm (bzw. versucht dies...) 2. Assembler: 3. Linker: 4. Loader: Assembly Machine Code Machine Code + Bibliotheken Laden in Hauptspeicher + DLLs ◦ Compiletime errors: Waehrend Kompiliervorgang... ◦ Runtime errors: Zur Laufzeit des Programms... Besprechung der Vorlesung Beispiel: Übersetzen eines [sehr einfachen] C-Programmstücks in Maschinencode (von Neumann Architektur und Phantasie-Maschinencode Y86) C++ Assembly Code x in Register „%eax“ y in Register „%edx“ y=x+y addl %eax,%edx Maschinencode („Y86“) „addl“ „%edx“ 0110 0000 0000 0010 „%edx = %edx + %eax“ „%eax“ Besprechung der Vorlesung Das „Hello World“-Programm Verwenden der Ein/Ausgabebibliothek „iostream“ #include <iostream> using namespace std; Namensraum „std“ für cout/cin/endl… Alternativ: std::cout << „Hello, World!“ << std::endl; Definition der Funktion „main“ vom Typ „Integer“ int main() Ist ein Kommentar... { Ausgabe des Texts „Hello, World!“ auf der Konsole // Bin ein Kommentar... cout << „Hello, World!“ << endl; return 0; „main“ hat Rückgabewert „0“ } Besprechung der Vorlesung Streams ◦ C-Konzept zur Ein/Ausgabe: lesen aus bzw. schreiben in Streams ◦ „cout“ …ist vom Typ „ostream“ und adressiert Kommandozeile cout << „text“ << variable << „mehrtext“ << endl; ◦ „cin“ …ist vom Typ „istream“ und adressiert Tastatureingabe cin >> x >> y; Besprechung der Vorlesung main(int argc, char *argv[]) ??? ◦ argc: Anzahl Argumente, die dem Programm beim Start übergeben werden ◦ *argv[]: Liste (genauer: „Array“) dieser Argumente Erster Eintrag: Programmname + Demo Besprechung der Vorlesung Syntax ◦ Einhaltung der Regeln ist sinnvoll zur Erhöhung der Lesbarkeit! ◦ Strichpunkte notwendig! Gewinner des „Obfuscated C Code contest 2004“ [www.ioccc.org] #include <stdio.h>#include <stdlib.h>#include <math.h> #define _ ;double #define void x,x #define case(break,default) break[O]:default[O]: #define switch(bool) ;for(;x<bool; #define do(if,else) inIine(else)>int##if? #define true (--void++) #define false (++void--) char*O=" <60>!?\\\n"_ doubIe[010]_ int0,int1 _ Iong=0 _ inIine(int eIse){int O1O=!O _ l=!O;for(;O1O<010;++O1O)l+=(O1O[doubIe]*pow(eIse,O1O));return l;}int main(int booI,char*eIse[]){int I=1,x=-*O;if(eIse){for(;I<010+1;I++)I[doubIe-1] =booI>I?atof(I[eIse]):!O switch(*O)x++)abs(inIine(x))>Iong&&(Iong=abs(inIine(x )));int1=Iong;main(-*O>>1,0);}else{if(booI<*O>>1){int0=int1;int1=int0-2*Iong/0 [O]switch(5[O]))putchar(x-*O?(int0>=inIine(x)&&do(1,x)do(0,true)do(0,false) case(2,1)do(1,true)do(0,false)6[O]case(-3,6)do(0,false)6[O]-3[O]:do(1,false) case(5,4)x?booI?0:6[O]:7[O])+*O:8[O]),x++;main(++booI,0);}}} Ablauf Administratives Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 1 Vorbesprechung / Übung 1 Aufgabe 1: Hello, World! Aufgabe 2: Abändern von Hello, World! Informatik I (D-MAVT) Übungsstunde 1 [email protected] Distributed Systems Group, ETH Zürich