AlDaBi Prak+kum WS 14/15 René Rahn



Ähnliche Dokumente
AlDaBi Praktikum WS 15/16 Hannes Hauswedell, Johannes Röhr, Jongkyu Kim

1. SVN, C++ und STL AlDaBi Praktikum

AlDaBi Praktikum WS 13/14 Sascha Meiers

1. SVN und STL AlDaBi Prak5kum

1. Übung zu "Numerik partieller Differentialgleichungen"

Praktikum Ingenieurinformatik (PI)

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

Einführung in die Programmierung

Versionsverwaltung mit SVN

Objektorientierte Programmierung mit C++ Vector und List

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

FS cs108 Programmierpraktikum Subversion. Lukas Beck Cedric Geissmann Alexander Stiemer

Vorkurs C++ Programmierung

Mercurial. or how I learned to stop worrying and love the merge. Ted Naleid IAIK

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

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

Versionsverwaltung GIT & SVN. Alexander aus der Fünten. Proseminar: Methoden und Werkzeuge, SS Lehrstuhl i9, Prof. Dr. T.

Sourcecodeverwaltung

Einführung in Subversion

Torsten Flatter inovex GmbH. "Git.NET" gibt's nicht?

Apache Subversion (SVN)

Zählen von Objekten einer bestimmten Klasse

Versionsverwaltung für die KU Betriebssysteme. Eine Einführung

C A R L V O N O S S I E T Z K Y. Boost C++ Libraries. Johannes Diemke. Department of Computer Science Learning and Cognitive Systems

Informatik 1 Tutorial

Grundlagen. Kapitel 1

4D Server v12 64-bit Version BETA VERSION

Informatik I Tutorial

Datensicherung und Wiederherstellung

DLLs (dynamic loaded libraries) mit MingW erstellen

Die Projek*ools. Files, Git, Tickets & Time

Whitepaper. Produkt: combit Relationship Manager / address manager. Dateiabgleich im Netzwerk über Offlinedateien

Von SVN zu Git. Daniel Willmann cbna

Versionsverwaltung mit Mercurial für Einsteiger

Software Engineering in der Praxis

Grundlagen von Python

HSR git und subversion HowTo

Software-Engineering Grundlagen des Software-Engineering 7.3 Sourcecode-Verwaltung mit Versionsmanagement-Systemen Einführung in Subversion (SVN)

Versionskontrolle mit Subversion

Inhaltsverzeichnis. 1 Einleitung. Literatur. 1.1 CVS (Concurrent Version System) [Pru03, Zee02, Ced05]

Einführung in die Programmierung (EPR)

git & git-flow Jens Sandmann Warpzone Münster e.v. Jens Sandmann (WZ) git & git-flow / 31

Anleitung für den Zugriff auf Mitgliederdateien der AG-KiM

Einführung in Git. Dirk Deimeke. 19. August My own IT. ddeimeke (My own IT) Einführung in Git 19. August / 23

WinCVS Version 1.3. Voraussetzung. Frank Grimm Mario Rasser

Verteilte Versionskontrolle mit GIT Dortmund Ansgar Brauner - GreenPocket GmbH - Köln

Übungen zu C++ Kapitel 1

Einführung in die Programmierung Laborübung bei Korcan Y. Kirkici. 12.Übung bis

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

Wenn keine Verbindung zwischen den Computern besteht, dann bist du offline.

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

Programmierkurs Java

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Alltagsnotizen eines Softwareentwicklers

SVN-Einführung für das SEP DS und CM. Julian Timpner, Stefan Brenner, Stephan Rottmann

Übung - Datenmigration in Windows XP

Moodle aktuell halten mit Git

Konfigurationsdateien mit Git verwalten

Dr. Monika Meiler. Inhalt

Datensicherung EBV für Mehrplatz Installationen

Tevalo Handbuch v 1.1 vom

Stand: Adressnummern ändern Modulbeschreibung

MailUtilities: Remote Deployment - Einführung

Einfu hrung in Subversion mit TortoiseSVN

PVL 3 - Roulette. (5 Punkte) Abgabe bis

Einführung in die Java- Programmierung

Version 0.3. Installation von MinGW und Eclipse CDT

Programmierung in C. Grundlagen. Stefan Kallerhoff

Luis Kornblueh. May 22, 2014

Einführung in PHP. (mit Aufgaben)

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Deployment Deployment Seite 1 / 25

OPERATIONEN AUF EINER DATENBANK

Algorithmen mit Python

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

1 Was ist das Mediencenter?

Novell Client. Anleitung. zur Verfügung gestellt durch: ZID Dezentrale Systeme. Februar ZID Dezentrale Systeme

3. Stored Procedures und PL/SQL

