Einführung in das Programmieren für Technische Mathematiker



Ähnliche Dokumente
Standardbibliotheken. Datentyp bool. Eingaben 2/2. Eingaben 1/2. In C gibt es keinen logischen Datentyp

Einführung in die Programmierung (EPR)

Listen. Arrays. Deklaration. Einfach verkettete Listen

Algorithmen mit Python

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

Grundlagen. Kapitel 1

VBA-Programmierung: Zusammenfassung

Installation und Inbetriebnahme von Microsoft Visual C Express

Programmieren Lernen mit BYOB. Gerald Futschek 5. November 2012

Informatik I (D-MAVT)

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

Einführung in die Programmierung

Klausur in Programmieren

Übungen zu C++ Kapitel 1

Brainfuck. 1 Brainfuck. 1.1 Brainfuck Geschichte und Umfeld. 1.2 Esoterische Programmiersprachen

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

Algorithmen und Programmieren II Einführung in Python

1. Übung zu "Numerik partieller Differentialgleichungen"

Programmierkurs Java

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

DLLs (dynamic loaded libraries) mit MingW erstellen

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

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

Einführung in die C-Programmierung

Programmieren in Haskell Einführung

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

Vorkurs Informatik WiSe 15/16

Angewandte Mathematik und Programmierung

Tutorium Rechnerorganisation

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

2. Programmierung in C

Objektbasierte Entwicklung

Fakultät Angewandte Informatik Lehrprofessur für Informatik

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

Grundlagen von Python

Programmierung in C. Grundlagen. Stefan Kallerhoff

Objektorientierte Programmierung für Anfänger am Beispiel PHP

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

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

Objektorientierte Programmierung

Klausur in Programmieren

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

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Kontrollstrukturen - Universität Köln

CGI Programmierung mit Ha. Markus Schwarz

Professionelle Seminare im Bereich MS-Office

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

Programmierkurs: Delphi: Einstieg

Informatik Repetitorium SS Volker Jaedicke

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

E-PRIME TUTORIUM Die Programmiersprache BASIC

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Klausur in Programmieren

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

Pragmatik von Programmiersprachen

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

PHP Kurs Online Kurs Analysten Programmierer Web PHP

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

I.1 Die Parrot Assemblersprache

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Funktionale Programmierung mit Haskell

Programmierung für Mathematik (HS13)

Was ist Logische Programmierung?

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Vorkurs C++ Programmierung

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

Objektorientiertes Programmieren für Ingenieure

Programmiersprachen und Programmierkonzepte

Fragen. f [ ] = [ ] f (x : y : ys) = x y : f ys f (x : xs) = f (x : x : xs) Wozu evaluiert f [1, 2, 3] (Abkürzung für f (1 : 2 : 3 : [ ]))?

Klausur in Programmieren

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

Übersicht. Schleifen. Schleifeninvarianten. Referenztypen, Wrapperklassen und API. 9. November 2009 CoMa I WS 08/09 1/15

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

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

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Kapitel 1: Einführung

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

Programmieren was ist das genau?

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

C++11 C++14 Kapitel Doppelseite Übungen Musterlösungen Anhang

Einführung in Eclipse und Java

Objektorientierte Programmierung mit C++ Vector und List

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

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

2.4 Das erste C++-Programm *

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

Erwin Grüner

Lehrstuhl Informatik VI Grundzüge der Informatik * WS 2008/2009 Prof. Dr. Joachim Biskup

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

Programmierparadigmen. Programmierparadigmen. Imperatives vs. objektorientiertes Programmieren. Programmierparadigmen. Agenda für heute, 4.

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Vorlesung Informatik II

Hochschule München, FK 03 FA SS Ingenieurinformatik

MPI-Programmierung unter Windows mit MPICH2. Installieren von MPICH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen. Christian Terboven

C++ mit. Microsoft Visual C Richard Kaiser. Einführung in Standard-C++-, C++/CLI und die objektorientierte Windows.

Prozedurale Datenbank- Anwendungsprogrammierung

