Mikroeinführung in C/C+

Größe: px
Ab Seite anzeigen:

Download "Mikroeinführung in C/C+"

Transkript

1 Mikroeinführung in C/C+ C++ - ein Beispielprogramm Typen, Variablen, Operatoren Eingabe und Ausgabe C++ Bedingte Anweisungen und Schleifen Arrays und Pointer Funktionen und Klassen C++ - Informationen und Beispiele Mehr Details und Programme auf der home page des Kurses im WS 2016/17 Einführung in die Datenanalyse mit dem C++ Toolkit ROOT Wiki Book C++ Programmierung Einführung in die Programmierung mit C++, Bjarne Stroustrup, ISBN

2 C++ Einleitung Mitte der sechziger Jahr wurde bei AT&T an Mehrbenutzer Betriebssytemen gearbeitet. Nach dem Rückzug von AT&T aus dem Großprojekt Multics entwickelten Thompsen und Ritchie Ende der sechziger Jahre eine erste in Assembler geschriebene Version, UNIX, auf einer PDP 7. Die Implementierung von UNIX in der von Ritchie entwickelten prozeduralen Programmiersprache C stellt einen Schlüsselbaustein unserer heutigen Computing Technologie dar. C++ wurde von Bjarne Stroustrup (Bell Laboratories) ab 1979 entwickelt um objektorientiertes Programmieren zu erleichtern. C++ ist eine Erweiterung der Sprache C wurde aus C with classes C++. GNU Compiler collection (gcc), ISO C++ standard von 1998, see Der letzte offizielle Standard wurde 2011 festgelegt, ISO/IEC 14882:2011

3 C++ Einleitung Computerprogramm Computer prozessieren Daten, führen Berechnungen durch, fällen Entscheidungen mit Hilfe eines Satzes von Anweisungen. Eine Aktion wird mit Hilfe von Schlüsselwörtern beschrieben, die durch eine Programmiersprache, z. B. C++, charakterisiert werden. Die Schlüsselwörter werden im Klartext in einer Datei gespeichert und von einem Übersetzungsprogramm (Compiler) in Maschinensprache umgewandelt Wir benutzen als C++ Compiler die öffentlich verfügbare GNU Compiler Collection (gcc) Im Rahmen dieses Kurses wird keine Entwicklungsumgebung verwendet. Wir arbeiten auf der shell in der Linux Umgebung des CIP pools. Arbeiten Sie zu zweit, dadurch werden Fehler beim Implementieren der Programme reduziert. Es ist ok Programme oder Programmteile zu kopieren, aber - Verwenden Sie nur code, den Sie auch verstehen - Urheberrechte beachten ( GNU General Public License )

4

5

6 Ein Beispiel myfirst.cc

7 Ein Beispiel // oder # /* */ Kommentare Preprozessoranweisungen include < > File suchen und einfügen <iostream > Input/Output Definitionen

8 Ein Beispiel using namespace std ; Programm namen kommen aus Standard C und C++ Bibliotheken

9 Ein Beispiel main() {C ++ Anweisungen} Haupt programm Block, Anweisungen werden sequentiell ausgeführt

10 Ein Beispiel Definition von Variablen werden angegeben Typ und Name

11 Variablen und Konstanten Syntax Datentyp Name ; Typ Definitionen Datentyp Speicherbedarf Datentyp Ganze Zahlen int 16/32 short int 16 long int 32 unsigned int 16/32 unsigned short int 16 unsigned long int 32 unsinged longlong int 64 Reelle Zahlen float double long double Wertebereich ist durch Speichergrösse gegeben und betriebssystemabhängig. Logische Zeichen bool short int int long int Speicherbedarf Buchstaben und Zeichen char unsigned char 16/32 16/32

12 Variablen und Konstanten Wertebereich einer durch n bit dargestellten Integer Variablen: das Vorzeichen ist im Bit am linken Rand kodiert Bei Operationen mit Überschreitung des Wertebereiches kommt es zu falschen Ergebnissen (undefiniertem Verhalten) ohne Fehlermeldung. Zum Wertebereich der Variablen erhält man Zugang mit Hilfe von Funktionen, deren Definitionen wir hinzufügen müssen. #include <limits> ; cout << numeric_limits <int>::min() << endl; oder wie in C üblich #include <climits> ;.. cout << MIN_INT << endl;

13 Variablen und Konstanten double und float werden als 64 und 32bit Gleitkommazahlen dargestellt. Vorzeichen Exponent Mantisse Darstellung der Zahlen: Zum Wertebereich, den Limits der Exponenten und weiteren Infos erhält man Zugang mit Hilfe von Funktionen, deren Definitionen wir hinzufügen müssen. #include <limits> ; cout << numeric_limits <double>::epsilon() << endl; cout << numeric_limits <double>::round_error() << endl;.. Abweichung zwischen 1 und dem nächst grösseren Wert Maximaler Rundungsfehler

14 Variablen und Konstanten Ermittlung des Speicherbedarfs von Variablen oder Typen Syntax sizeof ( Variable ) ; sizeof ( Datentyp ) ; Mit dem Zeichen = werden Variablen Werte zugewiesen Syntax Datentyp Name = Wert ; Notwendig, sonst ist der Speicherinhalt zufällig! Mit dem Schlüsselwort const werden konstante Variable definiert. Der Wert wird zur Compile Zeit zugewiesen und darf nicht mehr geändert werden. Syntax const Datentyp Name = Wert ; Für Zeichenketten werden weitere Definitionen gebraucht, string Syntax #include <string> ; const string ZeichenKette = Strings bestehen aus char ;

15 Variablen und Konstanten Umwandlung von Typen während der Ausführung des Programms erfolgt automatisch oder mit Anweisungen. Die automatische Konversion ist Compiler spezifisch und sollte vermieden werden! Syntax int myinteger ; float myfloat ; myfloat = (float) myinteger ; static_cast<type> expression ; Automatische Konversion Beispiele : double / float zu int char zu int Nachkommastellen werden abgeschnitten ohne zu runden Character werden mit einer Integer Zahl entsprechend des Ascii Zeichensatzes dargestellt. Bei einer Konversion werden diese Zeichen dargestellt

16

17 Ein Beispiel cout / cin Ausgabe und Eingabe von Variablen oder strings

18 Input / Output cout cerr Input / Output an Konsole oder Tastatur cin #include <iostream>; Daten werden in einen output stream geschrieben, gepuffert und an die Konsole gesendet. C Funktionsdefinitionen in oder file handle - Output stream: cout - Input stream: cin - Output stream für Fehler: cerr Syntax cout << output string << Variable << endl; cin >> Variable1 >> Variable2 ; Viele Optionen für Beispiel: const double Pi = 3.14, d = 12.0 ; double myresult; myresult = Pi * d ; cout << Umfang = << myresult << endl; Formatierungen und Steuerzeichen: #include <iomanip>

