Sebastian Houben Intensivkurs C++ 1. Intensivkurs C September 2015

Größe: px
Ab Seite anzeigen:

Download "Sebastian Houben Intensivkurs C++ 1. Intensivkurs C++ 21. September 2015"

Transkript

1 Sebastian Houben Intensivkurs C++ 1 Intensivkurs C September 2015

2 Themen Sebastian Houben Intensivkurs C++ 2 Warum C++? Ziel dieses Kurses Voraussetzungen Verwandschaft zu C, Java und anderen Sprachen Dateistruktur, Compiler und Linker, Präprozessor Datentypen Kontrollstrukturen Ein- und Ausgabe Typumwandlung Anwesenheitsaufgabe

3 Formalien Sebastian Houben Intensivkurs C++ 3

4 Formalien Sebastian Houben Intensivkurs C++ 3 Der Kurs besteht aus 10 Einheiten von je (maximal) 8 Stunden. Jeder Tag wird von einer Vorlesung eingeleitet, an die sich betreute Programmierübungen anschließen. In beiden Wochen stehen die Freitage zur Wiederholung von Stoff zur Verfügung.

5 Formalien Sebastian Houben Intensivkurs C++ 3 Der Kurs besteht aus 10 Einheiten von je (maximal) 8 Stunden. Jeder Tag wird von einer Vorlesung eingeleitet, an die sich betreute Programmierübungen anschließen. In beiden Wochen stehen die Freitage zur Wiederholung von Stoff zur Verfügung. Die Aufgaben können entweder allein oder zu zweit gelöst werden. Die Bearbeitung aller Aufgaben ist Voraussetzung für die erfolgreiche Teilnahme. Es gibt eine Liste, in der jeden Tag die erfolgreich bearbeiteten Aufgaben abgezeichnet werden.

6 Formalien Sebastian Houben Intensivkurs C++ 3 Der Kurs besteht aus 10 Einheiten von je (maximal) 8 Stunden. Jeder Tag wird von einer Vorlesung eingeleitet, an die sich betreute Programmierübungen anschließen. In beiden Wochen stehen die Freitage zur Wiederholung von Stoff zur Verfügung. Die Aufgaben können entweder allein oder zu zweit gelöst werden. Die Bearbeitung aller Aufgaben ist Voraussetzung für die erfolgreiche Teilnahme. Es gibt eine Liste, in der jeden Tag die erfolgreich bearbeiteten Aufgaben abgezeichnet werden. Alle Aufgaben sollten um 17:30 fertig bearbeitet sein, da der Raum pünktlich um 18:00 Uhr verlassen werden muss.

7 Formalien Sebastian Houben Intensivkurs C++ 3 Der Kurs besteht aus 10 Einheiten von je (maximal) 8 Stunden. Jeder Tag wird von einer Vorlesung eingeleitet, an die sich betreute Programmierübungen anschließen. In beiden Wochen stehen die Freitage zur Wiederholung von Stoff zur Verfügung. Die Aufgaben können entweder allein oder zu zweit gelöst werden. Die Bearbeitung aller Aufgaben ist Voraussetzung für die erfolgreiche Teilnahme. Es gibt eine Liste, in der jeden Tag die erfolgreich bearbeiteten Aufgaben abgezeichnet werden. Alle Aufgaben sollten um 17:30 fertig bearbeitet sein, da der Raum pünktlich um 18:00 Uhr verlassen werden muss. Die Aufgaben werden benotet. Die Gesamtnote ergibt sich aus dem Durchschnitt der Tagesnoten.

8 Formalien Sebastian Houben Intensivkurs C++ 4 Nicht vollständig bearbeitete Aufgaben können am folgenden Freitag derselben Woche nachgereicht werden.

9 Formalien Sebastian Houben Intensivkurs C++ 4 Nicht vollständig bearbeitete Aufgaben können am folgenden Freitag derselben Woche nachgereicht werden. Es ist möglich, bis zu 3 Tage entschuldigt zu fehlen. Dies betrifft sowohl Krankheit wie auch anderweitige Termine wie z.b. Klausuren. Die Aufgaben können nachgereicht werden (siehe oben).

10 Formalien Sebastian Houben Intensivkurs C++ 4 Nicht vollständig bearbeitete Aufgaben können am folgenden Freitag derselben Woche nachgereicht werden. Es ist möglich, bis zu 3 Tage entschuldigt zu fehlen. Dies betrifft sowohl Krankheit wie auch anderweitige Termine wie z.b. Klausuren. Die Aufgaben können nachgereicht werden (siehe oben). Es gibt eine Kurs-Homepage mit aktuellem Material auf 70-Intensive%20Course%20C++

11 Formalien Sebastian Houben Intensivkurs C++ 4 Nicht vollständig bearbeitete Aufgaben können am folgenden Freitag derselben Woche nachgereicht werden. Es ist möglich, bis zu 3 Tage entschuldigt zu fehlen. Dies betrifft sowohl Krankheit wie auch anderweitige Termine wie z.b. Klausuren. Die Aufgaben können nachgereicht werden (siehe oben). Es gibt eine Kurs-Homepage mit aktuellem Material auf 70-Intensive%20Course%20C++ Viel Spaß mit C++!!!

12 Warum C++? Sebastian Houben Intensivkurs C++ 5 Stärken: C++ ist schnell! C++ ist unglaublich flexibel. C++ ist typsicher. C++ ist gut organisiert; für sehr große Projekte geeignet. C++ ist ein weit verbreiteter Industriestandard. C++ ist extrem portabel.

13 Warum C++? Sebastian Houben Intensivkurs C++ 5 Stärken: C++ ist schnell! C++ ist unglaublich flexibel. C++ ist typsicher. C++ ist gut organisiert; für sehr große Projekte geeignet. C++ ist ein weit verbreiteter Industriestandard. C++ ist extrem portabel. Schwächen: C++ erscheint dem Anfänger oft unnötig komplex. Relativ viel boilerplate code. Teilweise kryptische Syntax (bei fortgeschrittenen Konzepten, z.b. Funktionszeiger). Teils schwer lesbare Fehlermeldungen (insbesondere im Zusammenhang mit Templates).

14 Ziel dieses Kurses Sebastian Houben Intensivkurs C++ 6 Einführung der Grundkonzepte der Programmierprache C++.

15 Ziel dieses Kurses Sebastian Houben Intensivkurs C++ 6 Einführung der Grundkonzepte der Programmierprache C++. Es ist leicht, mit einer Darstellung von C++ ganze Regalwände zu füllen. C++ ist sehr umfangreich. Deshalb kann dieser Kurs keinen Anspruch auf Vollständigkeit haben.

16 Ziel dieses Kurses Sebastian Houben Intensivkurs C++ 6 Einführung der Grundkonzepte der Programmierprache C++. Es ist leicht, mit einer Darstellung von C++ ganze Regalwände zu füllen. C++ ist sehr umfangreich. Deshalb kann dieser Kurs keinen Anspruch auf Vollständigkeit haben. Ganz wichtig: Hands on! Dies ist ein Praktikum, keine Vorlesung! Learning by doing, sonst bleibt nur die Hälfte hängen.

17 Voraussetzungen Sebastian Houben Intensivkurs C++ 7 Jeder Teilnehmer sollte Erfahrung mit einer halbwegs modernen (imperativen) Programmiersprache haben: Java, Javascript, Python, Lua, Pearl, PHP, C, Objective-C, C#,...).

18 Voraussetzungen Sebastian Houben Intensivkurs C++ 7 Jeder Teilnehmer sollte Erfahrung mit einer halbwegs modernen (imperativen) Programmiersprache haben: Java, Javascript, Python, Lua, Pearl, PHP, C, Objective-C, C#,...). Erfahrung mit einer objektorientierten Sprache (z.b. Java oder Python) ist von Vorteil.

19 Verwandschaft zu C, Java und anderen Sprachen Sebastian Houben Intensivkurs C++ 8 C++ ist (fast) eine Obermenge von C. Das heißt, dass fast aller C-Code in C++ gültig ist. Allerdings bietet C++ wesentlich bessere Möglichkeiten zur Strukturierung eines Programms und ermutigt deshalb zu einem besseren Stil (modularer, gut wartbarer Code).