Java Einführung Operatoren Kapitel 2 und 3

Client-Server-Beziehungen

Zählen von Objekten einer bestimmten Klasse

Einführung in die STL anhand eines ausgewählten Beispiels

Transkript:

Einführung in das Programmieren für Technische Mathematiker Einführung in C++ C++ Marcus Page, MSc. Prof. Dr. Dirk Praetorius I Was ist C++ I Programmierparadigmen I C++ im Vergleich mit C Fr. :15-11:5, Freihaus HS 8 Institut für Analysis und Scientific Computing 1 Programmierparadigmen I fundamentaler Programmierstil I Sprachen unterscheiden sich im Aufbau Klassifizierung von Programmiersprachen I Es geht nicht um das was sondern um das wie I bestimmen Entwurf und Design von PS I Imperativ, Deklarativ, Objektorientiert Imperative Programmierparadigmen I (Assemblersprachen) I Strukturierte Programmierung I Prozedurale Programmierung I Modulare Programmierung 2 3

Assemblersprachen I sehr maschinennahe Programmierung I abhängig von der aktuellen Architektur I keine Schleifen / Strukturen wie etwa in C I Kenntnis des Prozessors wichtig I manueller Zugriff auf einzelne Register I Beispiel "Hello World" 1.data 2 out:.asciiz "Hallo Welt" 3 # die Zeichenkette zum Ausgeben (als Label) 5.text 6 main: li $v0, 7 # Befehl ( print_string ) in Register schreiben 8 9 la $a0, out # Argument für den Systemaufruf in das 11 # Argumentregister schreiben 12 13 syscall 1 # Ausführung der Systemfunktion (Ausgabe) 15 16 li $v0, 17 # Befehl ( exit ) in Register schreiben 18 19 syscall 20 # Ausführung der Systemfunktion (Programmende) Strukturierte Programmierung I Im Laufe der Zeit wurden Programme größer I mehr Leute mussten programmieren I manuelle Registerzuweisung zu aufwändig I leicht verständliche Sprachen nötig Programmierer konzentriert sich auf Problem nicht auf technischen Hintergrund I Strukturen wurden wichtig Programme müssen lesbarer werden einfache Schleifen / Verzweigungen I Beispiel: BASIC 5 Strukturierte Programmierung I Beispiel in BASIC 1 INPUT "What is your name: ", U$ 2 20 PRINT "Hello "; U$ 3 30 INPUT "How many stars do you want: ", N 0 S$ = "" 5 50 FOR I = 1 TO N 6 60 S$ = S$ + "*" 7 70 NEXT I 8 80 PRINT S$ 9 90 INPUT "Do you want more stars? ", A$ 0 IF LEN(A$) = 0 THEN GOTO 90 11 1 A$ = LEFT$(A$, 1) 12 120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30 13 130 PRINT "Goodbye "; U$ 1 END I Ausgabe: What is your name: Mike Hello Mike How many stars do you want: 7 ******* Do you want more stars? yes How many stars do you want: 3 *** Do you want more stars? no Goodbye Mike Prozedurale Programmierung I Probleme werden komplexer Programme werden länger I Ideen: Wartebarkeit, Wiederverwendbarkeit einzelne Komponenten auslagern einzeln testen später zusammenfügen verwende Blöcke I Beispiele: Fortran, COBOL, C, Pascal 6 7

