Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 23. Januar 2017

Ähnliche Dokumente
Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 25. Jänner 2016

Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 01. März 2015

Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 24. Juni 2016

Schriftlicher Test zu C (90 Minuten) VU Einführung ins Programmieren für TM. 1. Oktober 2012

Schriftlicher Test zu C++ (90 Minuten) VU Einführung ins Programmieren für TM. 22. Juni 2012

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

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

Schriftlicher Test zu Matlab (90 Minuten) VU Einführung ins Programmieren für TM. 17. Juni 2011

Objektorientierte Programmierung mit C++ SS 2007

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

Abschlußtest Programmieren 30. Juni 2017 Name: Punkte von 32: Gruppe: Haase-Di Haase-Do Stanek-Di Stanek-Do

Polymorphismus 44. Function.hpp. #include <string>

Schlüsselwort virtual

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

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

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.

5. Behälter und Iteratoren. Programmieren in C++ Überblick. 5.1 Einleitung. Programmieren in C++ Überblick: 5. Behälter und Iteratoren

Grundlagen der Informatik

Programmieren in C++ Überblick

3 Dateien 5. 4 Aufgaben 5. 5 Ausblick 6. Wir wenden uns der Implementierung von Datenstrukturen mittels objekt-orientierter Programmierung

Programmieren 2 C++ Überblick

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

virtual Wertpapier& operator=(const Wertpapier&); // VIRTUELLE ZUWEISUNG protected: static enum {wortfeldlaenge = 20}; char* name_z; double kurs; };

Inoffizielle Lösung zur Informatik I Prüfung Frühlingssemester 2010 Freitag, 13. August May 23, 2011

9. Vektoren. (auch Felder/array)

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

Informatik - Übungsstunde

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: E Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik

Objektorientierte Programmierung

C++ - Objektorientierte Programmierung Polymorphie

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache:

Informatik 1 ( ) D-MAVT F2011. Klassen, Funktionen. Yves Brise Übungsstunde 9

C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14

Übung Notendarstellung

Angewandte Mathematik in OOP WS 2011/12. Abschluss-Test

Programmieren in C++ Überladen von Methoden und Operatoren

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

Objektorientierung Grundlagen

Klausur Informatik WS 2012/13

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

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

Praxisorientierte Einführung in C++ (Variadische Funktionen)

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Einführung in die Programmierung mit C++

Gruppe I (SS 2010) VU Einführung ins Programmieren für TM. 23. März 2010

Angewandte Mathematik und Programmierung

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Wissenschaftliches Rechnen

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

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

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

Strukturen & Math. Strukturen und Vektoren. Allokieren eines Vektors. Zugriff auf Strukturen. Freigeben eines Vektors

Strukturen & Math. Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen

Auswahlen (Selektionen)

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

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

Klassen. Kapitel Klassendeklaration

Naive Fehlerkontrolle

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Grundzüge der objektorientierten Programmierung

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

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

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Klausurenkurs zum Staatsexamen (WS 2016/17): Lineare Algebra und analytische Geometrie 1

3. Semester : 1. Prüfung

7. Übung Informatik II - Objektorientierte Programmierung

Verwendung von Klassen in C++

1 Berechnung von Summen (ca = 10 Punkte)

Programmieren in C++

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

Programmierkurs C++ Konstruktor, Statische Methoden Namespaces

Vererbung. public-vererbung. Was ist Vererbung? Formales Beispiel. Was ist Vererbung? Geerbte Felder und Methoden

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Grundlagen der Informatik

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

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

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

Algorithmen und Datenstrukturen

Centrum für Informations- und Sprachverarbeitung SoSe 2018: Höhere Programmierung mit C++ Andreas Krieger. Musterlösung 9

Vorlesungsprüfung Programmiersprache 1

C++ kompakt - Teil 1. Danke an Matthias Biedermann Markus Geimer

Klausur Informatik I WS 2006/2007

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

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

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

Überladen von Operatoren

Name: Klausur Informatik III WS 2003/04

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Klausur im WS 2003/04 : Informatik III

Lösungsvorschlag zum Übungsblatt 4 zur Vorlesung Informatik II / WS2001/02

Programmierung und Angewandte Mathematik

Strukturen. Deklaration von Strukturen. Strukturen & Members. Bemerkungen zu Strukturen

4. Objektorientierte Programmierung mit C++

c) Zur Ausgabe der Transaktion soll statt print der Operator << verwendet werden.geben Sie die dazu nötigen Änderungen an.

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Transkript:

Familienname: Vorname: Matrikelnummer: Aufgabe 1 (3 Punkte): Aufgabe 2 (1 Punkt): Aufgabe 3 (2 Punkte): Aufgabe 4 (4 Punkte): Aufgabe 5 (2 Punkte): Aufgabe 6 (2 Punkte): Aufgabe 7 (4 Punkte): Aufgabe 8 (4 Punkte): Aufgabe 9 (4 Punkte): Aufgabe 10 (2 Punkte): Aufgabe 11 (2 Punkte): Aufgabe 12 (5 Punkte): Aufgabe 13 (5 Punkte): Gesamtpunkte (40 Punkte): Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM 23. Januar 2017 Hinweis. In den folgenden Aufgaben betrachten wir Matrizen A R n n als Objekte der C++ Klasse Matrix, die unten definiert ist. Neben Konstruktor, Kopierkonstruktor, Destruktor und Zuweisungsoperator, gibt es eine Methode, um die Dimension n auszulesen (size), die Zeilensummennorm zu berechnen (norm) und zu bestimmen, ob A eine untere Dreiecksmatrix ist. Die Koeffizienten A jk erhält man mittels A(j,k), wobei die Indizes j, k = 1,..., n im mathematisch üblichen Sinn verwendet werden. Intern wird eine Matrix A R n n spaltenweise in einem dynamischen Vektor der Länge n 2 gespeichert. Ferner werden die Operatoren + und * mit der üblichen Bedeutung überladen. 1 c l a s s Matrix { 2 p r i v a t e : 3 int n ; 4 double c o e f f ; 5 6 p u b l i c : 7 Matrix ( int n=0, double i n i t =0); 8 Matrix ( const Matrix &); 9 Matrix ( ) ; 10 Matrix& o p e r a t o r =(const Matrix &); 11 12 int s i z e ( ) const ; 13 double norm ( ) const ; 14 int islowertriangular ( ) const ; 15 16 const double& o p e r a t o r ( ) ( int, int ) const ; 17 double& o p e r a t o r ( ) ( int, int ) ; 18 19 } ; 20 21 const Matrix o p e r a t o r +(const Matrix&, const Matrix &); 22 const Matrix o p e r a t o r ( const Matrix&, const Matrix &); 1 / 16

Aufgabe 1 (3 Punkte). Schreiben Sie den Konstruktor der Klasse Matrix, der eine Matrix A R n n anlegt, wobei der optionale Parameter init der Initialisierungswert für die Koeffizienten sei (d.h. A jk = init für alle j, k = 1,..., n). Stellen Sie mittels assert sicher, dass die Dimension n 0 ist. Für n = 0 werde die leere Matrix angelegt (d.h. es wird kein Speicher allokiert). Lösung zu Aufgabe 1. 2 / 16

Aufgabe 2 (1 Punkt). Schreiben Sie den Destruktor der Klasse Matrix. Lösung zu Aufgabe 2. Aufgabe 3 (2 Punkte). Was ist die Bedeutung der Zeile const Matrix& A = *this; wenn Sie diese in einer Methode der Klasse Matrix verwenden? Erklären Sie die Syntax! 3 / 16

Aufgabe 4 (4 Punkte). Schreiben Sie den Zuweisungsoperator der Klasse Matrix. Lösung zu Aufgabe 4. 4 / 16

Aufgabe 5 (2 Punkte). Die Matrix A R n n wird intern spaltenweise als Vektor a R n2 gespeichert. Beachten Sie, dass die Koeffizienten A jk mit Indizes j, k {1,..., n} indiziert werden, während die Koeffizienten a l des Speichervektors in C++ mit Indizes l {0,..., n 2 1} indiziert werden. Leiten Sie eine Formel her, die für ein zulässiges Indexpaar (j, k) den zugehörigen Index l liefert. Begründen Sie Ihre Formel! Lösung zu Aufgabe 5. Aufgabe 6 (2 Punkte). Schreiben Sie den Zugriffsoperator ( ) für nicht-konstante Objekte der Klasse Matrix für den Koeffizientenzugriff auf A jk mittels A(j,k). Stellen Sie mittels assert sicher, dass die Koeffizienten im zulässigen Bereich sind, d.h. j, k {1,..., n} für A R n n. Beachten Sie, dass der Speichervektor in C++ intern mit l = 0,..., n 2 1 indiziert wird. 5 / 16

Aufgabe 7 (4 Punkte). Schreiben Sie die Methode islowertriangular der Klasse Matrix. Diese liefert als Rückgabe 1, falls A R n n eine untere Dreiecksmatrix ist, und 0 anderenfalls. Hinweis. Eine Matrix A R n n ist eine untere Dreiecksmatrix, falls A jk = 0 gilt für alle Indizes j, k = 1,..., n mit k > j. Lösung zu Aufgabe 7. 6 / 16