20 Verwandschaft zu C, Java und anderen Sprachen Sebastian Houben Intensivkurs C++ 8 C++ ist (fast) eine Obermenge von C. Das heißt, dass fast aller C-Code in C++ gültig ist. Allerdings bietet C++ wesentlich bessere Möglichkeiten zur Strukturierung eines Programms und ermutigt deshalb zu einem besseren Stil (modularer, gut wartbarer Code). Java verfolgt ähnliche Ziele wie C++. Viele aus Java bekannte Konzepte übertragen sich auf die Programmierung in C++, aber C++ bietet generell mehr Möglichkeiten, mehr Kontrolle, und als Preis dafür leider oft weniger Komfort.

21 Verwandschaft zu C, Java und anderen Sprachen Sebastian Houben Intensivkurs C++ 8 C++ ist (fast) eine Obermenge von C. Das heißt, dass fast aller C-Code in C++ gültig ist. Allerdings bietet C++ wesentlich bessere Möglichkeiten zur Strukturierung eines Programms und ermutigt deshalb zu einem besseren Stil (modularer, gut wartbarer Code). Java verfolgt ähnliche Ziele wie C++. Viele aus Java bekannte Konzepte übertragen sich auf die Programmierung in C++, aber C++ bietet generell mehr Möglichkeiten, mehr Kontrolle, und als Preis dafür leider oft weniger Komfort. Viele moderne Sprachen orientieren sich an C++, insbesondere an seiner Syntax. Wer eine andere Programmiersprache kennt, wird deshalb vieles wiedererkennen, aber mit Sicherheit auch neue Konzepte lernen, die er dann möglicherweise in anderen Sprachen vermisst.

22 Hello World Sebastian Houben Intensivkurs C++ 9 Für die ganz Ungeduldigen - Hello World sieht in C++ so aus: helloworld.cpp #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; }

23 Hello World Sebastian Houben Intensivkurs C++ 9 Für die ganz Ungeduldigen - Hello World sieht in C++ so aus: helloworld.cpp #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; } Die Elemente dieses Programms werden nach und nach behandelt. Zuerst gilt es, unsere Arbeitsumgebung kennen zu lernen.

24 Hello World Sebastian Houben Intensivkurs C++ 10 Los gehts!

25 Hello World Sebastian Houben Intensivkurs C++ 10 Los gehts! Starten Sie Visual Studio

26 Hello World Sebastian Houben Intensivkurs C++ 10 Los gehts! Starten Sie Visual Studio Legen Sie ein neues Projekt an: New Project Empty Project; Name= HelloWorld

27 Hello World Sebastian Houben Intensivkurs C++ 10 Los gehts! Starten Sie Visual Studio Legen Sie ein neues Projekt an: New Project Empty Project; Name= HelloWorld Fügen Sie eine Datei hinzu: Project Add New Item Code C++ File; Name= main.cpp

28 Hello World Sebastian Houben Intensivkurs C++ 10 Los gehts! Starten Sie Visual Studio Legen Sie ein neues Projekt an: New Project Empty Project; Name= HelloWorld Fügen Sie eine Datei hinzu: Project Add New Item Code C++ File; Name= main.cpp (Menü Project Properties) Configuration Properties Linker System; Setzen Sie Subsystem auf Console.

29 Hello World Sebastian Houben Intensivkurs C++ 10 Los gehts! Starten Sie Visual Studio Legen Sie ein neues Projekt an: New Project Empty Project; Name= HelloWorld Fügen Sie eine Datei hinzu: Project Add New Item Code C++ File; Name= main.cpp (Menü Project Properties) Configuration Properties Linker System; Setzen Sie Subsystem auf Console. Tippen Sie das Hallo-Welt -Programm ein: #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; }

30 Hello World Sebastian Houben Intensivkurs C++ 10 Los gehts! Starten Sie Visual Studio Legen Sie ein neues Projekt an: New Project Empty Project; Name= HelloWorld Fügen Sie eine Datei hinzu: Project Add New Item Code C++ File; Name= main.cpp (Menü Project Properties) Configuration Properties Linker System; Setzen Sie Subsystem auf Console. Tippen Sie das Hallo-Welt -Programm ein: #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; } Menü Build Build Solution zum Kompilieren und Linken.

31 Hello World Sebastian Houben Intensivkurs C++ 10 Los gehts! Starten Sie Visual Studio Legen Sie ein neues Projekt an: New Project Empty Project; Name= HelloWorld Fügen Sie eine Datei hinzu: Project Add New Item Code C++ File; Name= main.cpp (Menü Project Properties) Configuration Properties Linker System; Setzen Sie Subsystem auf Console. Tippen Sie das Hallo-Welt -Programm ein: #include <iostream> using namespace std; int main() { cout << "Hello, World!" << endl; return 0; } Menü Build Build Solution zum Kompilieren und Linken. Drücken Sie Ctrl+F5 zum Starten des Programms.

32 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 11 Dateistruktur eines C++-Programms

33 Dateistruktur, Compiler und Linker, Präprozessor Dateistruktur eines C++-Programms Ein typisches C++-Programm ist über mehrere Dateien (oft mit Endung.cpp) verteilt. Sebastian Houben Intensivkurs C++ 11

34 Dateistruktur, Compiler und Linker, Präprozessor Dateistruktur eines C++-Programms Ein typisches C++-Programm ist über mehrere Dateien (oft mit Endung.cpp) verteilt. Jede Datei kann einzeln vom Compiler in eine sogenannte Objektdatei übersetzt werden. Sebastian Houben Intensivkurs C++ 11

35 Dateistruktur, Compiler und Linker, Präprozessor Dateistruktur eines C++-Programms Ein typisches C++-Programm ist über mehrere Dateien (oft mit Endung.cpp) verteilt. Jede Datei kann einzeln vom Compiler in eine sogenannte Objektdatei übersetzt werden. In einem letzten Schritt bündelt der Linker die Objektdateien zu einem ausführbaren Programm. Sebastian Houben Intensivkurs C++ 11

36 Dateistruktur, Compiler und Linker, Präprozessor Dateistruktur eines C++-Programms Ein typisches C++-Programm ist über mehrere Dateien (oft mit Endung.cpp) verteilt. Jede Datei kann einzeln vom Compiler in eine sogenannte Objektdatei übersetzt werden. In einem letzten Schritt bündelt der Linker die Objektdateien zu einem ausführbaren Programm. Beispiel: Ein Programm besteht aus den Dateien main.cpp, algo.cpp und tools.cpp. Daraus soll ein ausführbares Programm erstellt werden. Folgende Schritte sind notwendig: Sebastian Houben Intensivkurs C++ 11

37 Dateistruktur, Compiler und Linker, Präprozessor Dateistruktur eines C++-Programms Ein typisches C++-Programm ist über mehrere Dateien (oft mit Endung.cpp) verteilt. Jede Datei kann einzeln vom Compiler in eine sogenannte Objektdatei übersetzt werden. In einem letzten Schritt bündelt der Linker die Objektdateien zu einem ausführbaren Programm. Beispiel: Ein Programm besteht aus den Dateien main.cpp, algo.cpp und tools.cpp. Daraus soll ein ausführbares Programm erstellt werden. Folgende Schritte sind notwendig: 1 Der Compiler übersetzt main.cpp in main.obj. Sebastian Houben Intensivkurs C++ 11

38 Dateistruktur, Compiler und Linker, Präprozessor Dateistruktur eines C++-Programms Ein typisches C++-Programm ist über mehrere Dateien (oft mit Endung.cpp) verteilt. Jede Datei kann einzeln vom Compiler in eine sogenannte Objektdatei übersetzt werden. In einem letzten Schritt bündelt der Linker die Objektdateien zu einem ausführbaren Programm. Beispiel: Ein Programm besteht aus den Dateien main.cpp, algo.cpp und tools.cpp. Daraus soll ein ausführbares Programm erstellt werden. Folgende Schritte sind notwendig: 1 Der Compiler übersetzt main.cpp in main.obj. 2 Der Compiler übersetzt algo.cpp in algo.obj. Sebastian Houben Intensivkurs C++ 11

39 Dateistruktur, Compiler und Linker, Präprozessor Dateistruktur eines C++-Programms Ein typisches C++-Programm ist über mehrere Dateien (oft mit Endung.cpp) verteilt. Jede Datei kann einzeln vom Compiler in eine sogenannte Objektdatei übersetzt werden. In einem letzten Schritt bündelt der Linker die Objektdateien zu einem ausführbaren Programm. Beispiel: Ein Programm besteht aus den Dateien main.cpp, algo.cpp und tools.cpp. Daraus soll ein ausführbares Programm erstellt werden. Folgende Schritte sind notwendig: 1 Der Compiler übersetzt main.cpp in main.obj. 2 Der Compiler übersetzt algo.cpp in algo.obj. 3 Der Compiler übersetzt tools.cpp in tools.obj. Sebastian Houben Intensivkurs C++ 11