Prozuderale Programmierung I Beispiel in PASCAL 1 program stars; 2 3 procedure plotstars(amount : integer); var 5 i : integer; 6 begin 7 for i := 1 to amount do write( * ); 8 writeln( ); 9 end; 11 var 12 amount : integer; 13 answer : char; 1 begin 15 repeat 16 writeln( how many stars do you want? ); 17 readln(amount); 18 plotstars(amount); 19 writeln( do you want more stars? (y/n) ); 20 readln(answer); 21 until answer <> y ; 22 end. I Ausgabe: how many stars do you want? 12 ************ do you want more stars? (n) n Modulare Programmierung I verbinde kleinere Programmteile zu Modulen Daten werden gebündelt weitere Erhöhung der Übersichtlichkeit I Erhöhung der Wiederverwendbarkeit benutze alles wieder soweit es geht verringert Fehlerquellen spart Arbeit I Beispiele: Modula-2, Oberon, Ada, (C) I Beispiel: Struktur Shape 1 #include <stdio.h> 2 3 typedef struct _Shape_ { 5 // type 1 = line, type 2 = square 6 int type; 7 int size; 8 } Shape; 8 9 Modulare Programmierung 1 void plotshape(shape s) 2 { 3 int i, j; if (s.type == 1) 5 { 6 for (i = 1; i <= s.size; i++) 7 {printf("*");} 8 printf("\n"); 9 } else 11 { 12 for (i = 1; i <= s.size; i++) 13 { 1 for (j = 1; j <= s.size; j++) 15 {printf("*");} 16 printf("\n"); 17 }}} 18 19 int main (int argc, const char * argv[]) 20 { 21 Shape myshape, myshape2; 22 myshape.type = 1; 23 myshape.size = 3; 2 myshape2.type = 2; 25 myshape2.size = ; 26 27 plotshape(myshape); 28 plotshape(myshape2); 29 } Objektorientierte Programmierung I Problem: einfache Module zu unflexibel lässt sich nicht auf beliebige Formen anwenden was passiert bei Rechtecken (zwei Größen)? I Daten lassen sich schlecht mit Funktionen kapseln Software schlecht zu warten I Idee: Gemeinsamkeiten nur einmal programmieren nur Unterschiede abwandeln I Vererbung I Klassenhierarchie I Kapsle Daten mit Funktionen I Beispiele: C++, Java I Ausgabe: *** **** **** **** **** 11

Objektorientierte Programmierung Generische Programmierung I stellen eine Weiterentwicklung der OO dar I Algorithmen für allgemeine Datentypen parametrische Polymorphie I Code möglichst allgemein generieren I im Anwendungsfall konkretisieren I z.b.: Sortieralgorithmen nicht nur für Zahlen, Strings I Beispiele: C++, Java I alle Typen können auf plot zugreifen Rechteck sind nur mehrere Linien... 12 13 Deklarative Programmierung Klassifikation von Programmiersprachen I Beschreibung des Problems steht im Vordergrund I Lösungsweg wir automatisch ermittelt I es geht darum was gelöst werden soll I das wie ist nicht so relevant I verwendet hauptsächlich Rekursion funktionale Sprachen I keine Anweisungen, nur Ausdrücke I Beispiele: LISP, ProLog, SQL, Haskell quicksort [] = [] quicksort (x:xs) = quicksort [n n<-xs, n<x] ++ [x] ++ quicksort [n n<-xs, n>=x] 1 15

