Mapra: C++ Teil 7. Felix Gruber, Michael Rom. 14. Juni 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14.

Ähnliche Dokumente
Mapra: C++ Teil 3. Felix Gruber. 29. April IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 3 29.

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16

Mapra: C++ Teil 3. Felix Gruber, Michael Rom. IGPM, RWTH Aachen. 10. Mai 2016

Mapra: C++ Teil 8. Felix Gruber, Michael Rom. IGPM, RWTH Aachen. 21. Juni 2016

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

Programmieren in C/C++ und MATLAB

Informatik I. Matthias Geel Büro: IFW A Blog:

4 Schleifen und Dateien

Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert.

Hydroinformatik I: IO - Files

For matierte Ein-/Ausgabe iostream: multiple inheritance von istream und ostream Weitere abgeleitete Klassen (z. B. Ausgabe nach Strings)

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

10 Lesen und Schreiben von Dateien

ios fstream ifstream

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

Programmieren in C/C++ und MATLAB

Programmierkurs Kapitel 4: Dateien Seite 1. Verwaltungfeld im Speicher. 4.1 Alternativen zur Programmierung der Eingabe und der Ausgabe

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

Grundlagen der Informatik 6. Arrays I

Informationsverarbeitung

Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling

Programmieren in C/C++ und MATLAB

Ein- und Ausgabe mit Dateien

Ein- und Ausgabe mit Dateien

Ein- und Ausgabe in Dateien (File I/O)

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

Angewandte Mathematik und Programmierung

Hochschule Darmstadt Informatik-Praktikum SS 2017 EIT Bachelor 5. Aufgabenblatt Datenstruktur, Dateieingabe und -ausgabe

Einführung in I/O und File-Handling in C ++

Implementation VL3 Gruppe A

Vorlesungsprüfung Programmiersprache 1

9. Vektoren. (auch Felder/array)

Praktikum zur Vorlesung Einführung in die Programmierung WS 14/15 Blatt 3

Ein- und Ausgabe (I/O)

Strings. Daten aus Dateien einlesen und in Dateien speichern.

Zeiger, Arrays und Strings in C und C++

GI Vektoren

Quiz und Übungen. C++ Übung am 19. Mai 2016

Grundlagen der Informatik 2. Typen

Einführung in die Programmierung mit C++

Programmier-Befehle - Woche 10

Programmieren in C++ Stream I/O

Mapra: C++ Teil 2. Felix Gruber, Sven Groß. 2. Mai 2017 IGPM. Felix Gruber, Sven Groß (IGPM) Mapra: C++ Teil 2 2. Mai / 11

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

9 Streams. 9.1 Einführung und Architektur

C++ Wiederholung. Sven Groß. 24. Juni Sven Groß (IGPM, RWTH Aachen) C++ Wiederholung 24. Juni / 90

7.1 Motivation. Tastatureingabe. Inhalt von input.txt. Bildschirmausgabe. Inhalt von output.txt. i =33 j = 44

Informatik II Datenstrukturen und Algorithmen in C/C++ Nachtrag

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen.

Einführung in die Programmierung (EPR)

Elementare Datentypen in C++

Grundzüge der objektorientierten Programmierung

Mapra: C++ Teil 5. Felix Gruber, Sven Groß. 16. Mai IGPM, RWTH Aachen. Felix Gruber, Sven Groß (IGPM) Mapra: C++ Teil 5 16.

Übersicht Shell-Scripten

Von C zu C++ Karl Gmeiner

C++ - Einführung in die Programmiersprache Ein- und Ausgabe in die Konsole. Leibniz Universität IT Services Anja Aue

Arrays (Felder/Vektoren)

Institut für Geometrie und Praktische Mathematik Mathematisches Praktikum (MaPra) Sommersemester Aufgabe 4

Kurzeinführung in C++

Variablen, Konstanten und Datentypen

Importdatei LN mit Excel erstellen und bearbeiten

Kapitel 8: Abstrakte Datentypen. Inhalt. Definition ADT Keller ADT Schlange

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

10.9 Benutzerdefinierte Eingabeoperatoren

Praxis der Programmierung

Input, Output, Dateien

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

Einführung in die Programmierung für Computerlinguisten

Hochschule München, FK 03 SS Masterstudiengang Technische Berechnung und Simulation. Programmierung von CAx-Systemen Teil 1

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

4 ZEICHEN UND ZEICHENKETTEN

Annehmende Schleife do while

Einführung in die Praktische Informatik. Übungsblatt 10. Dr. U. Köthe Heidelberg, 11. Januar 2017