40 Dateistruktur, Compiler und Linker, Präprozessor Dateistruktur eines C++-Programms Ein typisches C++-Programm ist über mehrere Dateien (oft mit Endung.cpp) verteilt. Jede Datei kann einzeln vom Compiler in eine sogenannte Objektdatei übersetzt werden. In einem letzten Schritt bündelt der Linker die Objektdateien zu einem ausführbaren Programm. Beispiel: Ein Programm besteht aus den Dateien main.cpp, algo.cpp und tools.cpp. Daraus soll ein ausführbares Programm erstellt werden. Folgende Schritte sind notwendig: 1 Der Compiler übersetzt main.cpp in main.obj. 2 Der Compiler übersetzt algo.cpp in algo.obj. 3 Der Compiler übersetzt tools.cpp in tools.obj. 4 Der Linker setzt main.obj, algo.obj und tools.obj zum ausführbaren Programm (beispiel.exe) zusammen. Sebastian Houben Intensivkurs C++ 11

41 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 12 Q: Wie können Programmteile (Funktionen, Klassen) in verschiedenen Dateien von einander wissen, so dass sie sich gegenseitig aufrufen können?

42 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 12 Q: Wie können Programmteile (Funktionen, Klassen) in verschiedenen Dateien von einander wissen, so dass sie sich gegenseitig aufrufen können? A: Meist gibt es zu jeder.cpp-datei eine Header-Datei (.h oder.hpp). Die Header-Datei enthält ausschließlich Deklarationen, während die.cpp-datei die zugehörige Implementierung enthält. Einer.cpp-Datei wird Wissen über andere Programmteile durch Einbinden der entsprechenden Header-Dateien mitgeteilt.

43 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 13 Q: Wo wird definiert, welche Dateien zusammengehören, um ein ausführbares Programm zu bilden?

44 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 13 Q: Wo wird definiert, welche Dateien zusammengehören, um ein ausführbares Programm zu bilden? A: Das ist nicht Teil der Programmiersprache! Dies wird von jeder Programmierumgebung unterschiedlich gelöst. Visual Studio speichert diese Information in sogenannten Projektdateien (Solutions), die wiederum in Arbeitsbereiche organisiert sind. Jedes Projekt entspricht einer Bibliothek oder einem ausführbaren Programm. Ein Projekt definiert Quellen (.cpp) und Header (.h), sowie welche Bibliotheken verwendet werden sollen und wo diese zu finden sind.

45 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 14 main.cpp #include "square.h" int main() { int s = square(7); } square.h #ifndef SQUARE_H #define SQUARE_H int square(int value); // Deklaration #endif square.cpp int square(int value) { return value * value; } // Implementierung

46 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 15 Bibliotheken

47 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 15 Bibliotheken Niemand sollte das Rad neu erfinden. Für viele Standardaufgaben gibt es sehr gute Bibliotheken (z.b. die boost-bibliotheken, die später Thema sein werden).

48 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 15 Bibliotheken Niemand sollte das Rad neu erfinden. Für viele Standardaufgaben gibt es sehr gute Bibliotheken (z.b. die boost-bibliotheken, die später Thema sein werden). Eine Bibliothek besteht aus zwei Teilen:

49 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 15 Bibliotheken Niemand sollte das Rad neu erfinden. Für viele Standardaufgaben gibt es sehr gute Bibliotheken (z.b. die boost-bibliotheken, die später Thema sein werden). Eine Bibliothek besteht aus zwei Teilen: Die eigentliche Bibliothek (Windows:.lib oder.dll; Linux:.a oder.so; Mac:.a oder.dylib) enthält die Implementierung, also das, was den.cpp-dateien entspricht). Die Deklarationen zu einer Bibliothek stehen in den entsprechenden Header-Dateien. Diese gehören fest zur Bibliothek.

50 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 16 Beispiel: Unser Programm (main.cpp, algo.cpp, tools.cpp) verwendet die Bibliothek matrix, bestehend aus matrix.lib und matrix.h. Nehmen wir an, dass die Routinen aus matrix nur innerhalb von algo.cpp verwendet werden.

51 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 16 Beispiel: Unser Programm (main.cpp, algo.cpp, tools.cpp) verwendet die Bibliothek matrix, bestehend aus matrix.lib und matrix.h. Nehmen wir an, dass die Routinen aus matrix nur innerhalb von algo.cpp verwendet werden. 1 Der Compiler übersetzt algo.cpp in algo.obj. Er liest die Definitionen aus matrix.h ein, wobei ihm völlig egal ist, ob sich die Implementierungen zu den Definitionen in einer anderen.cpp-datei oder in einer Bibliothek befinden.

52 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 16 Beispiel: Unser Programm (main.cpp, algo.cpp, tools.cpp) verwendet die Bibliothek matrix, bestehend aus matrix.lib und matrix.h. Nehmen wir an, dass die Routinen aus matrix nur innerhalb von algo.cpp verwendet werden. 1 Der Compiler übersetzt algo.cpp in algo.obj. Er liest die Definitionen aus matrix.h ein, wobei ihm völlig egal ist, ob sich die Implementierungen zu den Definitionen in einer anderen.cpp-datei oder in einer Bibliothek befinden. 2 Der Linker setzt main.obj, algo.obj, tools.obj und matrix.lib zum ausführbaren Programm (beispiel.exe) zusammen.

53 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 17 Präprozessor-Macros Alle Präprozessor-Macros beginnen mit dem Symbol #.

54 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 17 Präprozessor-Macros Alle Präprozessor-Macros beginnen mit dem Symbol #. #include "dateiname" wird durch den Inhalt der Datei ersetzt. Die Datei wird zuerst im aktuellen Projekt gesucht. So werden Dateien aus dem eigenen Projekt eingebunden.

55 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 17 Präprozessor-Macros Alle Präprozessor-Macros beginnen mit dem Symbol #. #include "dateiname" wird durch den Inhalt der Datei ersetzt. Die Datei wird zuerst im aktuellen Projekt gesucht. So werden Dateien aus dem eigenen Projekt eingebunden. #include <dateiname> wird durch den Inhalt der Datei ersetzt. Die Datei wird im Include-Suchpfad gesucht. Diese Syntax wird für Header aus Bibliotheken verwendet.

56 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 17 Präprozessor-Macros Alle Präprozessor-Macros beginnen mit dem Symbol #. #include "dateiname" wird durch den Inhalt der Datei ersetzt. Die Datei wird zuerst im aktuellen Projekt gesucht. So werden Dateien aus dem eigenen Projekt eingebunden. #include <dateiname> wird durch den Inhalt der Datei ersetzt. Die Datei wird im Include-Suchpfad gesucht. Diese Syntax wird für Header aus Bibliotheken verwendet. #define NAME oder #define NAME Wert, z.b. #define WIDTH 80. Definition einer Konstanten.

57 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 17 Präprozessor-Macros Alle Präprozessor-Macros beginnen mit dem Symbol #. #include "dateiname" wird durch den Inhalt der Datei ersetzt. Die Datei wird zuerst im aktuellen Projekt gesucht. So werden Dateien aus dem eigenen Projekt eingebunden. #include <dateiname> wird durch den Inhalt der Datei ersetzt. Die Datei wird im Include-Suchpfad gesucht. Diese Syntax wird für Header aus Bibliotheken verwendet. #define NAME oder #define NAME Wert, z.b. #define WIDTH 80. Definition einer Konstanten. #ifdef, #ifndef, #else und #endif werden zur bedingten Kompilierung verwendet. Beispiel: #ifdef DEBUG cout << "Zwischenergebnis: " << z << endl; #endif

58 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 18 Oft binden Header-Dateien weitere Header ein.

59 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 18 Oft binden Header-Dateien weitere Header ein. Dies geschieht rekursiv, so dass ein einziges #include Statement eine große Menge an Headern einbinden kann.

60 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 18 Oft binden Header-Dateien weitere Header ein. Dies geschieht rekursiv, so dass ein einziges #include Statement eine große Menge an Headern einbinden kann. Deshalb ist oft unklar, ob ein Header bereits (implizit) eingebunden wurde oder nicht.