sonstige Unterschiede zwischen Programmiersprachen I Compiler / Interpreter wann wird Code übersetzt / ausgeführt auch Mischung möglich I Plattformunabhängigkeit Internetanwendungen I Verbreitung der Sprache gibt es Bibliotheken / support / Foren I Ziele der Sprache warum wurde die Sprache entwickelt? (universell / speziell / Lernzwecke) I jede Sprache hat Vor- und Nachteile I es gibt für jede Sprache sinnvolle Probleme I beliebige Programme immer möglich aber: Starcraft II, Photoshop in Assembler? Treiber in Java? Hello World in Brainfuck I Ziel: Turing-vollständige PS mit kleinem Compiler I kompletter Befehlssatz enthält 8 Befehle I 9 Compiler mit 98 Bytes (MS-DOS) 1 ++++++++++ 2 [ Vorbereitende Schleife 3 >+++++++>++++++++++>+++>+<<<<- ] 5 >++. Ausgabe von H 6 >+. Ausgabe von e 7 +++++++. l 8. l 9 +++. o >++. Leerzeichen 11 <<+++++++++++++++. W 12 >. o 13 +++. r 1 ------. l 15 --------. d 16 >+.! 17 >. Zeilenvorschub 18 +++. Wagenrücklauf 16 17 Good to know Was ist C++ I Eine Weiterentwicklung von C I Verwendung neuer Programmierparadigmen I Erlaubt völlig neue Lösungswege I Erlaubt problemnahe Programmierung I Ziele beim Entwickeln der Sprache Kompatibilität ) keine Änderung der Syntax Vielseitige Einsetzbarkeit (Eigene Datentypen können entworfen werden) Verwaltungsaufwand minimieren Strukturierung erleichtern Strenge Typisierung (erleichtert Fehlerfindung) Stärkere Zugriffskontrolle I C++ ist eine höhere Programmiersprache I Entwicklung ab 1979 bei AT&T Entwickler: Bjarne Stroustrup I Erweiterung von C Einführung eines Klassenkonzeptes (C with classes) bessere Wiederverwendbarkeit bessere Wartbarkeit Abwärtskompatibel (zu C) ) keine Syntaxkorrektur I Heute: voll objektorientiert ISO genormt I Inspiration für andere Sprachen C#, Java I Compiler: g++, gpp frei verfügbar Microsoft Visual C++ Compiler Borland C++ Compiler 18 19

Was kann mir helfen? I Endlose Anzahl an Büchern Die C++ Programmiersprache Jetzt lerne ich C++ C++ in 21 Tagen C++ für C Programmierer I Online Tutorien einfach googlen I C++ API C++ Befehlsreferenz http://en.cppreference.com/w/cpp I Entwicklungsumgebungen I engl. Integrated Development Environment (IDE) Erleichtern das Programmieren selbst farbliches Hervorheben automatisches Einrücken automatische Codeergänzung code folding debugger Einige C++ IDEs I Netbeans (frei verfügbar) http://www.netbeans.org/ I Eclipse (frei verfügbar) http://www.eclipse.org I Microsoft Visual Studio (sauteuer) I Microsoft Visual Studio Express (frei) http://www.microsoft.com/germany/express/ I Xcode (frei für Mac OS) App Store ;) I können mehr als nur C++ I werden in der Übung angeschaut 20 21 Hello World 1 # include <iostream> 2 3 int main() { 5 std::cout << "Hello World!\n"; 6 return 0; 7 } Standardbibliothek I Ausgaben I Eingaben I Strings I Container I Speichern unter helloworld.cpp I Standardbibliothek für Ein- und Ausgabe in C++ heißt iostream I cout ist der Standard-Ausgabestream kann unterschiedliche Datentypen übernehmen I Notation :: deklariert den Namensbereich I Operator «übergibt sein zweites Argument an den Ausgabestream I main hat Rückgabewert int 1 # include <iostream> 2 using namespace std; 3 int main() 5 { 6 cout << "Hello World!\n"; 7 } I Ausgabe: Hello World! I mehr zu namespaces später 22 23

