Objektorientierte Programmierung

Ähnliche Dokumente
Objektorientierte Programmierung

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

Aufgabe 16. Aufgabe 17

Praktikum Ingenieurinformatik. Termin 4. Funktionen, numerische Integration

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

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Programmieren in C/C++ und MATLAB

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

Einführung in die Programmierung Wintersemester 2016/17

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

Algorithmen und Datenstrukturen

Angewandte Mathematik und Programmierung

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2

4 Schleifen und Dateien

Kontrollstrukturen -- Schleifen und Wiederholungen

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

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik

Beispiel 1: Fakultät

Einführung in die Programmierung

Einführung in die Programmierung

Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Übungen zur Vorlesung EINI (WS 2010) Blatt 11

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

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

Kap 7. Funktionen und Arrays

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

DAP2 Praktikum Blatt 1

Wissenschaftliches Rechnen

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

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

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

Praktikum Ingenieurinformatik. Termin 6. Mehrdimensionale Felder, Kurvendarstellung mit Excel

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Nachklausur Programmieren / Algorithmen und Datenstrukturen 1

Zeiger und dynamischer Speicher

Klassenvariablen, Klassenmethoden

Objektorientierte Programmierung mit C++ SS 2007

Wiederholung C-Programmierung

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

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

Einstieg in die Informatik mit Java

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

EPROG 2.Teilprüfung. Aufgabe 1:

Informatik I (D-MAVT)

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

Klausurvorbereitung Lösung

Verwendung von Klassen in C++

Programmieren in C/C++ und MATLAB

5. Elementare Befehle und Struktogramme

FB Informatik. Fehler. Testplan

Programmierkurs C++ Lösungen zum Übungsblatt 3. Nils Eissfeldt und Jürgen Gräfe. 2. November Aufgabe 5

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

Vorlesung Objektorientierte Programmierung Klausur

Objektorientiertes Programmieren für Ingenieure

Objektorientierung Grundlagen

Ein- und Ausgabe (I/O)

Praktikum Ingenieurinformatik. Termin 5. Felder, Kurvendarstellung mit Excel

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

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

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

Kapitel 1: Einführung

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

Ein kleiner Blick auf die generische Programmierung

Grundzüge der objektorientierten Programmierung

Musterlösung zur 6. Übung

Hydroinformatik I: IO - Files

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

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

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

Grundkurs C++ IDE Klassenhierarchien

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

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

Grundkurs C++ IDE Klassenhierarchien

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

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Hochschule Darmstadt Informatik-Praktikum WS 2016/2017 WIng Bachelor 4. Aufgabenblatt Modularisierung, Funktionen, Unterprogramme

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

Einführung in die Programmierung

Lösungsskizzen zum Buch Mathematik für Informatiker Kapitel 8 Peter Hartmann

Transkript:

P2.1. Gliederung Rechnerpraktikum zu Kapitel 2 Objektorientierte Programmierung C++-Standardbibliothek, Rekursion Beispiel: Fast Fourier Transformation Beispiel: Klasse für komplexe Zahlen Folie 1

P2.2. C++-Standardbibliothek, Rekursion Aufgabe: Definieren Sie im Hauptprogramm main() einen vector<double> und füllen Sie ihn mit 100 Zufallszahlen im Bereich von -10,0 bis +10,0. Schreiben Sie eine Funktion double find_max(vector<double> v), die der Reihe nach alle Elemente des Vektors durchläuft, das größte Element ermittelt und zurückgibt. Rufen Sie diese Funktion aus dem Hauptprogramm heraus auf und geben Sie das Ergebnis aus. Tipps: #include <vector> using namespace std; vector<double> v; v.push_back(123.456); cout << "Vektor-Elemente durchlaufen:" << endl; for(auto x : v) // QMAKE_CXXFLAGS += -std=c++11 cout << x << endl; // in.pro-datei einfügen! Folie 2

P2.3. C++-Standardbibliothek, Rekursion Aufgabe: Implementieren Sie eine zweite Variante der Funktion double find_ max(vector<double> v), welche das Maximum rekursiv (!) ermittelt: Ende der Rekursion Funktion find_max() ruft sich selbst auf Folie 3