61 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 18 Oft binden Header-Dateien weitere Header ein. Dies geschieht rekursiv, so dass ein einziges #include Statement eine große Menge an Headern einbinden kann. Deshalb ist oft unklar, ob ein Header bereits (implizit) eingebunden wurde oder nicht. Damit jeder Header nur maximal einmal in eine.cpp-datei eingebunden wird, verwendet man sogenannte include-guards: #ifndef MEIN_HEADER_H #define MEIN_HEADER_H...Inhalt... #endif

62 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 18 Oft binden Header-Dateien weitere Header ein. Dies geschieht rekursiv, so dass ein einziges #include Statement eine große Menge an Headern einbinden kann. Deshalb ist oft unklar, ob ein Header bereits (implizit) eingebunden wurde oder nicht. Damit jeder Header nur maximal einmal in eine.cpp-datei eingebunden wird, verwendet man sogenannte include-guards: #ifndef MEIN_HEADER_H #define MEIN_HEADER_H...Inhalt... #endif Dabei ist MEIN HEADER H irgendein eindeutiger String, meist einfach der Dateiname.

63 Dateistruktur, Compiler und Linker, Präprozessor Sebastian Houben Intensivkurs C++ 18 Oft binden Header-Dateien weitere Header ein. Dies geschieht rekursiv, so dass ein einziges #include Statement eine große Menge an Headern einbinden kann. Deshalb ist oft unklar, ob ein Header bereits (implizit) eingebunden wurde oder nicht. Damit jeder Header nur maximal einmal in eine.cpp-datei eingebunden wird, verwendet man sogenannte include-guards: #ifndef MEIN_HEADER_H #define MEIN_HEADER_H...Inhalt... #endif Dabei ist MEIN HEADER H irgendein eindeutiger String, meist einfach der Dateiname.

64 Kommentare Sebastian Houben Intensivkurs C++ 19 Zeilen-Kommentar: // Diese ganze Zeile ist ein Kommentar. int magic = 42; // siehe "Per Anhalter durch die Galaxis"...

65 Kommentare Sebastian Houben Intensivkurs C++ 19 Zeilen-Kommentar: // Diese ganze Zeile ist ein Kommentar. int magic = 42; // siehe "Per Anhalter durch die Galaxis"... Block-Kommentar: int magic = /*42*/ 1001; /* Als magische Zahl ist 1001 viel schöner als 42. Das liegt an ihrer Primfaktorzerlegung: 7 * 11 * 13 = */

66 Variablen und Funktionen Sebastian Houben Intensivkurs C++ 20 Variablen: Typ Name; int a; int b = 7; int c, d = 3, e = f(b);

67 Variablen und Funktionen Sebastian Houben Intensivkurs C++ 20 Variablen: Typ Name; int a; int b = 7; int c, d = 3, e = f(b); Funktionen: Typ Name(Parameterliste) int f(int x); // Deklaration von f int f(int x) { return x * (1 - x); } // Implementierung von f int foo(int a, int b, float c, bool flag = true);

68 Variablen und Funktionen Sebastian Houben Intensivkurs C++ 20 Variablen: Typ Name; int a; int b = 7; int c, d = 3, e = f(b); Funktionen: Typ Name(Parameterliste) int f(int x); // Deklaration von f int f(int x) { return x * (1 - x); } // Implementierung von f int foo(int a, int b, float c, bool flag = true); Funktionsaufrufe int ergebnis = foo(f(7), d, ); foo(-42, 3, , true);

69 Vorwärtsdeklaration Sebastian Houben Intensivkurs C++ 21 Beispiel: Rekursion über zwei Funktionen. void foo() { if (...) bar(); } void bar() { if (...) foo(); }

70 Vorwärtsdeklaration Sebastian Houben Intensivkurs C++ 21 Beispiel: Rekursion über zwei Funktionen. void foo() { if (...) bar(); } void bar() { if (...) foo(); } Problem: Der Compiler arbeitet von vorn nach hinten und weiß deshalb nicht, was nach der aktuellen Stelle im Programm noch kommt. Innerhalb der Funktion foo ist bar noch nicht deklariert, wird aber aufgerufen.

71 Vorwärtsdeklaration Sebastian Houben Intensivkurs C++ 21 Beispiel: Rekursion über zwei Funktionen. void foo() { if (...) bar(); } void bar() { if (...) foo(); } Problem: Der Compiler arbeitet von vorn nach hinten und weiß deshalb nicht, was nach der aktuellen Stelle im Programm noch kommt. Innerhalb der Funktion foo ist bar noch nicht deklariert, wird aber aufgerufen. Fehler!

72 Vorwärtsdeklaration Sebastian Houben Intensivkurs C++ 21 Beispiel: Rekursion über zwei Funktionen. void foo() { if (...) bar(); } void bar() { if (...) foo(); } Problem: Der Compiler arbeitet von vorn nach hinten und weiß deshalb nicht, was nach der aktuellen Stelle im Programm noch kommt. Innerhalb der Funktion foo ist bar noch nicht deklariert, wird aber aufgerufen. Fehler! Abhilfe: Vorwärtsdeklaration: void bar(); void foo() { if (...) bar(); } void bar() { if (...) foo(); } // Vorwärtsdeklaration von bar

73 Datentypen Sebastian Houben Intensivkurs C++ 22 void: kein Wert, tritt oft als Rückgabetyp von Funktionen auf

74 Datentypen Sebastian Houben Intensivkurs C++ 22 void: kein Wert, tritt oft als Rückgabetyp von Funktionen auf Logik: bool, mit Werten true, false, belegt 1 Byte

75 Datentypen Sebastian Houben Intensivkurs C++ 22 void: kein Wert, tritt oft als Rückgabetyp von Funktionen auf Logik: bool, mit Werten true, false, belegt 1 Byte Ganzzahl: char (8 Bit), int (meist 32 Bit). Konstanten: 42, -5, a, \n, \\, \ Modifikatoren: unsigned, short, long, long long unsigned long long int (= unsigned long long)

76 Datentypen Sebastian Houben Intensivkurs C++ 22 void: kein Wert, tritt oft als Rückgabetyp von Funktionen auf Logik: bool, mit Werten true, false, belegt 1 Byte Ganzzahl: char (8 Bit), int (meist 32 Bit). Konstanten: 42, -5, a, \n, \\, \ Modifikatoren: unsigned, short, long, long long unsigned long long int (= unsigned long long) Fließkomma: float (meist 32 Bit IEEE), double (meist 64 Bit IEEE) Konstanten: -1.0, ,.01, +5.77e-18

77 Datentypen Sebastian Houben Intensivkurs C++ 22 void: kein Wert, tritt oft als Rückgabetyp von Funktionen auf Logik: bool, mit Werten true, false, belegt 1 Byte Ganzzahl: char (8 Bit), int (meist 32 Bit). Konstanten: 42, -5, a, \n, \\, \ Modifikatoren: unsigned, short, long, long long unsigned long long int (= unsigned long long) Fließkomma: float (meist 32 Bit IEEE), double (meist 64 Bit IEEE) Konstanten: -1.0, ,.01, +5.77e-18 C-Strings: char s[256] = "Hallo, Welt"; (char-array) C++-Strings: string s = "Hallo, Welt"; (String-Objekt)

78 Datentypen Sebastian Houben Intensivkurs C++ 23 Zeiger: int* Zeiger = Speicheradresse

79 Datentypen Sebastian Houben Intensivkurs C++ 23 Zeiger: int* Referenz: int& Zeiger = Speicheradresse Referenz = anderer Name für eine Variable

80 Datentypen Sebastian Houben Intensivkurs C++ 23 Zeiger: int* Referenz: int& Zeiger = Speicheradresse Referenz = anderer Name für eine Variable void*: Zeiger auf untypisierten Speicher Konstante nullptr: ungültiger Zeiger

81 Datentypen Sebastian Houben Intensivkurs C++ 23 Zeiger: int* Referenz: int& Zeiger = Speicheradresse Referenz = anderer Name für eine Variable void*: Zeiger auf untypisierten Speicher Konstante nullptr: ungültiger Zeiger Aufzählungen: enum FileFormat { wav, mp3, ogg };

82 Datentypen Sebastian Houben Intensivkurs C++ 23 Zeiger: int* Referenz: int& Zeiger = Speicheradresse Referenz = anderer Name für eine Variable void*: Zeiger auf untypisierten Speicher Konstante nullptr: ungültiger Zeiger Aufzählungen: enum FileFormat { wav, mp3, ogg }; Zusammengesetzte Typen: class, struct, union