Anwendung höherer Programmiersprachen. Formatierte Ausgabe mit cout. Angewandte Informatik I C / C++ Teil B: Formatierte Ein- und Ausgabe

Unterschiede in Dateien mit diff

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

C++ für Ingenieure. Einführung in die objektorientierte Programmierung 4 Objektorientierte Programmierung. 4.8 Streams und Dateien HARALD NAHRSTEDT

Ein- und Ausgabe. C - Kurs Mario Bodemann. 15. September 2010

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

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

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Herzlich willkommen!

Programmiersprachen Einführung in C

In der Computersprache C ist die Standardmethode zur Behandlung von Matrizen durch

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

Inhalte. Einführung. Algorithmus, Programmiersprache, Compiler und Linker. Kontrollstrukturen. Präprozessoranweisungen. Libraries

E-/A-Funktionalität nicht Teil der Programmiersprache

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 5. Blatt Für den 26. und

Shell. Oder Konsole suchen im Application Finder. Auch Terminal, Bash oder Kommandozeile genannt. Bash nimmt Befehle entgegen und führt diese aus

PIWIN 1 Übung Blatt 5

Importdatei Grobkoordinaten mit Excel erstellen und bearbeiten

Klausur Programmieren 2 WS2016/17

File I/O. Persistieren von Daten. Gastvorlesung Ralph Erdt erdt (bei) informatik.fh-wiesbaden.de

Grundlegende Anweisungen in C++

Programmieren für Physiker: C++ SS 2016

Auswahlen (Selektionen)

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Transkript:

Mapra: C++ Teil 7 Felix Gruber, Michael Rom IGPM 14. Juni 2016 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 1 / 20

Themen vom letzten Mal Klassen this-pointer Virtuelle Methoden Bildbearbeitung Bildklasse GreyScale ASCII-PGM-Format Pixelweise Operatoren zur Bildverarbeitung Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 2 / 20

Heutige Themen 1 Ein-/Ausgabe über Dateien File Streams Beispiel mit Matrixklasse Byteweises Einlesen von Dateien 2 Lokale Operatoren zur Bildverarbeitung Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 3 / 20

File Streams: Ein-/ Ausgabe über Dateien Zuerst header-datei für file streams einbinden #include <fstream> Öffnen des file streams zur Ein- bzw. Ausgabe ifstream ifs ; ifs. open ( " mydata. txt " ); ofstream ofs ( " results. dat " ); gewohnte Verwendung von Ein- und Ausgabeoperator (wie mit cin und cout) ifs >> a; ofs << " Das Ergebnis lautet " << f( x ) << ".\n"; Schließen des file streams nach Verwendung ifs.close(); ofs.close(); Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 4 / 20

Einlesen Eingabeoperator >> erwartet, dass Daten durch Whitespace getrennt sind (Leerzeichen, Tabulator, Zeilenumbruch) Abfrage des Stream-Status: ifs.good() : Stream bereit zum Lesen ifs.eof( ) : Ende der Datei (end of file) erreicht ifs.fail() : letzte Leseoperation nicht erfolgreich ifs.clear(): setzt Status zurück, ermöglicht weiteres Lesen Leseoperation >> wird nur bei good-status durchgeführt Beispiel: ifstream ifs ( " input. txt " ); double d; int i; string s; Datei input.txt: 17.5 4711 Hallo ifs >> d >> i; // good ifs >> i; // fail ifs. clear (); // good ifs >> s; // good ifs >> s; // fail eof Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 5 / 20

Beispiel mit Matrixklasse Wir können ein Dateiformat für unsere Matrixklasse anlegen, um Matrizen zu speichern. In der Datei A.mat wird die Matrix A = folgendermaßen gespeichert: Datei A.mat: 5 5 1 0 0 0-1 0 1 0 0-1 0 0 1 0-1 0 0 0 1-1 -1-1 -1-1 -1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 0 1 1 1 1 1 1 1 R 5 5 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 6 / 20

Beispiel mit Matrixklasse Einlesen der Matrix A aus der Datei A.mat: ifstream ifs ( "A. mat " ); int zeilen, spalten ; ifs >> zeilen ; ifs >> spalten ; Matrix A( zeilen, spalten ); for ( int i = 0; i < zeilen ; ++ i ) for ( int j = 0; j < spalten ; ++ j ) ifs >> A( i, j ); Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 7 / 20

Beispiel mit Matrixklasse Auslesen der Matrix B = A A in die Datei B.mat: ofstream ofs ( "B. mat " ); ofs << B. Zeilen () << endl ; ofs << B. Spalten () << endl ; for ( int i = 0; i < B. Zeilen (); ++ i ) { for ( int j = 0; j < B. Spalten (); ++ j ) ofs << B( i, j ) << " "; ofs << endl ; } Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 8 / 20