19 Input / Output Mit Hilfe von Manipulatoren lässt sich die Ausgabe formatieren. Die Manipulatoren werden in den Ausgabeströmen zwischen die Umleitungsoperatoren eingefügt. #include <iomanip>; using namespace std ; main(){ cout << setw(8) << i << endl; cout << setfill('-'); cout << left << setw(8) << i << endl; Details sind unter diesem link gut erklärt Eine alternative und weitreichendere Formatierung lässt sich mit Hilfe von C print Befehlen erreichen. printf(format_string,ausgabe_liste); sprintf(zeichenkette,format_string,ausgabe_liste); fprintf(dateizeiger,format_string,ausgabe_liste);

20

21 Ein Beispiel sum = a + b Zuweisung von Ausdrücken return 0 Rückgabewert des Programms

22 Operatoren Operatoren verknüpfen Variable zu neuen Ausdrücken, wir unterscheiden Arithmetische Operatoren Berechnung von Werten Vergleichsoperatoren Überprüfung von Aussagen Bit Operatoren Manipulation einzelner Bits Logische Operatoren Verknüpfung von Aussagen Operatoren * / % + N++ m- - Berechnungen Multiplikation Division Division mit Rest Summe Differenz N um 1 erhöhen m um 1 verkleinern Operatoren Berechnungen *= Multiplikation /= Division %= Division mit Rest += Summe -= Differenz Berechnung wird mit den linken Operatoren durchgeführt und verändern dann den links stehenden Wert. P += 7; P=P+7 P += 7+2; P=P+7+2 Benutzung von Klammern wie in der Mathematik

23 Operatoren Operatoren verknüpfen Variable zu neuen Ausdrücken, wir unterscheiden Arithmetische Operatoren Berechnung von Werten Vergleichsoperatoren Überprüfung von Aussagen Bit Operatoren Manipulation einzelner Bits Logische Operatoren Verknüpfung von Aussagen Operatoren ~ & ^ >> << Bit Operationen nicht und oder entweder oder nach rechts verschieben nach links verschieben

24 Ein ausführbares C++ Programm Die Erzeugung eines ausführbaren C++ Programmes erfolgt in 3 Schritten: a0.h a1.h a2.h my.cc Headerdatei Daten zur Struktur und Definitionen des Programms Quelldatei Enthält Anweisungen zum Ablauf und Verhalten des Programms Präprozessor Compiler library.a library.so my.o Objektdatei Linker a.out Executable Aus dem C++ Quellcode übersetzter Maschinencode Alle vom Linker zusammengebundenen Objektdateien bilden das ausführbare Programm

25 GNU Compiler Collection gcc Übernimmt folgende Aufgaben: preprocessing, compilation, assembly and linking Verhalten wird durch Optionen in Form von Flags und File-Namen gesteuert - optionen haben multi letter names, daher nicht wie in Unix Befehlen: -dv -d -v - File-Name Endungen bestimmen welcher compiler aktiviert wird - Details auf der shell mit dem Befehl man gcc oder ausührlicher info gcc (falls die Hilfen installiert sind) Sprachoptionen: - c c-header cpp-output - c++ c++-header c++-cpp-output g++ - objective-c objective-c-header objective-c-cpp-output - objective-c++ objective-c++-header objective-c++-cpp-output - assembler assembler-with-cpp - ada - f77 f77-cpp-input f95 f95-cpp-input - go - java Verwendung von g++ setzt Standard Library Pfade für den Linker

26 GNU Compiler Collection gcc Übersetzen eines C++ Programmes g++ myfirst.cc a.out Nützliche Optionen von g++ - Programm Namen vergeben g++ myfirst.cc -o MyProgramm MyProgramm - Compiler Warnungen einschalten g++ -Wall -Wextra myfirst.cc -o MyProgramm - Nur Compiler verwenden ohne Linker g++ -c myfirst.cc -o myfirst.o myfirst.o - Abschalten der nicht standard-conformen Compiler Optionen von g++ g++ -ansi myfirst.cc - Warnungen bei nicht standard-conformen Erweiterungen von g++ g++ -pedantic myfirst.cc - Automatische Optimierungen des Programms g++ -Ox myfirst.cc x [1,2,3]

27 Arbeitsanweisungen: Ein Beispiel - loggen Sie sich mit Ihrem userid ein. - erzeugen Sie ein Arbeits Directory. - starten Sie eine Editor, z.b. emacs - schreiben Sie unserem Beispiel entsprechend ein C++ Programm und speichern sie es als myfirst.cc - Übersetzen Sie Ihr File und erzeugen Sie ein ausführbares Programm mit g++ myfirst.cc -o myfirst - Probieren Sie es mit./myfirst - Bauen Sie C++ Syntaxfehler in myfirst.cc ein, übersetzen Sie das File und suchen Sie nach Hinweisen auf den Fehler.

28 Vergleiche gcc und g++: - Probieren Sie g++ myfirst.cc -o myfirst und gcc myfirst.cc -o myfirst - fügen Sie link Pfade in gcc hinzu um die Fehlermeldungen zu entfernen gcc myfirst.cc -L/usr/lib64/ -lstdc++ -o myfirst -L setze Pfadnamen Pfad ist installationsabhängig! -l setze Bibliotheksnamen (dabei wird das beginnende lib weggelassen) - Sprache wird durch die Endungen festgelegt mv myfirst.cc myfirst.kk gcc myfirst.kk -L/usr/lib64/ -lstdc++ -o myfirst Compiler Fehler Hinzufügen von -x c++ gcc -x c++ myfirst.kk -L/usr/lib64/ -lstdc++ -o myfirst aktiviert den c++ Teil von gcc kein Compiler Fehler - Weitere Optionen mit der Online Hilfe auf der shell man gcc

29 if ( Logischer Operator ) { Anweisungen true } else { Anweisungen false }

30 Bedingte Anweisungen Operatoren verknüpfen Variable zu neuen Ausdrücken, wir unterscheiden Arithmetische Operatoren Berechnung von Werten Vergleichsoperatoren Überprüfung von Aussagen Bit Operatoren Manipulation einzelner Bits Logische Operatoren Verknüpfung von Aussagen Operatoren ==!= > < >= <= Bedeutung Nicht mit ist gleich ungleich groesser als kleiner als groesser gleich kleiner gleich = verwechseln Es kann innerhalb der if Anweisung eine bool Variable verwendet werden Syntax bool IFeelGood = true ; if ( IFeelGood ) cout << Yeah << endl ;

31 Bedingte Anweisungen Operatoren verknüpfen Variable zu neuen Ausdrücken, wir unterscheiden Arithmetische Operatoren Berechnung von Werten Vergleichsoperatoren Überprüfung von Aussagen Bit Operatoren Manipulation einzelner Bits Logische Operatoren Verknüpfung von Aussagen Operatoren Bedeutung && und oder! not Innerhalb der if Anweisung können bool Variablen und VergleichsOperatoren verknüpft werden. Syntax bool IFeelGood = false ; bool RainyDay = true, Cloudy = true ; double SunShineHours = 8.2 ; if (!RainyDay && (SunShineHours > 8.0!Cloudy) ) IfeelGood = true ;