83 Datentypen Sebastian Houben Intensivkurs C++ 23 Zeiger: int* Referenz: int& Zeiger = Speicheradresse Referenz = anderer Name für eine Variable void*: Zeiger auf untypisierten Speicher Konstante nullptr: ungültiger Zeiger Aufzählungen: enum FileFormat { wav, mp3, ogg }; Zusammengesetzte Typen: class, struct, union C-Arrays: int a[20], bool b[64][64]

84 Datentypen Sebastian Houben Intensivkurs C++ 23 Zeiger: int* Referenz: int& Zeiger = Speicheradresse Referenz = anderer Name für eine Variable void*: Zeiger auf untypisierten Speicher Konstante nullptr: ungültiger Zeiger Aufzählungen: enum FileFormat { wav, mp3, ogg }; Zusammengesetzte Typen: class, struct, union C-Arrays: int a[20], bool b[64][64] STL-Container: vector, list, deque, set, multiset, map, multimap

85 Datentypen Sebastian Houben Intensivkurs C++ 23 Zeiger: int* Referenz: int& Zeiger = Speicheradresse Referenz = anderer Name für eine Variable void*: Zeiger auf untypisierten Speicher Konstante nullptr: ungültiger Zeiger Aufzählungen: enum FileFormat { wav, mp3, ogg }; Zusammengesetzte Typen: class, struct, union C-Arrays: int a[20], bool b[64][64] STL-Container: vector, list, deque, set, multiset, map, multimap Alias-Namen für Typen: typedef Typ Name; Genauer: typedef [Variablendefinition mit neuem Namen als Variablennamen];

86 Datentypen Sebastian Houben Intensivkurs C++ 23 Zeiger: int* Referenz: int& Zeiger = Speicheradresse Referenz = anderer Name für eine Variable void*: Zeiger auf untypisierten Speicher Konstante nullptr: ungültiger Zeiger Aufzählungen: enum FileFormat { wav, mp3, ogg }; Zusammengesetzte Typen: class, struct, union C-Arrays: int a[20], bool b[64][64] STL-Container: vector, list, deque, set, multiset, map, multimap Alias-Namen für Typen: typedef Typ Name; Genauer: typedef [Variablendefinition mit neuem Namen als Variablennamen];

87 Operatoren Sebastian Houben Intensivkurs C++ 24 :: () []. -> dynamic cast static cast reinterpret cast const cast typeid ++ --! sizeof new delete * & + - (unary) (type).* ->* * / % + - (binary) << >> < > <= >= ==!= & ˆ && a? b : c = *= /= %= += -= >>= <<= &= ˆ= =,

88 Kontrollstrukturen Sebastian Houben Intensivkurs C++ 25 Block { } Kommando1; Kommando2;...

89 Kontrollstrukturen Sebastian Houben Intensivkurs C++ 25 Block { } Kommando1; Kommando2;... Bedingte Ausführung 1 if (Bedingung) Kommando1; [else Kommando2];

90 Kontrollstrukturen Sebastian Houben Intensivkurs C++ 25 Block { } Kommando1; Kommando2;... Bedingte Ausführung 1 if (Bedingung) Kommando1; [else Kommando2]; Bedingte Ausführung 2 switch (Ausdruck) { case Konstante1: Kommandos1; break; case Konstante2: Kommandos2; break;... default: KommandosN; }

91 Kontrollstrukturen Sebastian Houben Intensivkurs C++ 26 For-Schleife for (Kommando1; Bedingung; Kommando2) Kommando3;

92 Kontrollstrukturen Sebastian Houben Intensivkurs C++ 26 For-Schleife for (Kommando1; Bedingung; Kommando2) Kommando3; For-Schleife (range-based) for (Typ Variable : Container/Range) Kommando;

93 Kontrollstrukturen Sebastian Houben Intensivkurs C++ 26 For-Schleife for (Kommando1; Bedingung; Kommando2) Kommando3; For-Schleife (range-based) for (Typ Variable : Container/Range) Kommando; While-Schleife while (Bedingung) Kommando;

94 Kontrollstrukturen Sebastian Houben Intensivkurs C++ 26 For-Schleife for (Kommando1; Bedingung; Kommando2) Kommando3; For-Schleife (range-based) for (Typ Variable : Container/Range) Kommando; While-Schleife while (Bedingung) Kommando; Do-While-Schleife do Kommando; while (Bedingung);

95 Kontrollstrukturen Sebastian Houben Intensivkurs C++ 26 For-Schleife for (Kommando1; Bedingung; Kommando2) Kommando3; For-Schleife (range-based) for (Typ Variable : Container/Range) Kommando; While-Schleife while (Bedingung) Kommando; Do-While-Schleife do Kommando; while (Bedingung); Die Schlüsselwörter break und continue sind in allen Schleifen verfügbar.

96 Kontrollstrukturen Sebastian Houben Intensivkurs C++ 26 For-Schleife for (Kommando1; Bedingung; Kommando2) Kommando3; For-Schleife (range-based) for (Typ Variable : Container/Range) Kommando; While-Schleife while (Bedingung) Kommando; Do-While-Schleife do Kommando; while (Bedingung); Die Schlüsselwörter break und continue sind in allen Schleifen verfügbar. goto existiert (considered harmful, of course).

97 Programm-Parameter Sebastian Houben Intensivkurs C++ 27 Ein Konsolenprogramm kann mit Parametern aufgerufen werden: beispiel.exe -f 17 message=hallo

98 Programm-Parameter Sebastian Houben Intensivkurs C++ 27 Ein Konsolenprogramm kann mit Parametern aufgerufen werden: beispiel.exe -f 17 message=hallo Diese Parameter stehen der main-funktion zur Verfügung: int main(int argc, char** argv) {... return 0; }

99 Programm-Parameter Sebastian Houben Intensivkurs C++ 27 Ein Konsolenprogramm kann mit Parametern aufgerufen werden: beispiel.exe -f 17 message=hallo Diese Parameter stehen der main-funktion zur Verfügung: int main(int argc, char** argv) {... return 0; } argc: argument count - Anzahl der Parameter (+ 1)

100 Programm-Parameter Sebastian Houben Intensivkurs C++ 27 Ein Konsolenprogramm kann mit Parametern aufgerufen werden: beispiel.exe -f 17 message=hallo Diese Parameter stehen der main-funktion zur Verfügung: int main(int argc, char** argv) {... return 0; } argc: argument count - Anzahl der Parameter (+ 1) argv: argument values oder argument vector

101 Programm-Parameter Sebastian Houben Intensivkurs C++ 27 Ein Konsolenprogramm kann mit Parametern aufgerufen werden: beispiel.exe -f 17 message=hallo Diese Parameter stehen der main-funktion zur Verfügung: int main(int argc, char** argv) {... return 0; } argc: argument count - Anzahl der Parameter (+ 1) argv: argument values oder argument vector Der Typ von argv ist char**: Ein Zeiger auf einen Zeiger von Zeichen (Characters).

102 Programm-Parameter Sebastian Houben Intensivkurs C++ 27 Ein Konsolenprogramm kann mit Parametern aufgerufen werden: beispiel.exe -f 17 message=hallo Diese Parameter stehen der main-funktion zur Verfügung: int main(int argc, char** argv) {... return 0; } argc: argument count - Anzahl der Parameter (+ 1) argv: argument values oder argument vector Der Typ von argv ist char**: Ein Zeiger auf einen Zeiger von Zeichen (Characters). Für heute reicht es aus zu wissen, dass argv[1] das erste Argument des Programms ist.

103 Programm-Parameter Sebastian Houben Intensivkurs C++ 27 Ein Konsolenprogramm kann mit Parametern aufgerufen werden: beispiel.exe -f 17 message=hallo Diese Parameter stehen der main-funktion zur Verfügung: int main(int argc, char** argv) {... return 0; } argc: argument count - Anzahl der Parameter (+ 1) argv: argument values oder argument vector Der Typ von argv ist char**: Ein Zeiger auf einen Zeiger von Zeichen (Characters). Für heute reicht es aus zu wissen, dass argv[1] das erste Argument des Programms ist. Es ist gültig, falls argc > 1 erfüllt ist.

104 Konsolen-Ausgabe Sebastian Houben Intensivkurs C++ 28 Das Objekt cout im Namensraum std ist ein sogenannter Stream (Datenstrom).