Anwendungsbeispiele Buchhaltung

SharePoint Workspace 2010 Installieren & Konfigurieren

Leichte-Sprache-Bilder

Übung 9 - Lösungsvorschlag

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

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

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Tutorial -

Informatik Grundlagen, WS04, Seminar 13

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

MAPS.ME. Benutzerhandbuch!

Objektorientierte Programmierung für Anfänger am Beispiel PHP

IT-Basics 2. DI Gerhard Fließ

Multisite Setup. mit Nutzung von Subversion. Drupal Voice Chat

Die Programmiersprache C99: Zusammenfassung

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Einführung in die Informatik Tools

1. License Borrowing Verfahren

Process4.biz Release Features Übersicht. Repository. Das Schützen von Diagrammen wurde optimiert (check-in, check-out)

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

Transkript:

AlDaBi Prak+kum WS 14/15 René Rahn Basierend auf Ausarbeitung von David Weese 2010/11

Prak;kum h"p://www.mi.fu- berlin.de/w/abi/aldabiws14prak>kum

Abgabe der Lösungen Abgabe per Subversion: Heute kurze Einführung in SVN. jede Gruppe erhält ein SVN- Verzeichnis hpps://svn.imp.fu- berlin.de/aldabi/ws14/groupx die Lösung jeder Aufgabe muss als Datei mit dem Titel aufgabey.cpp (Kleinschreibung beachten, keine Unterordner!) bis zum Abgabetermin eingecheckt werden ihr Programm muss u.a. auf einem Linux- Poolrechner kompilieren mit g++ - pedan+c - Wall ansi - O3 - o aufgabey aufgabey.cpp beachten Sie genau die Hinweise zum jeweiligen Ein- und Ausgabeformat auf den AufgabenbläPern und auf den Wiki- Seiten

Literatur C++ für Einsteiger Der C++ Programmierer, Breymann, Hanser Verlag Einführung in die Programmierung mit C++, Stroustrup, Pearson St. C++ für FortgeschriPene C++ Templates, Vandevoorde und Josuas, Addison- Wesley Essen>al C++, Lippman, Addison- Wesley Moderne C++ Programmierung, Schneeweiß, Springer STL Effec>ve STL, Meyers, Addison- Wesley Generic Programming and the STL, Austern, Addison- Wesley Algorithmen Algorithmen in C++, Sedgewick, Pearson Studium Algorithmen und Datenstrukturen, Pomberger und Dobler, Pearson Studium

Web www.cplusplus.com C++ für Einsteiger Häufige Fragen hpp://www.parashih.com/c++- faq- lite/ Tutorials hpp://code.google.com/intl/de- DE/edu/languages/cpp/basics/ hpp://www.mi.fu- berlin.de/en/groups/abi/lectures_past/ss2010/k_cpp_advanced/ Referenzen hpp://www.cppreference.com/ hpp://www.sgi.com/tech/stl/ hpp://gcc.gnu.org/onlinedocs/gcc- 4.2.2/gcc/ hpp://msdn.microsoh.com/en- us/library/ms864102 C++ für FortgeschriPene Diverse spezifische Ar;kel hpp://www.gotw.ca/publica;ons/index.htm Forum für Entwickler hpp://stackoverflow.com/

Heute SVN, C++ und STL AlDaBi Prak+kum

Subversion (SVN)

Kollabora;on... Bei großen Projekten treten folgende Probleme auf: Wie koordiniert und synchronisiert man Code zwischen verschiedenen Entwicklern? Wie sichert man Code gegen versehentliches Löschen oder archiviert alte Stände? Per Mail? Dateien online ablegen? Auf Netzlaufwerken arbeiten? Besser: Source Code Management Tool (SCM) bspw.: CVS Subversion Bazaar Mercurial Git

... mit einem SCM SCM besteht aus: Repository Code gespeichert auf zentralem Server oder verteilt bei Usern Working Copy Entwickler checkt eine Kopie des Repositories auf seinem Computer aus Revision History jede Änderung einer Datei wird gespeichert kann auch wieder rückgängig gemacht werden Conflict Handling Was passiert wenn zwei Entwickler dieselbe Datei verändern?... in der selben Zeile?

Zentralisierter Workflow Repository checkout Karl s Working copy Karla s Working copy Karlo s Working Copy Illustra;on: hpps://www.atlassian.com/de/git/workflows#!workflow- centralized

Wann kann ich commipen? Revison: 25 commit commit? Karl Karla Revision: 24 Illustra;on: hpps://www.atlassian.com/de/git/workflows#!workflow- centralized