P2.4. C++-Standardbibliothek, Rekursion #include <iostream> using namespace std; double fakultaet(double x) if(x > 0) return fakultaet(x - 1) * x; else return 1; } int main() cout << fakultaet(3); cout << endl; } fakultaet(2). return fakultaet(1) * 2; } fakultaet(3). return fakultaet(2) * 3; } Eine Funktion, die sich selbst aufruft, nennt man rekursiv. Das Rekursionsende muss definiert sein, damit keine Endlos-Rekursion entsteht! fakultaet(0). return 1; } fakultaet(1). return fakultaet(0) * 1; } Ergebnis: fakultaet(3) = (((1) * 1) * 2) * 3 = 6 Folie 4

P2.5. Gliederung Rechnerpraktikum zu Kapitel 2 Objektorientierte Programmierung C++-Standardbibliothek, Rekursion Beispiel: Fast Fourier Transformation Beispiel: Klasse für komplexe Zahlen Folie 5

P2.6. Fast Fourier Transformation Was ist die Fast Fourier Transformation (FFT)? Die FFT berechnet, vereinfacht ausgedrückt, welche Frequenzen im Originalsignal enthalten sind, welche Sinusschwingungen also mit welcher Phase addiert werden müssten, um auf das ursprüngliche Signal zu kommen. Konkret erhält man für jeden Frequenzpunkt (von der Frequenz 0 bis zur halben Abtastfrequenz) eine komplexe Zahl, die Amplitude und Phase der entsprechenden Sinusschwingung repräsentiert. Aufgabe: (aus: www.mikrocontroller.net, Spektralanalyse mit der FFT) Erstellen Sie eine Funktion fft() zur Berechnung der Fast Fourier Transformation eines Vektors aus komplexen Zahlen und testen Sie Ihre Funktion fft() mit einem geeigneten Hauptprogramm! Folie 6

P2.7. Fast Fourier Transformation Struktogramm der Funktion fft(a): Die Anzahl der Elemente muss eine Zweierpotenz sein!! Vergl.: Introduction to Algorithms, Cormen et al., MIT Press, 2005 Folie 7

P2.8. Fast Fourier Transformation // QMAKE_CXXFLAGS += -std=c++11 in.pro-datei einfügen! #define _USE_MATH_DEFINES #include <iostream> #include <complex> #include <vector> #include <math.h> #include "chart.h" using namespace std; vector<complex<double>> fft(vector<complex<double>> a) int n = a.size(); if(n == 1) return a; } else... Dateien chart.c und chart.h zum Projekt hinzufügen! Zusatzaufgabe: Wenn die Anzahl der Elemente im Vektor keine Zweierpotenz ist, soll die Funktion fft() mit einer Fehlermeldung abgebrochen werden! Folie 8

P2.9. Fast Fourier Transformation Vergleichen Sie die Ergebnisse Ihrer Funktion fft() mit den Ergebnissen der MATLAB-Funktion fft(). Tipp: In der MATLAB- Dokumentation zur Funktion fft() gibt es ein passendes Beispielprogramm! Folie 9

P2.10. Gliederung Rechnerpraktikum zu Kapitel 2 Objektorientierte Programmierung C++-Standardbibliothek, Rekursion Beispiel: Fast Fourier Transformation Beispiel: Klasse für komplexe Zahlen Folie 10

P2.11. Klasse für komplexe Zahlen Aufgabe: In der Vorlesung wurde mit der Implementierung der Klasse Complex zum Rechnen mit komplexen Zahlen begonnen. Erstellen Sie nun ein neues C++-Projekt mit einer von Ihnen programmierten Variante der Klasse Complex. Ihre Klasse Complex sollte möglichst die folgenden Funktionalitäten bieten: - Speichern, Abfragen von Real- und Imaginärteil - Initialisieren neuer Instanzen durch geeignete Konstruktoren - Operatoren für die vier Grundrechenarten - Ermitteln von Betrag und Winkel - Ausgabeoperator << für std::cout (und andere Ausgabe-Streams) - Und noch eine Zusatzaufgabe für die Experten: Eingabeoperator >> für std::cin (und andere Eingabe-Streams) Folie 11

P2.12. Klasse für komplexe Zahlen class Complex... }; int main() double r, i; cout << "Real- und Imaginaerteil eingeben: "; cin >> r >> i; Complex c1(r, i); cout << "Winkel = " << c1.arg() * 180 / M_PI << endl; cout << "Betrag = " << c1.abs() << endl; } Complex c2; c2.set(1, 1); Complex c3 = c1 + c2; cout << "c3 = " << c3 << endl; So ähnlich könnte Ihr Hauptprogramm aussehen Folie 12