Aufgabe 8 (4 Punkte). Schreiben Sie die Methode norm der Klasse Matrix, die für A R n n die Zeilensummenorm A := berechnet. max j=1,...,n k=1 n A jk Hinweis. Den Absolutbetrag eines double-wertes berechnet die Funktion fabs. Lösung zu Aufgabe 8. 7 / 16

Aufgabe 9 (4 Punkte). Überladen Sie den Operator *, sodass C = A*B für A, B R n n das Produkt n C = AB R n n mit C jl = A jk B kl für alle j, l {1,..., n} k=1 berechnet und zurückgibt. Stellen Sie mittels assert sicher, dass A und B dieselbe Dimension haben. Lösung zu Aufgabe 9. 8 / 16

Aufgabe 10 (2 Punkte). Welchen Aufwand hat Ihre Implementierung des Produktes C = AB für A, B R n n? Falls die Funktion für n = 10 3 eine Laufzeit von 0.1 Sekunden hat, welche Laufzeit erwarten Sie für n = 3 10 4? Lösung zu Aufgabe 10. 9 / 16

Hinweis. Zusätzlich zur Klasse Matrix sei eine Klasse Vector gegeben zur Speicherung von Vektoren x R n. Neben Konstruktor, Kopierkonstruktor, Destruktor und Zuweisungsoperator gibt es eine Methode size, um die Dimension n auszulesen. Die Koeffizienten x j des Vektors x R n erhält man mittels x(j), wobei der Index j = 1,..., n im mathematisch üblichen Sinn verwendet wird. Sie müssen keine dieser Methoden implementieren, sondern dürfen diese voraussetzen! 1 c l a s s Vector { 2 p r i v a t e : 3 int n ; 4 double c o e f f ; 5 6 p u b l i c : 7 Vector ( int =0, double =0); 8 Vector ( const Vector &); 9 Vector ( ) ; 10 Vector& o p e r a t o r =(const Vector &); 11 12 int s i z e ( ) const ; 13 14 const double& o p e r a t o r ( ) ( int ) const ; 15 double& o p e r a t o r ( ) ( int ) ; 16 } ; Aufgabe 11 (2 Punkte). Gegeben sei eine untere Dreiecksmatrix A R n n (d.h. A jk = 0 für k > j), die zusätzlich A jj 0 für alle j = 1,..., n erfüllt. Sei b R n. Dann gibt es einen eindeutigen Vektor x R n mit Ax = b. Leiten Sie mit Hilfe der Formel des Matrix-Vektor-Produktes b j = n A jk x k k=1 für j = 1,..., n eine Formel für die Koeffizienten x j von x R n her. Lösung zu Aufgabe 11. 10 / 16

Aufgabe 12 (5 Punkte). Schreiben Sie eine Funktion solvelowertriangular, die für einen Vektor b R n und eine untere Dreiecksmatrix A R n n mit A jj 0 für alle j = 1,..., n die eindeutige Lösung x R n des linearen Gleichungssystems Ax = b berechnet und zurückgibt. Stellen Sie mittels assert sicher, dass A und b passende Dimension haben und dass A wirklich eine untere Dreiecksmatrix ist. Stellen Sie ferner mittels assert sicher, dass A jj 0 für alle j = 1,..., n gilt. Lösung zu Aufgabe 12. 11 / 16

Aufgabe 13 (5 Punkte). Was ist der Shell-Output des folgenden Programms? Was macht die while-schleife bzw. was ist die mathematische Funktionalität im Code? #include <iostream > #include <c a s s e r t > using std : : cout ; using std : : endl ; class foobar { private : int x ; int y ; public : foobar ( int x, int y ) { assert ( x >0); assert ( y >0); this >x = x ; this >y = y ; cout << new : x= << x <<, y= << y << endl ; } foobar ( ) { cout << old : x= << x <<, y= << y << endl ; } foobar ( const foobar& eprog ) { int a = eprog. x ; int b = eprog. y ; int c = 0 ; while ( a!= b ) { i f ( a < b ) { c = a ; a = b ; b = c ; } a = a b ; cout << a= << a <<, b= << b <<, c= << c << endl ; } x = eprog. x/a ; y = eprog. y/b ; } } ; int main ( ) { foobar f a t h e r ( 2 0, 4 5 ) ; foobar son = f a t h e r ; return 0 ; } 12 / 16

Lösung zu Aufgabe 13. 13 / 16

14 / 16

15 / 16

16 / 16