32 Bedingte Anweisungen Operatoren verknüpfen Variable zu neuen Ausdrücken, wir unterscheiden Arithmetische Operatoren Berechnung von Werten Vergleichsoperatoren Überprüfung von Aussagen Bit Operatoren Manipulation einzelner Bits Logische Operatoren Verknüpfung von Aussagen Beispiele Operatoren a b true true false false false true true false Möglichkeiten!(a) a && b a b false true true true false false true false true false false true Zuerst wird der linke Ausdruck überprüft. Ist der true wird der rechte überprüft. Wenn die linke Bedingung falsch ist wird die rechte nicht geprüft.

33 Bedingte Anweisungen Implementieren von Fallunterscheidungen Wenn dann.. andernfalls if( Bedingung ) { Anweisung } else { Anweisung } Wenn dann.. andernfalls Wenn dann if ( Bedingung ) { Anweisung } elseif ( Bedingung ) { Anweisung } else { Anweisung } In den Anweisungsblöcken können weitere bedingte Anweisungen verwendet werden. if ( Bedingung ) { Anweisung if (Bedingung 2) { Anweisung } } else { Anweisung }

34 Bedingte Anweisungen Alternative Schreibweise, um abhängig vom Wert eines Ausdrucks eine Zuweisung vorzunehmen Auswahl Operator Syntax (Zuweisung mit Bedingung)? Zuweisung wenn true : Beispiel: Minimum von 2 Werten soll zugewiesen werden min = a < b? a : b Ausführliche Schreibweise if( a<b ){ min = a; } else { min = b; } Zuweisung wenn false

35 conditional.cc Arbeitsvorschläge: - modifizieren Sie das Programm so, das die Division durch eine weitere Zahl gestest wird. - passen Sie die Ausgabe an. - Sie wollen 5 Zahlen testen, die eingegeben werden. Welches SprachElement in C++ brauchen wir?

36 Schleifen Wichtiges Element einer Programmiersprache Wiederholung von Anweisungen Bearbeiten einer festgelegten Anzahl von Schleifenfolgen for ( Anzahl der Schleifen ) { C++ Anweisungen } Schleifenkopf: Hier wird die Anzahl der Schleifenfolgen kontrolliert und eigenständig gezählt. Anweisungsblock:Hier steht eine Iterationsvariable zur Verfügung Bearbeiten einer Anzahl von Schleifenfolgen mit Abbruchbedingung while ( Abbruchbedingung ) { C++ Anweisungen } Anweisungsblock: Hier wird die Die Abbruchbedingung wird Abbruchbedingung iteriert. vorher getestet. do { C++ Anweisungen } while (Abbruchbedingung) Anweisungsblock: Hier wird die Abbruchbedingung iteriert. Die Abbruchbedingung wird am Ende getestet. Schleife wird hier mindestens einmal durchlaufen!

37 Schleifen Wichtiges Element einer Programmiersprache Wiederholung von Anweisungen Bearbeiten einer festgelegten Anzahl von Schleifenfolgen int j ; const int jmax = 100 ; double a[jmax] ; for (j=0 ; j < jmax ; j++ ){ a[j] = static_cast<double> (j * j) ; } Bearbeiten einer Anzahl von Schleifenfolgen mit Abbruchbedingung int j = 1, jmax = 10 ; while (j <= jmax ){ j++; if ( j%7 ) jmax = 13; } int j = 1, jmax = 0 ; do{ j++; } while ( j <= jmax) ;

38 Arrays Arrays sind Listen von Elementen eines Datentyps. Einzelne Elemente können durch Array Indices angesprochen werden. Syntax Datentyp Name [Anzahl]; Datentyp Name [N] = {a0,,an-1} ; Überschreitungen des Indexbereiches werden nicht notwendigerweise als Fehler gemeldet. Zufällige Speicherbereiche werden überschrieben! const int maxstunden = 24 ; double Temperatur[maxStunden]={0.}; Temperatur [12] = 22.0 ; Temperatur [24] = 15.0 ; Angabe der Arraylänge Definition und Initialisierung Zuweisung eines Elements Fehler: Arraygrenze überschritten Arrays können auch in mehreren Dimensionen definiert werden Syntax Datentyp Name [Anzahl][Anzahl];

39 Zeiger Variable ist ein Speicherort im C++ Programm und hat eine Adresse. - Zugriff auf Variable und/oder Adresse & Variable Adresse * & Operator liefert die Adresse einer Variablen im Speicher int myvariable = 10 ; &myvariable ; Speicheradresse von myvariable Zeiger ist eine Variable deren Wert eine Adresse enthält. Zeiger werden im Programm definiert int *pmyinteger; double *pmydouble ; Type *PointerName ; char *pmycharacter ; Datentyp eines Zeiger ist für alle Variablentypen eine hex Zahl Vorsicht beim Deklarieren von pointern int * p1, p2 deklariert eine integer pointer variable und eine integer variable!

40 Zeiger Variable ist ein Speicherort im C++ Programm und hat eine Adresse. - Zugriff auf Adresse und Variable & Variable Adresse * * Operator ist eine häufige Anwendung in C++ Programmen und hat zwei unterschiedliche Bedeutungen - Pointer Variablen Definition mit Typ Angabe - Dereferenz Operator im Quellcode in Form von value pointed to by (Wert auf den gezeigt wird) * Operator als Dereferenz im code int MyVariableA = 10 ; int *pmyvariablea ; int MyVariableB ; pmyvariablea = &MyVariableA ; Adresse der Variablen MyVariableA MyVariableB = *pmyvariablea ; Wert auf den gezeigt wird MyVariableB ist jetzt 10

41 Zeiger Zuweisungen und Rechnen mit Zeigern & Variable int MyVariableA = 10 ; int MyVariableB = 20 ; int *pmyvariablea, *pmyvariableb ; Adresse * pmyvariablea = &MyVariableA ; pmyvariableb = &MyVariableB ; Value pointed to by pmyvariablea wird auf 100 gesetzt Value pointed to by pmyvariableb = *pmyvariablea = *pmyvariableb; value pointed to by pmyvariablea *pmyvariablea = 100; pmyvariablea = pmyvariableb; A und B haben die gleichen pointer *pmyvariablea = 200 ; Value pointed to by pmyvariablea = 200