Datentyp string 1/2 3 using namespace std; 5 int main() { 6 string str1 = "Hallo"; 7 string str2 = "Welt"; 8 string str3 = str1 + " " + str2; 9 cout << str3 + "!\n"; 11 str3.replace(6,, "Peter"); 12 cout << str3 + "!\n"; 13 } I Ausgabe: Hallo Welt! Hallo Peter! I Strings sind mächtiger als char* I liefert eine Reihe nützlicher Operationen + zur Konkatenation replace zum ersetzen von Teilstrings substr zum auslesen von Teilstrings length zum auslesen der Länge u.v.m. I Datentypen können Methoden haben Prinzip der Datenkapselung Sie enthalten mehr als nur die Zeichen (Unterschied zu C) Datentyp string 2/2 3 #include <stdio.h> using namespace std; 5 6 int main() { 7 string str1 = "Hallo"; 8 string str2 = "Welt"; 9 string str3 = str1 + " " + str2; 11 printf("%s\n", str3.c_str()); 12 cout << str3 + "\n"; 13 } I Ausgabe: Hallo Welt Hallo Welt I Inhalt mittels c str() erreichbar Das sind die bekannten char-arrays aus C Zugriff über name.c str() können mittels printf ausgegeben werden I Wichtig: string 6= char-array 2 25 Eingaben Datentyp bool I in C gibt es keinen logischen Datentyp I Abhilfe schafft Interpretation 0 = false 1 = true I das könnte so aussehen: #define false 0 #define true 1 typedef int bool; I könnte aber auch mit Abfragen gelöst werden I C++ enthält logischen Datentyp bool Werte true und false I implizite Konversion arithmetischer Typen 0 entspricht false alles andere entspricht true 3 using namespace std; 5 int main() 6 { 7 string str; 8 cout << "Geben Sie Ihren Namen ein\n"; 9 cin >> str; cout << "Hallo " << str << "!\n"; 11 } I Eingabe: Praetorius Ausgabe: Hallo Praetorius! I Eingabe: Dirk Praetorius Ausgabe: Hallo Dirk! I Verwende getline für ganze Zeile 3 using namespace std; 5 int main() 6 { 7 string str; 8 cout << "Geben Sie Ihren Namen ein\n"; 9 getline(cin, str); cout << "Hallo, " << str << "!\n"; 11 } I Eingabe: Dirk Praetorius Ausgabe: Hallo, Dirk Praetorius! 26 27

Vektoren 1/3 Vektoren I Verwendung als dynamische Arrays I ohne alloc, malloc I sind Container für beliebige Datentypen (mehr dazu später) 3 using namespace std; 5 struct Eintrag { 6 string name; 7 int nummer; 8 }; 9 int main() 11 { 12 Eintrag telbuch[3]; 13 telbuch[0].name = "Peter Pan"; 1 telbuch[1].name = "Wolverine"; 15 telbuch[2].name = "Angela Merkel"; 16 cout << telbuch[2].name + "\n"; 17 } I Ausgabe: Angela Merkel I Verwendung sinnvoll falls Größe bekannt I Problem: Speicher nicht dynamisch erweiterbar Lösung in C: Pointer, malloc, realloc sehr mühsam und unübersichtlich I Lösung in C++: Vektoren 28 29 Vektoren 2/3 3 #include <vector> using namespace std; 5 6 struct Eintrag { 7 string name; 8 int nummer; 9 }; 11 int main() 12 { 13 vector<eintrag> telbuch(3); 1 telbuch[0].name = "Peter Pan"; 15 telbuch[1].name = "Wolverine"; 16 telbuch[2].name = "Angela Merkel"; 17 cout << telbuch[2].name + "\n"; 18 } I Ausgabe: Angela Merkel I Vektoren sind C++ Standardcontainer können beliebige Datentypen übernehmen dienen zum Verwalten von Datenmengen I Verwendung: vector<type> name(size); Achtung, nicht verwechseln: vector<eintrag> buch(00); 00 Elemente vector<eintrag> buecher[00]; 00 Vektoren Vektoren 3/3 3 #include <vector> using namespace std; 5 6 struct Eintrag { 7 string name; 8 int nummer; 9 }; 11 int main() 12 { 13 vector<eintrag> telbuch(3); 1 telbuch[0].name = "Peter Pan"; 15 cout << "size: " << telbuch.size() << endl; 16 telbuch.resize(telbuch.size()+); 17 cout << "size: " << telbuch.size() << endl; 18 } I Ausgabe: size: 3 size: 7 I Speicher dynamisch veränderbar mittels resize I Viele hilfreiche Funktionen: size push back, pop back insert front, back uvm. I endl bewerkstelligt Zeilenumbruch 30 31

weitere Standardcontainer I list I queue I stack I deque I set I priority queue I set I multiset I map Ratschläge und Unterschiede zu C I Bibliotheken verwenden API verwenden I Standardbibliothek eher als andere I string anstelle von char* I vector<t> anstelle von T[] I cout anstelle von printf I Std. Bibliothek verwendet den Namensbereich std I multimap 32 33