Informatik I (D-MAVT) Übungsstunde 1 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich
kurze Stunden mit Stoffueberblick -> mehr Zeit fuer Fragen
This semester s menu... Imperative Programmierung (anhand von C++) Grundlagen: Variablen, Zuweisungen, Anweisungen Hilfreiches: Bedingungen, Schleifen, Prozeduren Konzepte: 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: http://people.inf.ethz.ch/mayersi/ -> Teaching Page Fragen: 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: Assembly Machine Code 3. Linker: Machine Code + Bibliotheken 4. Loader: 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 Maschinencode ( Y86 ) x in Register %eax y in Register %edx addl %edx y = x + y addl %eax,%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; int main() { // Bin ein Kommentar... cout << Hello, World! << endl; return 0; } Namensraum std für cout/cin/endl Alternativ: std::cout << Hello, World! << std::endl; Definition der Funktion main vom Typ Integer Ist ein Kommentar... Ausgabe des Texts Hello, World! auf der Konsole 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: *argv[]: Anzahl Argumente, die dem Programm beim Start übergeben werden 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 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich