Slides - ETH Zürich

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