Update Working Copy Revision: 25 update Eventuell Konflikte: Löse Konflikte manuell in den komprimierten Dateien Karla Revision: 25 Illustra;on: hpps://www.atlassian.com/de/git/workflows#!workflow- centralized

Nach Konfliktlösung Revision: 26 commit Karla Revision: 26 Illustra;on: hpps://www.atlassian.com/de/git/workflows#!workflow- centralized

Diffs und Patches Zwischen Repository und Working Copies werden nur Datei- Differenzen (diffs) hin- und hergeschickt Differenzen (patches) zweier Dateien liefert das Tool diff diff u Datei1 Datei2 > MeinBugFix Anwenden kann man diese mit patch patch p0 < MeinBugFix

Subversion - SVN Kommandos für Kommunika;on mit dem Server (Linux): svn checkout <URL> [<dir name>] svn update svn commit Offline Kommandos: svn add <Datei> svn delete <Datei> svn stat svn diff svn rename svn help <Kommando> Tor;oseSVN (Windows Client) hpp://tortoisesvn.net/ und Tutorial SVN Homepage - hpp://subversion.;gris.org/ und Tutorial

C++

Was ist C++? Objektorien;erter Aufsatz auf C Maschinennahe Programmiersprache STL: viele implemen;erte Datenstrukturen und Algorithmen Warum C++? Bei gutem Code effiziente und schnelle Programme möglich! essen;ell in der Bioinforma;k Viel Hilfe durch STL C++ macht Spaß :)

Wie fange ich an? vim hello_world.cpp (Linux) Life demo Kompilieren der hello_world.cpp Ausführen des Programms hello_world

Wer oder was ist ein Compiler? Übersetzt Quellcode in Maschinencode oder Objektcode hello_world.cpp C++ Compiler hello_world.obj Linker ostream.obj hello_world.exe Linker bindet alle zu einem Programm gehörenden Objekte in ein ausführbares Programm

Ausführen des Programmes

Hello World Was macht unser Programm eigentlich? #include <iostream> int main() { std::cout << Hello World! << std::endl; } return 0; Die STL ist dein Freund und Helfer!

Quiz Funk;oniert dieser Code? #include <iostream> int main() { std::cout << Hello World! << std::endl; } return 0;

Quiz Funk;oniert dieser Code? #include <iostream> int main() { cout << Hello World! << endl; } return 0;

Structs Eigene Datentypen definieren: struct Box { int length; } int height; double height; int main() { } Box kiste; std::cout << sizeof(kiste) << endl; return 0;

Zeiger (Pointer) Pointer sind Variablen, deren Inhalt auf andere Variablen verweist. int * pointeraufint; double * pointeraufdouble; int foo = 37; // foo enthält Wert 37 int * bar = &foo; // bar zeigt auf Adresse von foo (wo foo im Speicher steht)

STANDARD TEMPLATE LIBRARY (STL)

Warum die STL benutzen? Feld f von int der Größe n erzeugen: malloc/free (klassisches C, stdlib): int *f = (int *)malloc(sizeof(int) * n);... free(f); new/delete (C++): int *f = new int[n];... delete[] f; vector (C++, STL): std::vector<int> f(n);

Warum die STL benutzen? (II) An f eine 23 anfügen: malloc/free (klassisches C, stdlib): int *f_new = (int *)realloc(f, sizeof(int)*(n+1)); if (f_new!= NULL) f = f_new; f[n] = 23; new/delete (C++): int *f_new = new int[n+1]; for (int i = 0; i < n; ++i) f_new[i] = f[i]; delete[] f; f = f_new; f[n] = 23; vector (C++, STL): f.push_back(23);

Warum die STL benutzen? (III) Enthält Datenstrukturen (Container), die: die (fehlerprovozierende) Verwaltung des Speichers abnehmen Speicherfreigabe vergessen delete stap delete[] verwendet doppelte Speicherfreigabe auch kompliziertere Klassen speichern können malloc, realloc, free (C) konstruiert/destruiert Objekte nicht generisch sind (templates) ElemenPyp ist template- Parameter Vergleichsoperator von sor;erten Containern lässt sich frei definieren effizient implemen;ert sind Container- Funk;onen haben Laufzeitgaran;en

Die Standard Library Überblick Überblick: Die Header- Dateien C++ Library Header Files C Library Header Files

STL = Standard Template Library Programmbibliothek: Datenstrukturen & Algorithmen. Generisch : - Formuliert über Concepts - Hochgradige Typisierung (über Template- Argumente) - Container und Algorithmen sind voneinander entkoppelt

Quiz: Wo ist der Unterschied? Frage: Was unterscheidet folgende Ausdrücke voneinander? (obj sei ein Containerobjekt) if ( obj.size() == 0 )... if ( obj.empty() )...