42 Zeiger und Arrays In der Deklaration einer array Variablen ist der array Name der Zeiger auf das erste array Element const int nlength = 50 ; double MyArray [nlength] ; MyArray is equivalent to &MyArray[0] double *pmyarray ; pmyarray = MyArray ; *pmyarray = 500; pmyarray++ ; *pmyarray = 1000; pmyarray = MyArray + 2; *pmyarray = 3000; pmyarray = MyArray; *(pmyarray + 3) = 2; MyArray[4] = 10000; wird häufig so verwendet setzt das erste array Element auf 500 läuft durch die array Elemente setzt das zweite array Element auf 1000 setzt den pointer auf Element 2 setzt das dritte array Element auf 3000 setzt den pointer auf Element 0 setzt das vierte array Element auf 2 setzt das fünfte array Element auf 10000

43 Zeiger und Arrays Komplexe Zeiger Konstruktionen Das Zeigerkonstrukt wird von innen nach aussen aufgelöst. int n = 50, m = 100 ; int *nptr; int **npptr; int *ptrarray[2]; nptr = &n ; npptr = &nptr ; ptrarray[0] = &n; ptrarray[1] = &m;... **(&ptrarray[0]) **npptr... int Zeiger Zeiger auf einen int Zeiger Array von int Zeigern Adresse von n Adresse vom Zeiger auf n Adressen von m und n = 50 = 50

44 pointer.cc