105 Konsolen-Ausgabe Sebastian Houben Intensivkurs C++ 28 Das Objekt cout im Namensraum std ist ein sogenannter Stream (Datenstrom). Jedes Konsolenprogramm hat drei Standard-Streams: (Tastatur-)Eingabe (cin), Ausgabe (cout), und Fehler (cerr). Wir benutzen hier nur cout.

106 Konsolen-Ausgabe Sebastian Houben Intensivkurs C++ 28 Das Objekt cout im Namensraum std ist ein sogenannter Stream (Datenstrom). Jedes Konsolenprogramm hat drei Standard-Streams: (Tastatur-)Eingabe (cin), Ausgabe (cout), und Fehler (cerr). Wir benutzen hier nur cout. Beispiel: #include <iostream> using namespace std; cout << "Eine Zahl: " << 42 << endl;

107 Konsolen-Ausgabe Sebastian Houben Intensivkurs C++ 28 Das Objekt cout im Namensraum std ist ein sogenannter Stream (Datenstrom). Jedes Konsolenprogramm hat drei Standard-Streams: (Tastatur-)Eingabe (cin), Ausgabe (cout), und Fehler (cerr). Wir benutzen hier nur cout. Beispiel: #include <iostream> using namespace std; cout << "Eine Zahl: " << 42 << endl; Zahlen und Strings können mit Hilfe des Stream-Operators << in den Stream geschoben werden. Bei cout führt dies dazu, dass die Werte in der Konsole ausgegeben werden.

108 Konsolen-Ausgabe Sebastian Houben Intensivkurs C++ 28 Das Objekt cout im Namensraum std ist ein sogenannter Stream (Datenstrom). Jedes Konsolenprogramm hat drei Standard-Streams: (Tastatur-)Eingabe (cin), Ausgabe (cout), und Fehler (cerr). Wir benutzen hier nur cout. Beispiel: #include <iostream> using namespace std; cout << "Eine Zahl: " << 42 << endl; Zahlen und Strings können mit Hilfe des Stream-Operators << in den Stream geschoben werden. Bei cout führt dies dazu, dass die Werte in der Konsole ausgegeben werden. endl ist eine spezielle Konstruktion, die ein Ende-der-Zeile-Symbol ( \n ) ausgibt und zur Ausgabe von eventuell gepufferten Daten führt.

109 Typumwandlung Sebastian Houben Intensivkurs C++ 29

110 Typumwandlung Sebastian Houben Intensivkurs C++ 29 Beispiele statischer Typumwandlung: int a = 3; double b = a; // impliziter cast int -> double double c = 2.7; int d = c; // impliziter cast double -> int: Warnung oder Fehler! int e = (int)c; // expliziter cast (okay), setzt e = 2. int f = int(c); // expliziter cast, neue Syntax. int g = int(round(c)); // setzt g = 3. bool b1 = 17; // 0 -> false, Rest -> true bool b2 = nullptr; // nullptr -> false, alle anderen Zeiger -> true

111 Typumwandlung Sebastian Houben Intensivkurs C++ 29 Beispiele statischer Typumwandlung: int a = 3; double b = a; // impliziter cast int -> double double c = 2.7; int d = c; // impliziter cast double -> int: Warnung oder Fehler! int e = (int)c; // expliziter cast (okay), setzt e = 2. int f = int(c); // expliziter cast, neue Syntax. int g = int(round(c)); // setzt g = 3. bool b1 = 17; // 0 -> false, Rest -> true bool b2 = nullptr; // nullptr -> false, alle anderen Zeiger -> true Typecasts elementarer Typen sind meist unkritisch

112 Typumwandlung Sebastian Houben Intensivkurs C++ 29 Beispiele statischer Typumwandlung: int a = 3; double b = a; // impliziter cast int -> double double c = 2.7; int d = c; // impliziter cast double -> int: Warnung oder Fehler! int e = (int)c; // expliziter cast (okay), setzt e = 2. int f = int(c); // expliziter cast, neue Syntax. int g = int(round(c)); // setzt g = 3. bool b1 = 17; // 0 -> false, Rest -> true bool b2 = nullptr; // nullptr -> false, alle anderen Zeiger -> true Typecasts elementarer Typen sind meist unkritisch Das Thema wird im Zusammenhang mit Klassen und Vererbung komplizierter.

113 Typumwandlung Sebastian Houben Intensivkurs C++ 29 Beispiele statischer Typumwandlung: int a = 3; double b = a; // impliziter cast int -> double double c = 2.7; int d = c; // impliziter cast double -> int: Warnung oder Fehler! int e = (int)c; // expliziter cast (okay), setzt e = 2. int f = int(c); // expliziter cast, neue Syntax. int g = int(round(c)); // setzt g = 3. bool b1 = 17; // 0 -> false, Rest -> true bool b2 = nullptr; // nullptr -> false, alle anderen Zeiger -> true Typecasts elementarer Typen sind meist unkritisch Das Thema wird im Zusammenhang mit Klassen und Vererbung komplizierter. In altem C-Code werden oft Zeiger in Integers und zurück umgewandelt. Das ist sehr gefährlich, denn Zeiger auf 64bit-Systemen passen nicht in einen int!

114 Typumwandlung Sebastian Houben Intensivkurs C++ 30 Zahlen in Strings wandeln und zurück Umwandlung auf C-Art int wert = 42; char str[50]; sprintf(str, "%d", wert); // str = "42"; int wert2 = strtol(str, nullptr, 10); // wert2 = 42; Umwandlung auf C++-Art int wert = 42; stringstream ss; ss << wert; string str = ss.str(); // str = "42"; int wert2; istringstream(str) >> wert2; // wert2 = 42;

115 Hilfe, Referenz, Dokumentation Sebastian Houben Intensivkurs C++ 31 gutes Tutorial: Referenz-Dokumentation: Linux/Mac: man-pages! Windows: MSDN Weitere Quellen: Programmierfragen, Fehlermeldungen: Google, Stack Overflow. Algorithmen: Wikipedia.

116 Anwesenheitsaufgabe (10 Punkte) Sebastian Houben Intensivkurs C++ 32 Schreiben Sie ein Programm mit Namen inkrement, das eine ganze Zahl als Argument erwartet, eins addiert, und das Ergebnis ausgibt. Falls kein Argument übergeben wurde soll das Programm eine Fehlermeldung ausgeben. Beispiel: $ inkrement = 1235 $ inkrement = $ inkrement Fehler: Es wurde keine Zahl uebergeben.

117 Anwesenheitsaufgabe (40 Punkte) Schreiben Sie ein Programm mit Namen primzahltest, das als Argument eine positive ganze Zahl erwartet. Prüfen Sie, ob ein Argument vorhanden ist und ob die übergebene Zahl positiv ist. Das Programm bestimmt, ob diese Zahl prim ist oder nicht. Verwenden Sie den folgenden (ineffizienten aber korrekten) Algorithmus (hier als Pseudo-Code): bool ist_prim(unsigned int n) { if (n == 1) return false; schleife: für jedes i >= 2, i*i <= n { if (ist_prim(i)) { if (n durch i teilbar) return false; } } return true; } $ primzahltest ist keine Primzahl. $ primzahltest ist eine Primzahl. Sebastian Houben Intensivkurs C++ 33

118 Anwesenheitsaufgabe (30 Punkte) Sebastian Houben Intensivkurs C++ 34 Modifizieren Sie den obigen Algorithmus so, dass das Programm die Primfaktorzerlegung der Zahl ausgibt. Beispiel: $ primfaktorzerlegung = 2 * 2 * 2 * 3 $ primfaktorzerlegung 1 1 = 1

119 Anwesenheitsaufgabe (20 Punkte) Sebastian Houben Intensivkurs C++ 35 Modifizieren Sie das Programm so, dass gleiche Primfaktoren zu Potenzen gruppiert werden. Beispiel: $ primfaktorzerlegung = 2 ˆ 3 * 3

Intensivkurs C++ Tag 1: Grundlagen Sebastian Houben Institut für Neuroinformatik Rahmen Grundlagen Aufgaben

Intensivkurs C++ Tag 1: Grundlagen Sebastian Houben Institut für Neuroinformatik Rahmen Grundlagen Aufgaben Intensivkurs C++ Tag 1: Grundlagen Sebastian Houben Institut für Neuroinformatik www.ini.rub.de/rtcv 26.02.2018 Intensivkurs C++ 26.02.2018 Sebastian Houben 1 Inhalt 1 Rahmen 2 Grundlagen 3 Aufgaben Intensivkurs

Mehr

Formalien Intensivkurs C++ Tag 1: Grundlagen Der Kurs besteht aus 10 Einheiten von je (maximal) 8 Stunden. Jeder Tag wird von einer Vorlesung eingeleitet, an die sich betreute Programmierübungen anschließen.

Mehr

Tutorium Rechnerorganisation

Tutorium Rechnerorganisation Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

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

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

DAP2-Programmierpraktikum Einführung in C++ (Teil 1) DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Wintersemester 2010/11, 17. Februar 2011 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt)

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Einführung in die Programmierung (EPR)

Einführung in die Programmierung (EPR) Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.

Mehr

1 Vom Problem zum Programm

1 Vom Problem zum Programm Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt 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 - mit / ohne Parameter - mit / ohne Rückgabewerte

Mehr

Vorkurs C++ Programmierung

Vorkurs C++ Programmierung Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens SS2013 Inhalt Projekt Vorlesung: praktische Implementierung üben Ein und

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für eine Hausverwaltung sollen für maximal 500 Wohnungen Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Art Baujahr Wohnung Whnginfo Nebenkosten

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 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl

Mehr

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Wiederholungen - while - do-while - for

Mehr

Zählen von Objekten einer bestimmten Klasse

Zählen von Objekten einer bestimmten Klasse Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --

Mehr

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für ein Baumkataster sollen für maximal 500 Bäume Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Nummer Bauminfo Baumart Hoehe Baum Umfang

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung: Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang

Mehr

Erwin Grüner 09.02.2006

Erwin Grüner 09.02.2006 FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife

Mehr

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierung in C. Grundlagen. Stefan Kallerhoff Programmierung in C Grundlagen Stefan Kallerhoff Vorstellungsrunde Name Hobby/Beruf Schon mal was programmiert? Erwartungen an den Kurs Lieblingstier Für zu Hause C-Buch online: http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/

Mehr

Informatik I (D-MAVT)

Informatik I (D-MAVT) 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

Mehr

Einführung in die C++ Programmierung für Ingenieure

Einführung in die C++ Programmierung für Ingenieure Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF

Mehr

Die Programmiersprache C99: Zusammenfassung

Die Programmiersprache C99: Zusammenfassung Die Programmiersprache C99: Zusammenfassung Jörn Loviscach Versionsstand: 7. Dezember 2010, 19:30 Die nummerierten Felder sind absichtlich leer, zum Ausfüllen in der Vorlesung. Videos dazu: http://www.youtube.com/joernloviscach

Mehr

Modellierung und Programmierung 1

Modellierung und Programmierung 1 Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut für Informatik Universität Leipzig 19. November 2015 Gültigkeitsbereich (Scope) von Variablen { int m; {

Mehr

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein. Schritt 1: Installation des Javacompilers JDK. Der erste Start mit Eclipse Bevor Sie den Java-Compiler installieren sollten Sie sich vergewissern, ob er eventuell schon installiert ist. Gehen sie wie folgt

Mehr

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet C++ Grundlagen ++ bedeutet Erweiterung zum Ansi C Standard Hier wird eine Funktion eingeleitet Aufbau: In dieser Datei stehen die Befehle, die gestartet werden, wenn das Programm gestartet wird Int main()

Mehr

Die Programmiersprache C

Die Programmiersprache C Die Programmiersprache C höhere Programmiersprache (mit einigen Assembler-ähnlichen Konstrukten) gut verständliche Kommandos muss von Compiler in maschinenlesbaren Code (Binärdatei) übersetzt werden universell,

Mehr

1. Übung zu "Numerik partieller Differentialgleichungen"

1. Übung zu Numerik partieller Differentialgleichungen 1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:

Mehr

Grundlagen der Informatik - 6. Praktikum

Grundlagen der Informatik - 6. Praktikum Grundlagen der Informatik - 6. Praktikum In diesem Praktikum soll es neben der Anwendung von Funktionsdefinitionen auch um einfache Prinzipien der verteilten Quelltext-Strukturierung gehen. Diese spielt

Mehr

Grundlagen von Python

Grundlagen von Python Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren

Mehr

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3. Hello World Javakurs 2014, 1. Vorlesung Sebastian Schuck basierend auf der Vorlage von Arne Kappen wiki.freitagsrunde.org 3. März 2014 This work is licensed under the Creative Commons Attribution-ShareAlike

Mehr

Übung 9 - Lösungsvorschlag

Übung 9 - Lösungsvorschlag Universität Innsbruck - Institut für Informatik Datenbanken und Informationssysteme Prof. Günther Specht, Eva Zangerle Besprechung: 15.12.2008 Einführung in die Informatik Übung 9 - Lösungsvorschlag Aufgabe

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2014, 16. Juli 2014 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:

Mehr

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Teil 1: Wiederholung C Heutige Agenda Nutzereingaben verarbeiten Teil 2: Grundlagen in C++ Erstes

Mehr

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Objektorientierte Programmierung für Anfänger am Beispiel PHP Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten

Mehr

5. Tutorium zu Programmieren

5. Tutorium zu Programmieren 5. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2008 by IPD Snelting

Mehr

Objektbasierte Entwicklung

Objektbasierte Entwicklung Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit

Mehr

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben. Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.

Mehr

Native Zeichenketten (C-Strings)

Native Zeichenketten (C-Strings) Native Zeichenketten (C-Strings)... sind in C/C++ char-arrays. D.h. die Deklaration char msg[80]; kann Zeichenketten bis zur Länge 79 enthalten. (Direkte Zuweisungen wie msg="hallo!" sind jedoch nicht

Mehr

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen

Übungen 19.01.2012 Programmieren 1 Felix Rohrer. Übungen Übungen if / else / else if... 2... 2 Aufgabe 2:... 2 Aufgabe 3:... 2 Aufgabe 4:... 2 Aufgabe 5:... 2 Aufgabe 6:... 2 Aufgabe 7:... 3 Aufgabe 8:... 3 Aufgabe 9:... 3 Aufgabe 10:... 3 switch... 4... 4 Aufgabe

Mehr

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl Funktionen Zusammenfassung von Befehlssequenzen als aufrufbare/wiederverwendbare Funktionen in einem Programmblock mit festgelegter Schnittstelle (Signatur) Derartige prozedurale Programmierung erlaubt

Mehr

Übersicht Programmablaufsteuerung

Übersicht Programmablaufsteuerung Übersicht Programmablaufsteuerung Konditionale Verzweigung: if - else switch-anweisung Schleifenkonstrukte: while, do - while for Schleife Sprung-Anweisungen: break, continue, goto, return Anweisungen

Mehr

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07) C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07) 1. Aufgabe 6 Punkte Geben Sie Definitionen an für: float var; 1 a) eine float-variable var: b) einen Zeiger pvar, der float *pvar = &var; 1 auf die

Mehr

Kurze Einführung in die Programmiersprache C++ und in Root

Kurze Einführung in die Programmiersprache C++ und in Root Kurze Einführung in die Programmiersprache C++ und in Root Statistik, Datenanalyse und Simulation; 31.10.2006 Inhalt 1 Einführung in die Programmiersprache C++ Allgemeines Variablen Funktionen 2 1 Einführung

Mehr

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Informatik I 2 Übung 9 Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Quellcode Strukturieren Wenn alle Funktionen in einer Datei zusammengefasst sind wird es schnell unübersichtlich Mehrere

Mehr

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

Mehr

Java Kurs für Anfänger Einheit 5 Methoden

Java Kurs für Anfänger Einheit 5 Methoden Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Howto Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Peter Bitterlich Markus Langer 12. Oktober 2012 Zusammenfassung Dieses Dokument erklärt Schritt für Schritt die Installation

Mehr

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala Das Typsystem von Scala 1 Eigenschaften Das Typsystem von Scala ist statisch, implizit und sicher 2 Nichts Primitives Alles ist ein Objekt, es gibt keine primitiven Datentypen scala> 42.hashCode() res0:

Mehr

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

Delegatesund Ereignisse

Delegatesund Ereignisse Delegatesund Ereignisse «Delegierter» Methoden Schablone Funktionszeiger Dr. Beatrice Amrhein Überblick Definition eines Delegat Einfache Delegate Beispiele von Delegat-Anwendungen Definition eines Ereignisses

Mehr

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung

M. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales

Mehr

Fallunterscheidung: if-statement