PaPern Matching Beispiel Gegeben langer Text und kürzeres PaPern: text: This is an awesome tutorial to get to know some C++! pattern: some Berechne die Anzahl gleicher Zeichen zwischen Text und PaPern an jeder Stelle des Textes: score: 000......400.....01001.....400... text: This is an awesome tutorial to get to know some C++! pattern: some some some some some some some some some some some some............

#include <iostream> PaPern Matching Beispiel #include <string> #include <vector> int main() { // Initialisierung std::string text = "This is an awesome tutorial to get to know some C++!"; } std::string pattern = "some"; std::vector<int> score(text.length()); // Berechnung von Ähnlichkeit // Iteration über den Text (outer loop) for (unsigned i = 0; i < (text.length() pattern.length() + 1); ++i) { int localscore = 0; // Iteration über das Pattern (inner loop) } for (unsigned j = 0; j < pattern.length(); ++j) { // Zeichenvergleich und Scoreberechnung if (text[i + j] == pattern[j]) ++localscore; } // Speichern des localscore im Vector score score[i] = localscore; // Ergebnisausgabe for (unsigned i = 0; i < score.size(); ++i) std::cout << score[i]; return 0;

PaPern Matching Beispiel #include <iostream> #include <string> #include <vector> int main() { } // Initialisierung std::string text = "This is an awesome tutorial to get to know some C++!"; std::string pattern = "some"; std::vector<int> score(text.length()); // Computation of the similarities

PaPern Matching Beispiel int main() { // Computation of the similarities // Iteration über den Text (outer loop) for (unsigned i = 0; } i < (text.length() pattern.length() + 1); ++i) { int localscore = 0; // Iteration über das Pattern (inner loop) for (unsigned j = 0; j < pattern.length(); ++j) { // Zeichenvergleich und Scoreberechnung } if (text[i + j] == pattern[j]) ++localscore; // Speichern des localscore im Vector score score[i] = localscore;

PaPern Matching Beispiel int main() { } // Ergebnisausgabe for (unsigned i = 0; i < score.size(); ++i) std::cout << score[i]; return 0;

#include <iostream> PaPern Matching Beispiel #include <string> #include <vector> // Iteration über das Pattern (inner loop) int computelocalscore(std::string const & text, std::string const & pattern, int const & textpos) {...} // Iteration über den Text (outer loop) std::vector<int> computescore(std::string const & text, std::string const & pattern){...} int main() { // Initialisierung std::string text = "This is an awesome tutorial to get to know some C++!"; } std::string pattern = "some"; // Computation of the similarities std::vector<int> score = computescore(text, pattern); // Ergebnisausgabe for (unsigned i = 0; i < score.size(); ++i) std::cout << score[i]; std::cout << std::endl; return 0;

Iteratoren Iteratoren = verallgemeinerter Pointer vector<char> vec(50); vector<char>::iterator anfang = vec.begin(); vector<char>::iterator ende = vec.end(); cout << ende - anfang; //Ausgabe: 50

Warum Iteratoren benutzen? summiere alle Elemente von Feld f int sum = 0; for (int i = 0; i < n; ++i) sum += f[i]; wird vom Compiler genauso übersetzt wie: int sum = 0; for (int i = 0; i < n; ++i) sum += *(f + i); effizienter ist (ohne Op;mierung): int sum = 0; int *f_end = f + n; for (int *p = f; p < f_end; ++p) sum += *p;

Warum Iteratoren benutzen? (II) Warum sorgen, wenn der Compiler op;miert? die Op;mierung funk;oniert nur bis zu einer gewissen Komplexität Was passiert, wenn f eine verkettete Liste ist? f[i] hat dann eine Laufzeit von O(i) die ganze Schleife hat dann also O(n 2 ) Laufzeit std::list<int> f(n); for (int i = 0; i < n; ++i) sum += f[i]; Iteratoren sind optimal für sequentielle Zugriffe Schleife mit Iteratoren hat O(n) Laufzeit std::list<int> f(n); std::list<int>::iterator i = f.begin(); std::list<int>::iterator i_end = f.end(); for (; i!= i_end; ++i) sum += *i;

Iteratoren (II) Mit Iteratoren kann man durch Container traversieren. template<typename TIn, typename TOut> inline TOut copy(tin first, TIn last, TOut dest) { while ( first!= last ) { *dest = *first; ++dest; ++first; } return (dest); }

Quiz: Was läuh hier schief? Frage: Wieso produziert dieses Programm einen Laufzei ehler? vector<int> vec1; vector<int> vec2; for (int i = 0; i < 10; ++i) vec1.push_back(i); copy(vec1.begin(), vec1.end(), vec2.begin());