Beispiel mit Matrixklasse Auslesen der Matrix B = A A in die Datei B.mat: ofstream ofs ( "B. mat " ); ofs << B. Zeilen () << endl ; ofs << B. Spalten () << endl ; for ( int i = 0; i < B. Zeilen (); ++ i ) { for ( int j = 0; j < B. Spalten (); ++ j ) ofs << B( i, j ) << " "; ofs << endl ; } Datei B.mat: 5 5 2 1 1 1 0 1 2 1 1 0 1 1 2 1 0 1 1 1 2 0 0 0 0 0 5 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 8 / 20

Funktionen zum Einlesen von Dateien Wir betrachten verschiedene Möglichkeiten für das Einlesen der Datei test.txt: 753 1706 1789 999 2013 2014 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 9 / 20

Funktionen zum Einlesen von Dateien Wir betrachten verschiedene Möglichkeiten für das Einlesen der Datei test.txt: 753 1706 1789 999 2013 2014 Hier werden whitespaces (Leerzeichen, Umbrüche,...) als Trenner der Integers 753, 1706, 1789,... interpretiert: ifstream Istr ( " test. txt " ); int n; Istr >> n; cout << n << endl ; // 753 Istr >> n; cout << n << endl ; // 1706 Istr >> n; cout << n << endl ; // 1789 Istr >> n; cout << n << endl ; // 999 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 9 / 20

Funktionen zum Einlesen von Dateien Wir betrachten verschiedene Möglichkeiten für das Einlesen der Datei test.txt: 753 1706 1789 999 2013 2014 Die Funktion get() liest den nächsten character ein. Auch Leerzeichen (32), Umbrüche (10),... sind character! ifstream Istr ( " test. txt " ); int n; n = Istr. get (); cout << n << endl ; // 55 ( 7 ) n = Istr. get (); cout << n << endl ; // 53 ( 5 ) n = Istr. get (); cout << n << endl ; // 51 ( 3 ) n = Istr. get (); cout << n << endl ; // 32 ( ) Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 10 / 20

Funktionen zum Einlesen von Dateien Wir betrachten verschiedene Möglichkeiten für das Einlesen der Datei test.txt: 753 1706 1789 999 2013 2014 Wenn wir char n statt int n verwenden, wird die ASCII-Repräsentation der character ausgegeben: ifstream Istr ( " test. txt " ); char n; n = Istr. get (); cout << n << endl ; // 7 n = Istr. get (); cout << n << endl ; // 5 n = Istr. get (); cout << n << endl ; // 3 n = Istr. get (); cout << n << endl ; // /* Leerzeichen */ Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 11 / 20

Funktionen zum Einlesen von Dateien Wir betrachten verschiedene Möglichkeiten für das Einlesen der Datei test.txt: 753 1706 1789 999 2013 2014 Mit >> werden ebenfalls einzelne character nach char n eingelesen, Leerzeichen/Umbrüche werden allerdings übersprungen! ifstream Istr ( " test. txt " ); char n; Istr >> n; cout << n << endl ; // 7 Istr >> n; cout << n << endl ; // 5 Istr >> n; cout << n << endl ; // 3 Istr >> n; cout << n << endl ; // 1 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 12 / 20

Funktionen zum Einlesen von Dateien Wir betrachten verschiedene Möglichkeiten für das Einlesen der Datei test.txt: 753 1706 1789 999 2013 2014 Die Funktion peek() arbeitet wie get(), entfernt das Zeichen allerdings nicht aus dem Stream. ifstream Istr ( " test. txt " ); char n; n = Istr. peek (); cout << n << endl ; // 7 n = Istr. peek (); cout << n << endl ; // 7 n = Istr. get (); cout << n << endl ; // 7 n = Istr. peek (); cout << n << endl ; // 5 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 13 / 20