45 Funktionen Zum Strukturieren komplexerer Programme werden funktionale Einheiten ausgelagert. Syntax returntype FunctionName (ParameterList) { falls Rückgabewert C++ Anweisungen void oder Parameter leer } - Funktionen stehen meistens hinter dem Hauptprogramm int main() { Dabei ist die Reihenfolge nicht von Bedeutung. - Sie werden vor dem Hauptprogramm deklariert returntype FunctionName (ParameterList); Die Parameterliste muss nur die Typ Deklaration enthalten - Die Funktionsdeklarationen werden häufig in Files mit der Endung.h ausgelagert. Das Einfügen erfolgt erfolgt mit #include myheader.h }

46 Funktionen Ein Beispiel Beispiel int max ( int N, int M ) { int result ; if ( N > M ) result = N ; else result = M ; return result ; } Rückgabe des Maximums 2er Zahlen Parametertyp deklarieren Funktionstyp deklarieren int max ( int, int); steht vor dem main Programm Lokale Variable, nur in der Funktion bekannt Rückgabewert Parameter Liste enthält nur die Typ Deklaration

47 Funktionen Ein Beispiel Beispiel int max ( int N, int M ) { int result ; if ( N > M ) result = N ; else result = M ; return result ; } Rückgabe des Maximums 2er Zahlen Parametertyp deklarieren Funktionstyp deklarieren Lokale Variable, nur in der Funktion bekannt Rückgabewert int max ( int, int); steht vor dem main Programm Arbeitsvorschlag: functionsum.cc - Schreiben Sie ein Programm, das in einer Funktion 2 Zahlen summiert. - Erzeugen Sie eine header Datei mit der Funktionsdeklaration und binden Sie sie ein. - Lagern Sie die header Datei in ein include dir aus. Mit der Compiler Option -I dir koennen Sie das directory einbinden

48 Funktionen - Parameterübergabe Beim Übergeben der Funktionsargumente ist zu beachten, das die Speicherbereiche beim Aufruf der Funktion erzeugt werden und beim Verlassen der Funktion nicht mehr existieren! Methoden zur Übergabe von Funktionsparametern - Call by value (default) double function (int A, int B) { } A und B werden beim Funktionsaufruf kopiert und Änderungen innerhalb der Funktion haben keinen Effekt auf die Werte A und B im Hauptprogramm - Call by reference double function (int &A, int &B) { } Die Adressen von A und B werden beim Funktionsaufruf übergeben und Änderungen der Adressinhalte innerhalb der Funktion beeinflussen die Werte A und B im Hauptprogramm void swap( int &N, int &K ){ int temp; temp = N; N = K; K = temp; return ; functionswap_i.cc } Alternativ können auch pointer übergeben werden

49 Funktionen - Parameterübergabe Arrays werden häufig an die Funktionen als Zeiger übergegeben. Dabei wird die Arraylänge als konstanter Wert ebenfalls übergegeben. addarray.cc Der Inhalt von Array ValC wird in der Funktion sum modifiziert. Die Werte werden by Reference zurückgegeben, Daher sind die Änderungen sichtbar.

50 Funktionen statische Variablen Die lokalen Variablen von Funktionen existieren nur für die Lebensdauer der Funktion. Zugewiesene Werte existieren nach dem Aufruf nicht mehr. Statische Variable static Datentyp Name ; Diese Anweisung definiert eine Variable, deren Inhalt nach dem Schliessen der Funktion erhalten bleibt und bei erneutem Aufruf zur Verfügung steht. Globale Variable Datentyp myglobalvariable ;.. void function(){ } main() {.. } Variablen, die ausserhalb von Funktionen und vor dem Hauptprogramm definiert werden, stehen in allen Funktionen zur Verfügung und behalten ebenfalls den Inhalt nach dem Schliessen der Funktionen.

51 Funktionen - Bibliotheken Funktionen können in Bibliotheken als Objektfiles sowohl statisch (.a) als auch dynamisch (.so) gespeichert werden. Erzeugen einer statischen Bibliothek Der Quellcode ist die function myfunc.cc und die header Datei myfunc.h - compilieren der Quelldateien und erzeugen des Objektfiles gcc -c myfunc.cc -o myfunc.o - verwenden der archiver ar zur Erzeugung der statischen Bibliothek ar rcs libmyfunc.a myfunc.o Der Bibliotheksname muss die ersten 3 Buchstaben lib enthalten und mit.a enden. Im link Schritt von gcc muss -static hinzugefuegt werden. Erzeugen einer dynamisch gelinkten Bibliothek - compilieren der Quelldateien und erzeugen des Objektfiles gcc -fpic -c myfunc.cc -o myfunc.o Die Option -fpic erzeugt positionsunabhaengigen code - verwenden von gcc zur Erzeugung der dynamischen Bibliothek gcc -shared -Wl,-soname,libmyFunc.so -o libmyfunc.so myfunc.o - beim link Schritt in gcc zum Einbinden der dynamischen Bibliothek reicht die Endung.so der Bibliothek g++ myprog.cc -L. -lmyfunc

52 Funktionen Werkzeug Bibliotheken Es existiert eine C++ Bibliothek, die standardisierte Werkzeugprogramme enthält (C++ Standard Library). Die C Bibliothek ist darin enthalten. Standard Funktionen aus den Bereichen Mathematische Funktionen, Input / Output, Zeichenketten, Zeit / Datum, Speichermanipulation,... Erzeugung von Zufallszahlen: #include <cmath> #include <cstdlib>.. #include <ctime> double t, x;.. x = sin(t); // initialize with time x = log(t); srand(time(0)); x = exp(t); // random integer x = sqrt(t); int r = rand();.... Objektorientierte Klassenbibliothek Klassendefinitionen für Input/Output, Strings, Standard Template, Container, Iteratoren, Fehlerbehandlung,... Die C++ Standard Library wird im g++ Link Schritt automatisch hinzugefügt.

53 Funktionen Werkzeug Bibliotheken (2) Die C++ Standard Library wird bei der Verwendung des g++ Compilers im Link Schritt automatisch hinzugefügt. Neben der C++ Standard Library gibt es viele kommerzielle und public domain Bibliotheken mit spezieller Funktionalität. Vor dem Programmieren einer speziellen Softwarelösung sollten existierende Bibliotheken durchgesehen werden. Bibliotheken - Beispiele boost OpenMP cuda freie C++ Bibliothek (mathematische Lösungen,..) Paralleles Computing Programmieren auf Nvidia Graphikkarten Verwendung von Bibliotheken - Hinzufügen des header files im Programmcode #include <boost/random.hpp> - Aufrufen der Funktion im Hauptprogramm gen() - Hinzufügen der Bibliothek im Link Schritt des Compilers g++ mycode.cc -L/usr/lib64/boost/ -lboost_random (/usr/lib64/boost/libboost_random.so wird hinzugefügt)

54 Klassen Einleitung Ziel von C++ ist der Support objektorientierter Programmierung (OOP). Dabei handelt es sich um ein Konzept zur Strukturierung von Programmen bei dem Programmlogik (Funktionalität) und Programmzustand (Datenstrukturen) vereinigt werden. Die Vereinigung wird Objekt genannt. Objekte werden im Programm erzeugt und vernichtet. Objekte haben zur Laufzeit des Programms definierte Zustände OOP erlaubt die Kommunikation zwischen Objekten OOP wird in C++ mit Hilfe von Klassen realisiert. Sie vereinigen Datenstrukturen und Funktionen zur Veränderung der Daten. Anschaulich: Klassen sind Vorlagen und Konstruktionspläne aus denen zur Laufzeit Objekte erzeugt werden (Instanzen). Alorithmen die auf den Datenstrukturen von Klassen operieren heißen Methoden Klassen kapseln zusammengehörige Daten und Funktionen und unterstützen Datenzugriff nur über spezielle Funktionen. Methoden die Objekte erzeugen oder zerstören werden als Konstruktoren oder Destruktoren bezeichnet.

55 Klassen ein Beispiel Ziel von C++ ist der Support von OOP. Dabei spielen Klassen eine wichtige Rolle. Sie vereinigen Datenstrukturen und Methoden zur Änderung der Daten. Betrachte ein Beispiel: Klasse von Vierervektoren zur Beschreibung von Vierervektor: Teilchenreaktionen class FourVector { Klassenname, identifiziert die Klasse public: Definiere Funktionen, die die Elemente des Vektors füllen Definiere Funktionen, die den Impuls, Energie und invariante Masse zurückgeben. Klassenmitglieder - Datenstrukturen - Funktionen/Methoden private: definiere Daten, die zum Vektor gehören } vect ; int main(){ FourVector Elektron, Proton;.. Optional Objektnamen Erzeuge Instanzen von FourVector

56 Klassen ein Beispiel Ziel von C++ ist der Support von OOP. Dabei spielen Klassen eine wichtige Rolle. Sie vereinigen Datenstrukturen und Methoden zur Änderung der Daten. Betrachte ein Beispiel: Klasse von Vierervektoren zur Beschreibung von Teilchenreaktionen Zugriffsrechte werde explizit mit Hilfe class FourVector von Schlüsselwörtern gewährt { Auf alle Klassenmitglieder die hier stehen gibt es nur von Mitgliedern Zugriff public: Diese Klassenmitglieder können vom gesamten Programm benutzt werden private: Nur Mitgliedern ist der Zugriff erlaubt }; int main(){ FourVector Elektron, Proton;..

57 Klassen ein Beispiel Betrachte ein Beispiel: Klasse von Vierervektoren zur Beschreibung von Teilchenreaktionen Methoden erlauben Zugriff auf die class FourVector{ Datenstruktur. public: void sete(double e) {E = e;} void setp(double x, double y, double z){ px = x; py = y ; pz = z;} double gete(void)const {return E;} double getp(void)const { return sqrt(px*px+py*py+pz*pz);} FourVectorClass_0.cc private: double E, px, py, pz; } ; Datenstruktur ist nicht zugänglich int main(){ FourVector Elektron, Proton; Elektron.setE(100.); Proton.setP(10., 20., 50.); Proton.getP(); return 0 ;} Zwei Instanzen von FourVector werden erzeugt. Mit dem Punkt Operator werden die Methoden erreicht.

58 Klassen ein Beispiel Betrachte ein Beispiel: Klasse von Vierervektoren zur Beschreibung von Teilchenreaktionen Klassendefinition werden im Header class FourVector{ File untergebracht. public: void sete(double e); void setp(double x, double y, double z); double gete(void)const; Die Methoden können auch double getp(void)const; ausserhalb der Klassendefinition private: definiert werden. Auf die Klasse double E, px, py, pz; wird mit Klassenname:: bezug } ; genommen. FourVector::setE(double e){ E = e; Scope operator } double FourVector::getE(void)const{ return E; }. FourVectorClass_I.cc

59 Klassen ein Beispiel Konstruktor und Destruktor einer Klasse Konstruktor, code wird bei der Instanzierung gerufen class FourVector{ public: FourVector(void){ E=0.;px=0.;py=0.;pz=0.} ~FourVector(void) { } Destruktor void sete(double e) {E = e;} void setp(double x, double y, double z){ px = x; py = y ; pz = z;} double gete(void) {return E;} double getp(void) {return sqrt(px*px+py*py+pz*pz);} private: double E, px, py, pz; } ; int main(){ FourVector Elektron, Proton; Zwei Instanzen von FourVector werden erzeugt. Beide sind durch den Konstruktor initialisiert.

60 Klassen ein Beispiel Konstruktor einer Klasse - Kein Rückgabetyp, Argumente können void oder eine Variableliste sein - Konstruktor hat den Namen der Klasse und dient der Initialisierung des Objektes class FourVector{ Public: FourVector(double e,double x,double y, double z); FourVector();. Private: double E, px, py, pz; Initialisierung der Variablen }; FourVector::FourVector(double e,double x,double y, double z): E(e),Px(x),Py(y),Pz(z){} Synthax FourVector::FourVector(){ E=0.; px=0.; py=0.; pz=0.}.. FourVector Pion; FourVector Kaon(5.,1.0,1.5,19.); Zuweisung der Variablen, um zu initialisieren Initialisierung von array geht nur über Zuweisung!

61 Klassen ein Beispiel Konstruktor einer Klasse - Im Header können Default Parameter angegeben werden. - Konstruktor kann ueberladen werden - Kopierkonstruktur wird vom System erzeugt, erstellt ein Objekt der Klasse anhand eines vorhandenen Objektes. Der Parameter ist immer eine Referenz auf ein konstantes Objekt der selben Klasse. class FourVector{ Public: ~FourVector(){}; Destruktor FourVector(double e=0.,double x,double y, double z); FourVector(FourVector const& FourVectorObjekt);. Private: double E, px, py, pz; }; Destruktor einer Klasse - Einer pro Klasse - Ist fuer Aufräumarbeiten zuständig

62 Klassen ein Beispiel Eine Klasse wird instanziert, indem die Klassenbezeichnung und ein Name angegeben wird. Der Zugriff auf Member Funktionen und Variablen erfolgt über den Operator. Für Pointer auf Klassen wird der Operator verwendet. Er besorgt die Dereferenzierung und den Memberzugriff. class FourVector {. } int main() { FourVector Kaon; FourVector *Pion;.. Kaon.setE(20.);.. Pion->GetMomentum();... }

C++ Einführung. und Datenanalyse mit ROOT. Jörg Marks, Physikalisches Institut, INF 226

C++ Einführung. und Datenanalyse mit ROOT. Jörg Marks, Physikalisches Institut, INF 226 Sommer Semester 2016 C++ Einführung 10.4-14.4.2016 14:00 17:00 CIP Pool INF 226 und Datenanalyse mit ROOT Jörg Marks, Physikalisches Institut, INF 226 marks@physi.uni-heidelberg.de Inhalt Programmierwerkzeuge

Mehr

if ( Logischer Operator ) { } else { Anweisungen false

if ( Logischer Operator ) { } else { Anweisungen false if ( Logischer Operator ) { Anweisungen true else { Anweisungen false Bedingte Anweisungen Operatoren verknüpfen Variable zu neuen Ausdrücken, wir unterscheiden Arithmetische Operatoren Berechnung von

Mehr

Datenanalyse mit dem C++ Toolkit ROOT

Datenanalyse mit dem C++ Toolkit ROOT SS 2017 10.4-13.4 14:00 18:00 CIP Pool INF 226 Datenanalyse mit dem C++ Toolkit ROOT Jörg Marks, Physikalisches Institut, INF 226 marks@physi.uni-heidelberg.de Programm Überblick Grundlagen der Programmiersprache

Mehr

1. Teil des Programms

1. Teil des Programms 1. Teil des Programms Einführung LINUX Progammierwerkzeuge: Editor, Shell Commands, Compiler, Linker CIP Pool C++ - ein Beispielprogramm Typen, Variablen, Operatoren Eingabe und Ausgabe C++ Bedingte Anweisungen

Mehr

Einführung in die Datenanalyse mit dem C++ Toolkit ROOT

Einführung in die Datenanalyse mit dem C++ Toolkit ROOT WS 2016/2017 Freitags 14:00 17:00 CIP Pool INF 226 Einführung in die Datenanalyse mit dem C++ Toolkit ROOT Jörg Marks, Physikalisches Institut, INF 226 marks@physi.uni-heidelberg.de Programm Überblick

Mehr

Programmierung und Angewandte Mathematik

Programmierung und Angewandte Mathematik Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der

Mehr

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Einführung in den Einsatz von Objekt-Orientierung mit C++ I Einführung in den Einsatz von Objekt-Orientierung mit C++ I ADV-Seminar Leiter: Mag. Michael Hahsler Syntax von C++ Grundlagen Übersetzung Formale Syntaxüberprüfung Ausgabe/Eingabe Funktion main() Variablen

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatoren 2 Datentypen Gleitpunkt Zahl Typkonvertierung 3 Strommanipulatoren 4 Bedingungen if-else switch-case

Mehr

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 1. Teil 11. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 29 Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente

Mehr

Unterlagen. CPP-Uebungen-08/

Unterlagen.  CPP-Uebungen-08/ Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen

Mehr

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen Leibniz Universität IT Services Anja Aue Modularisierung Logische Gliederung von Programmteilen mit Hilfe von Namensräumen. Aufteilung

Mehr

Grundlagen der Informatik 2. Typen

Grundlagen der Informatik 2. Typen Grundlagen der Informatik 2. Typen Speicher, Speicherbedarf Ein-/Ausgabe Grundlagen der Informatik (Alex Rempel) 1 Wiederholung // root calculation #include #include using namespace

Mehr

Informatik I (D-ITET)

Informatik I (D-ITET) Informatik I (D-ITET) Übungsstunde 2, 5.10.2009 ETH Zürich? Übungsgruppenwechsel? Abgabe der Übungen... Bis Mo, 24:00 Theorie: Programme: per mail oder auf Papier.cpp Datei per mail Bin euch noch Demos

Mehr

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Vorlesungsprüfung Programmiersprache 1

Vorlesungsprüfung Programmiersprache 1 Vorlesungsprüfung Programmiersprache 1 Termin der Prüfung: 1) Di 20.03.2018 16:15 17:00 HSB 3 2) Di 15.05.2018 16:15 17:00 HSB 3 3) Di 12.06.2018 16:15 17:00 HSB 3 Stoffgebiete: 1) Ganzzahltypen: char,

Mehr

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22 C++ Teil 2 Sven Groß IGPM, RWTH Aachen 16. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 2 16. Apr 2015 1 / 22 Themen der letzten Vorlesung Hallo Welt Elementare Datentypen Ein-/Ausgabe Operatoren Sven

Mehr

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15 Vorwort... 15 1 Einstieg in die Welt von C 17 1.1 Die Sprache C... 17 1.2 Die C-Standardbibliothek... 18 1.3 Die nötigen Werkzeuge für C... 21 1.4 Übersetzen mit der Entwicklungsumgebung... 23 1.5 Übersetzen

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 05.10.2016 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2016

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

Crashkurs C++ Wiederholung

Crashkurs C++ Wiederholung Crashkurs C++ Wiederholung #include int main(void) { int i, j; bool is_prime; for (j = 1; j < 1000; j += 2) { is_prime = true; for (i = 3; i

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Einführung in die Programmierung by André Karge Übung - Operatoren, Methoden, Primitives 25. Oktober 2018 Einführung in die Programmierung WS18/19 André Karge 1/29 Notizen Standard Linux Befehle: http://images.linoxide.com/linux-cheat-sheet.pdf

Mehr

C++ - Objektorientierte Programmierung Konstante und statische Elemente

C++ - Objektorientierte Programmierung Konstante und statische Elemente C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja

Mehr

Algorithmen zur Datenanalyse in C++

Algorithmen zur Datenanalyse in C++ 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

Mehr

Pseudo-Programmiersprache

Pseudo-Programmiersprache 1 Erste Schritte in C++ 4 Beschreibungsmöglichkeiten für Algorithmen Struktogramm Das gezeigte Struktogramm enthält die elementaren Grundstrukturen Folge, Auswahl und Schleife. Diese werden in einem der

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy PROCESSING EINE ZUSAMMENFASSUNG Created by Michael Kirsch & Beat Rossmy INHALT 1. Typen und Operatoren 1. Datentypen 3. Klassen und Objekte 1. Klassen und Objekte 2. Operatoren 2. Konstruktor 3. Typkonversion

Mehr

Grundlagen der Informatik 11. Zeiger

Grundlagen der Informatik 11. Zeiger 11. Zeiger Motivation Zeiger und Adressen Zeiger und Funktionen Zeiger und Arrays Dynamische Objekte Grundlagen der Informatik (Alex Rempel) 1 Motivation Dynamische Speicherverwaltung Oft müssen große

Mehr

Funktionales C++ zum Ersten

Funktionales C++ zum Ersten Funktionales C++ zum Ersten WiMa-Praktikum 1, Teil C++, Tag 1 Christoph Ott, Büro: Helmholtzstr.18, E22 Tel.: 50-23575, Mail: christoph.ott@uni-ulm.de Institut für Angewandte Informationsverarbeitung 26.08.08

Mehr

Elementare Datentypen in C++

Elementare Datentypen in C++ Elementare Datentypen in C++ bool signed/unsigned char signed/unsigned short int signed/unsigned int signed/unsigned long int (signed/unsigned long long int) float double long double void enum char Der

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

Repetitorium Informatik (Java)

Repetitorium Informatik (Java) Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen

Mehr

Inhaltsverzeichnis. Kapitel i: Schnelleinstieg 13. Kapitel 2: Was sind Programme? 17. Kapitel 3: Wie erstellt man eigene Programme?

Inhaltsverzeichnis. Kapitel i: Schnelleinstieg 13. Kapitel 2: Was sind Programme? 17. Kapitel 3: Wie erstellt man eigene Programme? Liebe Leserin, lieber Leser 10 Kapitel i: Schnelleinstieg 13 Kapitel 2: Was sind Programme? 17 Was ist ein Programm? 18 Sprechen Sie Computer? 18 Von der Idee zum Programm 19 Von Windows, Fenstern und

Mehr

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

Einführung in C ++ und die Objektorientierte Programierung

Einführung in C ++ und die Objektorientierte Programierung 1/38 Einführung in C ++ und die Objektorientierte Programierung Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15 2/38 Outline

Mehr

Variablen, Konstanten und Datentypen

Variablen, Konstanten und Datentypen Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Variablen, Konstanten und Datentypen Überblick

Mehr

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4 Fakultät Verkehrswissenschaften Friedrich List, Professur für Verkehrsbetriebslehre und Logistik Modul Entscheidungsunterstützung in der Logistik Einführung in die Programmierung mit C++ Übung 4 SS 2016

Mehr

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16 C++ Teil 5 Sven Groß IGPM, RWTH Aachen 12. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 12. Nov 2014 1 / 16 Themen der letzten Vorlesung Eingabestrom, Verhalten von cin Namensräume Live Programming

Mehr

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte: Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert

Mehr

Programmieren in C++ Templates

Programmieren in C++ Templates Programmieren in C++ Templates Inhalt Templates Funktions- und Klassen-Templates Spezialisierung von Templates Generische Klassen Einbinden von Templates Instantiierung (implizit und explizit) Templates

Mehr

Programmierung mit C Zeiger

Programmierung mit C Zeiger Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch

Mehr

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung mit C++ SS 2007 Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Funktionen Rückblick Operatoren logische Verknüpfungen Zusammengesetzte Operatoren ( Zuweisungsoperatoren ) Kontrollstrukturen Bedingte Anweisungen (if-abfrage, switch-konstrukt)

Mehr

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff Programmieren in C Eine Einführung in die Programmiersprache C Prof. Dr. Nikolaus Wulff Agenda Elementare Einführung C Programm Syntax Datentypen, Variablen und Konstanten Operatoren und Ausdrücke Kontrollstrukturen

Mehr

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung Einfache Variablen Typen int, long, short, unsigned bool char float,

Mehr

C-Grundlagen. zur Programmierung des MicroControllersystems MiCoWi

C-Grundlagen. zur Programmierung des MicroControllersystems MiCoWi 1. Datentypen C-Grundlagen zur Programmierung des MicroControllersystems MiCoWi Die Grafiken und Beispiele wurden dem Buch C von A bis z von Jürgen Wolf entnommen. Es werden hier die ANSI-Festlegungen

Mehr

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Übungen zur Vorlesung Wissenschaftliches Rechnen I Übungen zur Vorlesung Wissenschaftliches Rechnen I Nicolas Gauger, René Lamour, Hella Rabus Wintersemester 2007/2008 Programmierung - Einführung Programmierung - Einführung Berechnung einer Formel y =

Mehr

10.4 Konstante Objekte

10.4 Konstante Objekte 10.4 Konstante Objekte Genau wie bei einfachen Datentypen (int,double,...) kann man auch Objekte als const deklarieren. Eine solche Deklaration bedeutet, daß alle Attribute so behandelt werden, als wären

Mehr

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Grundlagen. Die Komponenten eines C Programms. Das erste Programm Grundlagen 1. Die Komponenten eines C Programms 2. Ein Programm erzeugen und übersetzen 3. Variablen Deklarieren und Werte zuweisen 4. Zahlen eingeben mit der Tastatur 5. Arithmetische Ausdrücke und Berechnungen

Mehr

Polymorphismus 44. Function.hpp. #include <string>

Polymorphismus 44. Function.hpp. #include <string> Polymorphismus 44 #include Function.hpp class Function { public: virtual ~Function() {}; virtual const std::string& get_name() const = 0; virtual double execute(double x) const = 0; }; // class

Mehr

3D Programmierpraktikum: Einführung in C++ - Teil 1

3D Programmierpraktikum: Einführung in C++ - Teil 1 3D Programmierpraktikum: Einführung in C++ - Teil 1 Praktikum 3D Programmierung Sebastian Boring, Otmar Hilliges Donnerstag, 27. April 2006 LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum

Mehr

Einführung in die C-Programmierung

Einführung in die C-Programmierung Einführung in die C-Programmierung Warum C? Sehr stark verbreitet (Praxisnähe) Höhere Programmiersprache Objektorientierte Erweiterung: C++ Aber auch hardwarenahe Programmierung möglich (z.b. Mikrokontroller).

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten Operatoren, Ausdrücke und Anweisungen Kontrollstrukturen (Steuerfluss)

Mehr

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

C++ Notnagel. Ziel, Inhalt. Programmieren in C++ C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt

Mehr

Einführung in die Programmierung Wintersemester 2008/09

Einführung in die Programmierung Wintersemester 2008/09 Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Funktionen Inhalt Funktionen - mit / ohne Parameter

Mehr

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen . Gleitkommazahlen In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen Umrechnen von Einheiten und Währungen Jede Zahl x Q mit x 0 lässt sich folgendermaßen schreiben: x = s m e mit

Mehr

C++ Klassen weitere Funktionen

C++ Klassen weitere Funktionen C++ Klassen weitere Funktionen Übersicht static Elemente const Elemente Zusätzliches zu Konstruktoren Kopier-Konstruktor Konvertierung-Konstruktor Initialisierungslisten Friend Funktionen 2 Statische Klassenkomponenten

Mehr

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte: Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 15 Pkt.) Was liefert

Mehr

Programmieren in C/C++ und MATLAB

Programmieren in C/C++ und MATLAB Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 5-1 Übung Schreiben Sie ein Programm, das die Zahl π durch π = 4 4 4 4 4 4 + + +... 3 5 7 9 11

Mehr

Polymorphismus 179. Function.h. #include <string>

Polymorphismus 179. Function.h. #include <string> Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function

Mehr

C++ - Funktionen und mehr -

C++ - Funktionen und mehr - C++ - Funktionen und mehr - Friedrich-Schiller-Universität Jena Kerstin Gößner und Ralf Wondratschek Prof. Dr. habil. Wolfram Amme Dipl.-Inf. Thomas Heinze Inhaltsverzeichnis 1 Einleitung 3 2 Deklaration,

Mehr

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen Kurs C/C++ Programmierung, WS 2008/2009 Dipl.Inform. R. Spurk Arbeitsgruppe Programmierung FR 6.2 Informatik

Mehr

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin Fakutltät IV Technische Universität Berlin 5. Mai 2014 Inhaltsverzeichnis 1 2 3 4 5 6 7 Überblick Beispielprogramm in Java Beispielprogramm in C 1 2 3 4 5 6 7 Beispielprogramm in Java Beispielprogramm

Mehr

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte: Seite 1 von 10 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 6 Pkt.) a) Geben

Mehr

Wertebereich und Genauigkeit der Zahlendarstellung

Wertebereich und Genauigkeit der Zahlendarstellung Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden

Mehr

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16 C++ Teil 4 Sven Groß IGPM, RWTH Aachen 30. Apr 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 4 30. Apr 2015 1 / 16 Themen der letzten Vorlesung Funktionen: Definition und Aufruf Wert- und Referenzparameter,

Mehr

Grundlagen der OO- Programmierung in C#

Grundlagen der OO- Programmierung in C# Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3

Mehr

Einführung in die Programmierung Wintersemester 2016/17

Einführung in die Programmierung Wintersemester 2016/17 Einführung in die Programmierung Wintersemester 2016/17 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Gültigkeitsbereiche Inhalt Lokale und globale

Mehr

Hochschule Darmstadt Informatik-Praktikum SS 2018 EIT Bachelor 3. Aufgabenblatt Funktionen - Unterprogramme

Hochschule Darmstadt Informatik-Praktikum SS 2018 EIT Bachelor 3. Aufgabenblatt Funktionen - Unterprogramme Ziel ist die Aufteilung eines Programms in Funktionen und Dateien Aufgabe 3: Diese Aufgabe ist die Weiterentwicklung von Aufgabe 2. Es ist ein Programm zu erstellen, in welchem der Anwender aus einer Anzahl

Mehr

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08 Kapitel 4 Programmierkurs Birgit Engels, Anna Schulze Wiederholung Kapitel 4 ZAIK Universität zu Köln WS 07/08 1 / 23 2 Datentypen Arten von Datentypen Bei der Deklaration einer Variablen(=Behälter für

Mehr

Projekt 3 Variablen und Operatoren

Projekt 3 Variablen und Operatoren Projekt 3 Variablen und Operatoren Praktisch jedes Programm verarbeitet Daten. Um mit Daten programmieren zu können, muss es Möglichkeiten geben, die Daten in einem Programm zu verwalten und zu manipulieren.

Mehr

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr. Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 15 Pkt.) Was liefert

Mehr

8. Referenzen und Zeiger

8. Referenzen und Zeiger 8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen

Mehr

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Martin Unold INFORMATIK. Geoinformatik und Vermessung Zusammenfassung Was ist eine Programmiersprache? Eine Sprache, die Formal eindeutig in Maschinenbefehle übersetzbar ist Für Menschen einfacher verständlich ist als Bytecode Zur Formulierung von Datenstrukturen

Mehr

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 1 - Variablen und Kontrollstrukturen main Methode Startpunkt jeder Java Anwendung String[] args ist ein Array aus Parametern, die beim Aufruf über die Kommandozeile

Mehr

Auswahlen (Selektionen)

Auswahlen (Selektionen) 1 Anhang 10.3 Ein/Ausgaben Eingabe mit Prompt (Beispiel) cout ; // Prompt ohne endl cin

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 Lokale und globale Variablen Namensräume Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund

Mehr

RO-Tutorien 15 und 16

RO-Tutorien 15 und 16 Tutorien zur Vorlesung Rechnerorganisation Tutorienwoche 2 am 04.05.2011 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft

Mehr

3.2 Datentypen und Methoden

3.2 Datentypen und Methoden Kap03.fm Seite 217 Dienstag, 7. September 2010 1:48 13 3.2 Datentypen und Methoden 217 3.2 Datentypen und Methoden Wie bei vielen höheren Programmiersprachen gibt es auch in Java einfache und strukturierte

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 3 C-Ausdrücke...3-2 3.1 Arithmetische Ausdrücke...3-3 3.2 Wertzuweisungen...3-5 3.3 Inkrementieren und Dekrementieren...3-6 3.4 Logische Ausdrücke (Bedingungen)...3-7 3.5 Bedingte Ausdrücke...3-8

Mehr

Informatik I - Einstiegskurs

Informatik I - Einstiegskurs Informatik I - Einstiegskurs Dr. Henrik Brosenne Georg-August-Universität Göttingen Institut für Informatik Basiert auf dem Einstiegskurs im Wintersemester 2009/10 von Markus Osterhoff Wintersemester 2012/13

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl

Mehr

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff. Gedächtnis Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet Hauptspeicher 38265 Telefon CPU Gedächtnis Vorlesender Zugriff Verarbeitungseinheit

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 24. September 2012 Agenda 1 Funktionen Aufbau und Anwendung Call by Value Call by Reference Überladen von Funktionen Default

Mehr

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen 16OH21005 gefördert. Die Verantwortung für den Inhalt dieser

Mehr

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML. JavaScript JavaScript wird direkt in HTML-Dokumente eingebunden. Gib folgende Zeilen mit einem Texteditor (Notepad) ein: (Falls der Editor nicht gefunden wird, öffne im Browser eine Datei mit der Endung

Mehr

2. Programmierung in C

2. Programmierung in C 2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)

Mehr

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen Leibniz Universität IT Services Anja Aue Zeiger (Pointer) Verweis auf eine Speicherstelle. Speicherung einer Speicheradresse.

Mehr

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015 Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 4, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 4 Storage classes Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Compilation units Compilierung eines mehrteiligen Programms:

Mehr

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache:

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache: Kapitel 8 Operatoren Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache: Operatoren definieren Es ist in C++ möglich, Operatoren wie +, oder für

Mehr