Fallunterscheidung: if-statement Fallunterscheidung: if-statement A E 1 E 2 V 1 V 2 Syntax: if ( ausdruck ) Semantik: else anweisungsfolge_1 anweisungsfolge_2 1. Der ausdruck wird bewertet 2. Ergibt die Bewertung einen Wert ungleich 0

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

2. Semester, 2. Prüfung, Lösung

2. Semester, 2. Prüfung, Lösung 2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter

Mehr

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg. Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert

Mehr

Übungen zu C++ Kapitel 1

Übungen zu C++ Kapitel 1 Übungen zu C++ Kapitel 1 Aufgabe 1 Ergänze den Text. a) Die sechs logischen Einheiten eines Computers sind Eingabe-Einheit, Ausgabe-Einheit, RAM, ALU, CPU, Plattenspeicher. b) Die Programme, welche Hochsprachenprogramme

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 16 Kapitel 5 Arithmetische Operatoren Seite 1 von 16 Arithmetische Operatoren - Man unterscheidet unäre und binäre Operatoren. - Je nachdem, ob sie auf einen Operanden wirken, oder eine Verknüpfung zweier

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

Propädeutikum. Dipl.-Inf. Frank Güttler

Propädeutikum. Dipl.-Inf. Frank Güttler Propädeutikum 2015 Vorbereitungskurs Informatikstudium Erfolgreich Studieren Programmieren (C-Kurs) guettler@informatik.uni-leipzig.de Universität Leipzig Institut für Informatik Technische Informatik

Mehr

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek

Proseminar C-Programmierung. Strukturen. Von Marcel Lebek Proseminar C-Programmierung Strukturen Von Marcel Lebek Index 1. Was sind Strukturen?...3 2. Padding 5 3. Vor- und Nachteile von Padding..8 4. Padding gering halten 9 5. Anwendungsgebiete von Strukturen.11

Mehr

FB Informatik. Fehler. Testplan

FB Informatik. Fehler. Testplan Fehler #include int i,n,summe; int summe (int); cout 0) cin>n; i=summme(n); cout

Mehr

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Java Kurs für Anfänger Einheit 4 Klassen und Objekte Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

DLLs (dynamic loaded libraries) mit MingW erstellen

DLLs (dynamic loaded libraries) mit MingW erstellen DLLs (dynamic loaded libraries) mit MingW erstellen Autor: Michel D. Schmid Datum: April 2, 2009 Contents 1 Einführung 1 1.1 Open-Source Tools.......................................... 1 2 Beispiel 1:

Mehr

Qt-Projekte mit Visual Studio 2005

Qt-Projekte mit Visual Studio 2005 Qt-Projekte mit Visual Studio 2005 Benötigte Programme: Visual Studio 2005 Vollversion, Microsoft Qt 4 Open Source s. Qt 4-Installationsanleitung Tabelle 1: Benötigte Programme für die Qt-Programmierung

Mehr

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005 Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der

Mehr

Projektverwaltung Problem Lösung: Modulare Programmierung

Projektverwaltung Problem Lösung: Modulare Programmierung Projektverwaltung Problem Der Sourcecode ür ein Programm wird immer länger und unübersichtlicher Eine Funktion, die in einem alten Projekt verwendet wurde, soll auch in einem neuen Projekt verwendet werden

Mehr

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Praxisorientierte Einführung in C++ Lektion: Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm) Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)" Christof Elbrechter Neuroinformatics Group, CITEC April 24, 2014 Christof Elbrechter Praxisorientierte

Mehr

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten

Mehr

1Schnelleinstieg 14. 2Wie aus einer einfachen Textdatei. 3 Wie man eigene Programme erstellt 30. Inhaltsverzeichnis. ein Programm wird 20

1Schnelleinstieg 14. 2Wie aus einer einfachen Textdatei. 3 Wie man eigene Programme erstellt 30. Inhaltsverzeichnis. ein Programm wird 20 Inhaltsverzeichnis Liebe Leserin, lieber Leser!...13 1Schnelleinstieg 14 Welche Vorkenntnisse benötigen Sie für dieses Buch?...16 An wen richtet sich dieses Buch?...16 Was benötigen Sie, um die Programmiersprache

Mehr

Kompilieren und Linken

Kompilieren und Linken Kapitel 2 Kompilieren und Linken Bevor wir uns auf C++ selbst stürzen, brauchen wir einiges Vorgeplänkel, wie man komfortabel ein größeres C++- kompilieren kann. Mit Java stellt sich der Kompiliervorgang

Mehr

Übungsblatt 3: Algorithmen in Java & Grammatiken

Übungsblatt 3: Algorithmen in Java & Grammatiken Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015

Mehr

Alltagsnotizen eines Softwareentwicklers

Alltagsnotizen eines Softwareentwicklers Alltagsnotizen eines Softwareentwicklers Entkoppeln von Objekten durch Callbacks mit c++-interfaces oder boost.function und boost.bind Tags: c++, entkoppeln, objekt, oop, callback, boost.bind, boost.function,

Mehr

Distributed Computing Group

Distributed Computing Group JAVA TUTORIAL Distributed Computing Group Vernetzte Systeme - SS 06 Übersicht Warum Java? Interoperabilität grosse und gut dokumentierte Library weit verbreitet Syntax sehr nahe an C Erfahrung: Java wird

Mehr

Einführung in die Programmierung

Einführung in die Programmierung Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. Einfache Ein- und Ausgabe mit Java 1. Hallo-Welt! Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden. /** Die Klasse hello sendet einen

Mehr

Informatik Repetitorium SS 2009. Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692

Informatik Repetitorium SS 2009. Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692 Informatik Repetitorium SS 2009 Volker Jaedicke Volker.Jaedicke@web.de 0179 1322692 Operatoren und Datentypen Beispiel: Anweisungen Variable int a float b int c a= a % (int) (++b-1/4) Vorher 36 3.5 c=b

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum

Mehr

Wirtschaftsinformatik I

Wirtschaftsinformatik I Wirtschaftsinformatik I - Tutorium 6/ 7 (April 2010) Zusatzinformationen - Lösungsvorschläge Wirtschaftsinformatik I Tutorium Jochen Daum (4.Semester BWL) Universität Mannheim Rechtshinweis: Diese Präsentation

Mehr

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace. Starten Sie Eclipse: Abgesehen vom Kommandozeilenfenster, auf welches wir später eingehen, öffnet sich ein Dialog (in der FH vermutlich nicht, überspringen Sie in diesem Fall): Hier tragen sie Ihr Arbeitsverzeichnis

Mehr

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h> Allgemeines Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C #include main() { printf( hello world\n ); } Peter Sobe 1 Die Großfamilie der C-Sprachen

Mehr

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7 Java 7 Elmar Fuchs Grundlagen Programmierung 1. Ausgabe, Dezember 2011 JAV7 5 Java 7 - Grundlagen Programmierung 5 Kontrollstrukturen In diesem Kapitel erfahren Sie wie Sie die Ausführung von von Bedingungen

Mehr

Eine Einführung in C-Funktionen

Eine Einführung in C-Funktionen Eine Einführung in C-Funktionen CGK-Proseminar 2014 Philip Gawehn 04.07.2014, Hamburg Inhaltsverzeichnis 1 Einleitung 2 2 Grundlagen 2 2.1 Der Aufbau einer Funktion....................... 2 2.2 Schlüsselwörter.............................

Mehr

Datentypen: Enum, Array, Struct, Union

Datentypen: Enum, Array, Struct, Union Datentypen: Enum, Array, Struct, Union C-Kurs 2013, 2. Tutorium Freitagsrunde http://wiki.freitagsrunde.org 10. September 2013 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0

Mehr

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012

Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **

Mehr

SEP 114. Design by Contract

SEP 114. Design by Contract Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit

Mehr

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X SwissMacMeeting #1 26. Juni 2004 Messeturm Basel http://mac.naepflin.com Was ist das Ziel dieses Kurses? Starthilfe Einblick in die Möglichkeiten,

Mehr

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife

Praktikum Ingenieurinformatik. Termin 2. Verzweigungen (if-else), printf und scanf, while-schleife Praktikum Ingenieurinformatik Termin 2 Verzweigungen (if-else), printf und scanf, while-schleife 1 1. Import/Export von Eclipse-Projekten 2. Verzweigungen (if-else-anweisung) 3. printf und scanf 4. Übungsaufgaben

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2009, 16. Juli 2009 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:

Mehr