Funktionen zum Einlesen von Dateien Mittels Istr >> ws werden alle whitespaces am Anfang des Streams entfernt. Als Beispiel betrachten wird die folgende Datei test.txt: 0 12 3 und lesen alle Nicht-whitespace-Zeichen aus: ifstream Istr ( " test. txt " ); string s; char ch; while (! Istr. eof () ) { Istr >> ws; // whitespace entfernen Istr >> ch; // naechsten char einlesen s += ch; // s = s + ch ( hinten anhaengen ) } cout << s << endl ; // 0123 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 14 / 20

Lokale Operatoren zur Bildverarbeitung Aus (Funktional)analysis bekannt (?): Faltungen: Eine (kontinuierliche) Funktion E(x), x R n wird mit einem Integralkern k(x) gefaltet. Man erhält so eine neue Funktion A(x): A(x) := (E k)(x) := E(x t) k(t) dt R n = E(x t) k(t) dt supp(k) Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 15 / 20

Lokale Operatoren zur Bildverarbeitung Aus (Funktional)analysis bekannt (?): Faltungen: Eine (kontinuierliche) Funktion E(x), x R n wird mit einem Integralkern k(x) gefaltet. Man erhält so eine neue Funktion A(x): A(x) := (E k)(x) := E(x t) k(t) dt R n = E(x t) k(t) dt supp(k) Für diskrete Funktionen f (x), x J Z n (z.b. Matrizen) kann das Integral als f (x) dx := f (x) J x J definiert werden (Zählmaß). Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 15 / 20

Lokale Operatoren zur Bildverarbeitung Diskrete Faltung von M E mit Faltungskern K(i, j) mit i, j = 1, 0, 1, d.h. K ist eine 3 3-Matrix: M A (x, y) := (M E K)(x, y) := M E (x + i, y + j) K(i, j), hier also supp(k) = { 1, 0, 1}. i,j { 1,0,1} Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 16 / 20

Lokale Operatoren zur Bildverarbeitung Diskrete Faltung von M E mit Faltungskern K(i, j) mit i, j = 1, 0, 1, d.h. K ist eine 3 3-Matrix: M A (x, y) := (M E K)(x, y) := M E (x + i, y + j) K(i, j), hier also supp(k) = { 1, 0, 1}. i,j { 1,0,1} Die Abbildung M E M A entspricht hier einem lokalen Bildverarbeitungsoperator: Ein Pixel des Ausgabebildes hängt i.a. nicht allein vom entsprechenden Pixel des Eingabebildes ab. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 16 / 20

Lokale Operatoren zur Bildverarbeitung Diskrete Faltung von M E mit Faltungskern K(i, j) mit i, j = 1, 0, 1, d.h. K ist eine 3 3-Matrix: M A (x, y) := (M E K)(x, y) := M E (x + i, y + j) K(i, j), hier also supp(k) = { 1, 0, 1}. i,j { 1,0,1} Die Abbildung M E M A entspricht hier einem lokalen Bildverarbeitungsoperator: Ein Pixel des Ausgabebildes hängt i.a. nicht allein vom entsprechenden Pixel des Eingabebildes ab. Beispiel Laplace-Filter: K = 0 1 0 1 4 1 0 1 0 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 16 / 20

Beispiele zur Faltung Faltungen mit Faltungskern χ [ 1/2,1/2] : http://commons.wikimedia.org/wiki/file: Convolution_of_box_signal_with_itself2.gif http://commons.wikimedia.org/wiki/file: Convolution_of_spiky_function_with_box2.gif Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 17 / 20

Beispiel: Laplace-Filter Der Laplace-Filter entspricht dem Laplace-Operator = ( 11 + 22 ): Mittels Taylorentwicklung: f (x) f (x + h) 2f (x) + f (x h) h 2 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 18 / 20

Beispiel: Laplace-Filter Der Laplace-Filter entspricht dem Laplace-Operator = ( 11 + 22 ): Mittels Taylorentwicklung: f (x) f (x + h) 2f (x) + f (x h) h 2 Im diskreten Fall (h = 1) für M E (x, y): 11 M E (x, y) := M E (x + 1, y) 2M E (x, y) + M E (x 1, y) 22 M E (x, y) := M E (x, y + 1) 2M E (x, y) + M E (x, y 1), Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 18 / 20

Beispiel: Laplace-Filter Der Laplace-Filter entspricht dem Laplace-Operator = ( 11 + 22 ): Mittels Taylorentwicklung: f (x) f (x + h) 2f (x) + f (x h) h 2 Im diskreten Fall (h = 1) für M E (x, y): 11 M E (x, y) := M E (x + 1, y) 2M E (x, y) + M E (x 1, y) 22 M E (x, y) := M E (x, y + 1) 2M E (x, y) + M E (x, y 1), d.h. M E (x, y) := ( 11 + 22 )M E (x, y) := -1 M E (x + 1, y) -1 M E (x 1, y) -1 M E (x, y + 1) -1 M E (x, y 1) +4 M E (x, y) Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 18 / 20

Beispiel: Laplace-Filter Original: Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 19 / 20

Beispiel: Laplace-Filter Laplace-Filter: Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14. Juni 2016 20 / 20