Algorithmen zur Datenanalyse in C++ Hartmut Stadie 16.04.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 39
Einführung Datentypen Operatoren Anweisungssyntax Algorithmen zur Datenanalyse in C++ Hartmut Stadie 2/ 39
Übersicht Einführung Informationen Aufgabe: Berechne exp(x) Beispiele Datentypen Operatoren Anweisungssyntax Algorithmen zur Datenanalyse in C++ Hartmut Stadie 3/ 39
Informationen Ablauf: Vorlesung: montags 16:00 Hörsaal III Übung: im Anschluss an die Vorlesung in 9/302 und 9/305 Material: Stroustrup: The C++ Programming Language, 3rd edition http://www.mathematik.uni-marburg.de/ cpp/ Press et al: Numerical Recipes, 3rd edition http://wwwiexp.desy.de/studium/lehre/cplusplus/ Algorithmen zur Datenanalyse in C++ Hartmut Stadie 4/ 39
Ein Beispiel: exp(x) Aufgabe: Berechne e x : exp(x) = n=0 x n n! exp(x) = 1 + x + x 2 2 + x 3 6 +... exp(x) = 1 + 1 x 1 + 1 x 1 x 2 + 1 x 1 x 2 x 3 +... Pseudocode: expox = 1 summand = 1 wiederhole von n = 1 bis 100 summand = summand * x / n expox = expox + summand Algorithmen zur Datenanalyse in C++ Hartmut Stadie 5/ 39
Ein Beispiel: exp(x) Pseudocode: expox = 1 summand = 1 wiederhole von n = 1 bis 100 summand = summand * x / n expox = expox + summand C++: double expox = 1; double summand = 1; for(int n = 1 ; n < 100 ; ++n) { summand *= x / n; //longer version: summand = summand * x / n; expox += summand; } Algorithmen zur Datenanalyse in C++ Hartmut Stadie 6/ 39
Beispiel 1. C++-Programm moin.cc: #include <iostream> //Kommentar /* Kommentar 2 */ int main() { std::cout << "Moin, moin!\n"; } Algorithmen zur Datenanalyse in C++ Hartmut Stadie 7/ 39
Programmierprojektstruktur Dateitypen: Quellcode:.cc,.hh kompilierter Code (object file) Bibliothek (library) Sammlung von Programmfunktionen für zusammengehörende Aufgaben ausführbare Datei (executable) Algorithmen zur Datenanalyse in C++ Hartmut Stadie 8/ 39
Kompilieren, Linken, Ausführen bash-2.05b$ g++ -c moin.cc bash-2.05b$ g++ -o moin moin.o bash-2.05b$./moin Moin, moin! Algorithmen zur Datenanalyse in C++ Hartmut Stadie 9/ 39
Übersicht Einführung Datentypen Deklarationen Elementare Datentypen Boolean Zeichentypen Integertypen Gleitkommatypen Void Definition Zuweisung Zusammengesetzte Typen Operatoren Algorithmen zur Datenanalyse in C++ Hartmut Stadie 10/ 39
Deklaration Deklaration Zuordnung: Variablenname -> Typ, Qualifier; Variablenname: beginnt mit Buchstabe/_ kann Zahlen und Buchstaben/_ enthalten keine Schlüsselwörter Guter Stil: Deklariere Variablen erst, wenn sie gebraucht werden! Weise jeder deklarierten Variable gleich einen Wert zu! Algorithmen zur Datenanalyse in C++ Hartmut Stadie 11/ 39
Elementare Datentypen: Boolean Werte: wahr( 0) oder falsch(0) bool b = true; bool a = 99; bool c = 0; //false Algorithmen zur Datenanalyse in C++ Hartmut Stadie 12/ 39
Elementare Datentypen: Zeichentypen Werte: 1 Zeichen char c = v ; Größe: 1 Byte = 8 Bit : 0-255 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 13/ 39
Elementare Datentypen: Integertypen Werte: ganze Zahlen int a = 13; short int sg = 235; long int b= -1; int h = 0xa4;//hexadecimal 164 int o = 023;//octal 19 long l = 95L; unsigned int a; unsigned long b; signed int c;// int; Größen: 1 = sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) Linux PC: int,long (4 Byte): - 2.147.483.648 bis 2.147.483.647 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 14/ 39
Elementare Datentypen: Gleitkommatypen Werte: reelle Zahlen x = s m b E e Beispiel: 3, 034359 10 3 float x = 13.5; float x2 = 9; float x3 = 9f; double y = -232313.5; long double l = 25235.346143674; IEEE Standard: b = 2, s mit 1 Bit Typ Größe E e m float 4 Byte 8 Bit(256) 127 23 Bit(8.388.608) double 8 Byte 11 Bit(2.048) 1023 52 Bit(4.5 10 15 ) Algorithmen zur Datenanalyse in C++ Hartmut Stadie 15/ 39
Gleitkommaarithmetik Probleme der Gleitkommaarithmetik Rundungsfehler bei Subtraktion ähnlich großer Zahlen Addition von Zahlen verschiedener Größenordnung daher Assoziativgesetz und Distributivgesetz ungültig Fehler durch Abbruch der Rechnung z.b. nur die ersten 30 Summanden einer Reihe Genauigkeit der Darstellung: in limits: std::numeric_limits<float>::min() std::numeric_limits<float>::max() std::numeric_limits<float>::epsilon() Algorithmen zur Datenanalyse in C++ Hartmut Stadie 16/ 39
Elementare Datentypen: void Algorithmen zur Datenanalyse in C++ Hartmut Stadie 17/ 39
Deklaration und Definition Deklaration meistens auch Definition Ausnahmen: float exp(float x); extern int a; struct A; class B; Definition: deklariere Namen und reserviere Speicher Deklaration: deklariere Namen (Speicher an anderer Stelle im Code schon reserviert) Algorithmen zur Datenanalyse in C++ Hartmut Stadie 18/ 39
Zuweisung und Konstanten int a;//deklaration und Definition a = 4567;//Zuweisung c = b = a; //rechts-assoziativ, zuerst b = a const int d = 8; d = 5; //!!! falsch Guter Stil: Benutze immer const für konstante Werte! Algorithmen zur Datenanalyse in C++ Hartmut Stadie 19/ 39
Übersicht Einführung Datentypen Operatoren Assoziation Reihenfolge Anweisungssyntax Algorithmen zur Datenanalyse in C++ Hartmut Stadie 20/ 39
Operatoren Operatoren sind dabei Symbole für mathematische Operationen (inklusive logischer Operationen) werden auf Variablen angewendet. Beispiel: double y = 2; double x = - 3 * sqrt(4) + 42 + y++ - --y;; Welche Reichenfolge???? Priorität Assoziation Algorithmen zur Datenanalyse in C++ Hartmut Stadie 21/ 39
Assoziation Welcher Teilausdruck zuerst???? rechts: einstellige Operatoren, Zuweisungen links: zweistellige Operatoren Algorithmen zur Datenanalyse in C++ Hartmut Stadie 22/ 39
Priorität Geltungsbereich(scope) //Beispiel int a = 9; int main() { int a = 7; std::cout << ::a << a; //97 } Guter Stil: Minimiere den Geltungsbereich von Variablen! Algorithmen zur Datenanalyse in C++ Hartmut Stadie 23/ 39
Member,Funktionsaufruf, Postincrement obj.member pointer->member pointer[expr] expr(expr_list) value(expr_list)//value construction lvalue++ lvalue-- casts Algorithmen zur Datenanalyse in C++ Hartmut Stadie 24/ 39
Preincrement,... sizeof ++lvalue --lvalue ~expr!expr -expr +expr &lvalue *expr new delete (type)expr Algorithmen zur Datenanalyse in C++ Hartmut Stadie 25/ 39
Multiplikation expr * expr expr / expr expr % expr Algorithmen zur Datenanalyse in C++ Hartmut Stadie 26/ 39
Summation expr + expr expr - expr Algorithmen zur Datenanalyse in C++ Hartmut Stadie 27/ 39
Schieben expr << expr expr >> expr Algorithmen zur Datenanalyse in C++ Hartmut Stadie 28/ 39
Vergleiche expr < expr expr <= expr expr > expr expr >= expr expr == expr expr!= expr expr && expr expr expr expr? expr : expr int a = (b > 0)? 1 : 1 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 29/ 39
Zuweisungen lvalue = expr lvalue *= expr lvalue /= expr lvalue %= expr lvalue += expr lvalue -= expr Algorithmen zur Datenanalyse in C++ Hartmut Stadie 30/ 39
Übersicht Einführung Datentypen Operatoren Anweisungssyntax Deklaration Ausdruck Anweisungsblock Auswahlanweisungen Schleifen Sprunganweisungen Switch-Anweisung Bedingung Algorithmen zur Datenanalyse in C++ Hartmut Stadie 31/ 39
Ausdruck mit Semikolon!!! a = 8; std::cout << a; d = exp(6); Algorithmen zur Datenanalyse in C++ Hartmut Stadie 32/ 39
Anweisungsblock { statement statement...} Algorithmen zur Datenanalyse in C++ Hartmut Stadie 33/ 39
Auswahlanweisungen if( condition) statement if( condition) statement else statement //switch ( condition ) statement Beispiel: if( x > y ) { std::cout << "x ist groesser\n"; } else if( x < y ) { std::cout << "y ist groesser\n"; } else { std::cout << "x ist gleich y\n"; } Algorithmen zur Datenanalyse in C++ Hartmut Stadie 34/ 39
Schleifen while( condition ) statement do statement while ( expression ) ; for( for-init-statement condition ; expression ) statement Algorithmen zur Datenanalyse in C++ Hartmut Stadie 35/ 39
Schleifen: Beispiel int i = 0; while (i < 10) { std::cout << i << ; ++i; } mit for: for(int i = 0 ; i < 10 ; ++i) { std::cout << i << ; } Kleinerer Geltungsbereich Guter Stil: Minimiere den Geltungsbereich von Variablen! Algorithmen zur Datenanalyse in C++ Hartmut Stadie 36/ 39
Sprunganweisungen break; //verlasse Schleife, Block continue;//naechste Iteration return expr;//verlasse Funktion for(int i = 0 ; i < 10 ; ++i) { if( i == 2 ) continue; std::cout << i << ; } Algorithmen zur Datenanalyse in C++ Hartmut Stadie 37/ 39
Vergleich mit Konstanten char eingabe; bool yes; switch(eingabe) { case j : yes = true; case y : yes = true; case n : yes = false; default: yes = false; } nur Sprungziel break fehlt im Beispiel! Switch-Anweisung Algorithmen zur Datenanalyse in C++ Hartmut Stadie 38/ 39
Bedingung Bedingung (condition): Ausdruck (expr) Deklaration und Zuweisung if(int summe = a + b) { std::cout << summe << \n ; } else { std::cout << "a + b sind null\n"; } Algorithmen zur Datenanalyse in C++ Hartmut Stadie 39/ 39