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



Ähnliche Dokumente
Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

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

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

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

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

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Was der Mathematiker Gauß nicht konnte, das können wir Prof. R. Zavodnik/C++ Vorlesung/Kapitel IX 1

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

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

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

Einführung in die Programmierung mit C++

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

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

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

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

13. Vererbung. Prof. Dr. François E. Cellier Informatik I für D-ITET (HS 2012)

Klausur in Programmieren

Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Programmieren II Vererbung. Einleitende Bemerkungen

Zählen von Objekten einer bestimmten Klasse

Überladen von Operatoren

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

C++ Quellcodes zum Buch Kapitel 5

Schlüsselwort virtual

Überladen von Operatoren

C++-Zusammenfassung. H. Schaudt. August 18, 2005

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

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

Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Zur Erinnerung.

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Informatik - Übungsstunde

Dynamische Datenstrukturen in C++ 150

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

4 5 void swap(int* px, int* py) { 6 int tmp = *px; 7 *px = *py; 8 *py = tmp; 9 }

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

10. Klassen. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Einführung in die Programmierung (EPR)

Grundkurs C++ IDE Klassenhierarchien

Grundkurs C++ IDE Klassenhierarchien

Algorithmen und Datenstrukturen (Informatik II)

Numerische Methoden und Algorithmen in der Physik

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

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

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

Konstruktor & Destruktor

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

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

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

Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Lösung der OOP-Prüfung WS12/13

Grundlagen der Informatik 12. Strukturen

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

Überblick. Peter Sobe 1

C++ - Container und dynamische Speicherverwaltung

18. Vererbung und Polymorphie

Einführung in die Programmierung mit C++

Dynamische Speicherverwaltung

Name: Klausur Informatik III WS 2003/04

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

Arrays Fortgeschrittene Verwendung

Objektorientierte Programmierung mit C Strukturierte Anweisungen: Exception Handling

Grundkurs C++ IDE Klassenhierarchien

Code verifizieren mittels

Klassen. C++ Übung am 02. Juni 2016

Kurzeinführung in C/C++ Elementare Datentypen in C++

Klausur in Programmieren

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

18. Vererbung und Polymorphie

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

Programmieren in C++ Klassen

Übung HP Musterlösung zu Aufgabe 9:

Mapra: C++ Teil 4. Felix Gruber, Michael Rom. 24. Mai 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 4 24.

Vorlesungsprüfung Programmiersprache 1

Vorkurs C++ Programmierung

Algorithmen und Datenstrukturen

Übung Notendarstellung

Grundzüge der objektorientierten Programmierung

C/C++-Programmierung

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

C++ und Pointer. Dyn. Speicherverwaltung 1/3. Dyn. Speicherverwaltung 3/3. Dyn. Speicherverwaltung 2/3

C++ und Pointer. Dyn. Speicherverwaltung 1/3. Dyn. Speicherverwaltung 3/3. Dyn. Speicherverwaltung 2/3

Wir erinnern uns... #include <iostream> #include <vector>

Codingstandard. Softwareentwicklung Praktikum Stand:

C++ Grundlagen und Objektorientierte Programmierung. Matthias Pospiech IQO

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

Verwendung von Klassen in C++

Objektorientierung Grundlagen

Informatik Repetitorium SS Volker Jaedicke

Der C++ Crashkurs v1.0

Stephan Brumme, SST, 3.FS, Matrikelnr PrimitiveTypes. Ordinal Boolean Real String. ns-opener

HSR Rapperswil 2001 Markus Rigling. Programmieren: Templates Auflage

Informatik 1 ( ) D-MAVT F2010. Klassen. Yves Brise Übungsstunde 9

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

C++ Programmierung. Uwe Naumann. LuFG Informatik 12, RWTH Aachen University, Germany

Übung HP Beispielaufgaben 3

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

int main(){ int main(){ Das wollen wir doch genau verstehen! std::vector<int> v(10,0); // Vector of length 10

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

Visuelle Kryptographie. Anwendung von Zufallszahlen

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

Transkript:

Lösungsvorschlag zum Übungsblatt 4 zur Vorlesung Informatik II / WS2001/02 Prof. Dr.-Ing. Holger Vogelsang (FH-Karlsruhe) Dipl.-Inform. (FH) Gudrun Keller (FH-Karlsruhe) Dipl.-Inform. Mathias Supp (.riess applications gmbh) Aufgabe 1 a) #include "Matrix.h" #include "Vector.h" int main() { #ifndef _INC_MATRIX #define _INC_MATRIX Main.cpp Matrix.h double** newmatrix(int rowcount, int columncount); void deletematrix(double** matrix, int rowcount); double** matrixmult( double** matrix1, int rowcount1, int columncount1, double** matrix2, int rowcount2, int columncount2 ); double* matrixvectormult( double** matrix, int rowcount, int columncount, double* vector, int elementcount ); void printmatrix( double** matrix, int rowcount, int columncount ); 22. Oktober 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 1/10

b) #include "Matrix.h" #include "Vector.h" #ifndef _INC_VECTOR #define _INC_VECTOR Matrix.cpp Vector.h double* newvector(int elementcount); void deletevector(double* vector); void printvector(double* vector, int elementcount); #include "Vector.h" Vector.cpp Vector.h #ifndef _INC_VECTOR #define _INC_VECTOR double getscalarproduct( double* vector1, double* vector2, int elementcount ); Vector.cpp double getscalarproduct( double* vector1, double* vector2, int elementcount ) { double result = 0.0; for( i = 0; i < elementcount; i++ ) { result += vector1[i] * vector2[i]; return result; 12. November 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 2/10

Aufgabe 2 #ifndef _INC_EXAMPLE #define _INC_EXAMPLE ClassExample.h a) b) c) d) #include "ClassExample.h" ClassExample.cpp ClassExample::ClassExample() { cout << "Constructing" << endl; this->value = 0; ClassExample::ClassExample(int value) { cout << "Constructing " << value << endl; this->value = value; ClassExample::ClassExample(const ClassExample& source) { cout << "Copying " << source.value << endl; this->value = source.value; ClassExample::~ClassExample() { cout << "Destructing " << this->value << endl; this->value = -1; ClassExample& ClassExample::operator =(const ClassExample& source) { if( &source!= this ) { cout << "Assigning " << source.value << " to " << this->value << endl; this->value = source.value; else { cout << "Assigning " << this->value << " to itself." << endl; return(*this); 12. November 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 3/10

e) #include "ClassExample.h" void test(classexample c) { cout << "test" << endl; int main() { Main.cpp ClassExample c1; // Constructing (c1) ClassExample c2(2); // Constructing 2 (c2) ClassExample c3(17); // Constructing 17 (c3) test(c1); // Copying 0 (c) test Destructing 0 (c) test(c2); // Copying 2 (c) test Destructing 2 (c) test(c3); // Copying 17 (c) test Destructing 17 (c) c2 = c3; // Assigning 17 to 2 (c2) return 0; // Destructing 17 (c3) // Destructing 17 (c2) // Destructing 0 (c1) 12. November 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 4/10

Aufgabe 3 #ifndef MATRIX_H #define MATRIX_H #include "Vector.h" #ifndef VECTOR_H #define VECTOR_H #include "Matrix.h" Matrix.h Vector.h Matrix.cpp / Konstruktor + Includes Matrix::Matrix(int rowcount, int columncount) { int j; this->rowcount = rowcount; this->columncount = columncount; elements = new double*[rowcount]; for( i = 0; i < rowcount; i++ ) { elements[i] = new double[columncount]; for( j = 0; j < columncount; j++ ) { elements[i][j] = 0; 12. November 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 5/10

Matrix.cpp / Kopierkonstruktor Matrix::Matrix(const Matrix& source) { int j; this->rowcount = source.rowcount; this->columncount = source.columncount; elements = new double*[rowcount]; for( i = 0; i < rowcount; i++ ) { elements[i] = new double[columncount]; for( j = 0; j < columncount; j++ ) { elements[i][j] = source.elements[i][j]; Matrix.cpp / Zuweisungsoperator Matrix& Matrix::operator =(const Matrix& source) { if( this!= &source) { this->~matrix(); this->matrix::matrix(source); return *this; Matrix::~Matrix() { Matrix.cpp / Destruktor for( i = 0; i < rowcount; i++ ) { delete[] elements[i]; delete[] elements; 12. November 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 6/10

Matrix.cpp / Zugriffsmethoden // access methods for setting element values void Matrix::setElementAt(int row, int column, double element) { elements[row][column] = element; // access methods for reading element values double Matrix::getElementAt(int row, int column) const { return elements[row][column]; int Matrix::getRowCount() const { return rowcount; int Matrix::getColumnCount() const { return columncount; Matrix.cpp / Matrix-Matrix-Multiplikation Matrix Matrix::mult(const Matrix& matrix) const { int colmatrix1; int colmatrix2; int row; Matrix result(this->rowcount, matrix.columncount); for( row = 0; row < this->rowcount; row++ ) { for( colmatrix2 = 0; colmatrix2 < matrix.columncount; colmatrix2++ ) { for( colmatrix1 = 0; colmatrix1 < this->columncount; colmatrix1++ ) { result.elements[row][colmatrix2] += elements[row][colmatrix1] * matrix.elements[colmatrix1][colmatrix2]; return result; 12. November 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 7/10

Matrix.cpp / Matrix-Vektor-Multiplikation Vector Matrix::mult(const Vector& vector) const { int colmatrix1; int row; Vector result(rowcount); for( row = 0; row < rowcount; row++ ) { { for( colmatrix1 = 0; colmatrix1 < columncount; colmatrix1++ ) result.elements[row] += elements[row][colmatrix1] * vector.getelementat(colmatrix1); return result; void Matrix::toStdOut() { int row; int col; Matrix.cpp / Anzeigemethode for( row = 0; row < rowcount; row++ ) { for( col = 0; col < columncount; col++ ) { cout << elements[row][col] << " "; cout << endl; cout << endl; #include "Vector.h" Vector.cpp / Konstruktor + Includes // constructors Vector::Vector(int elementcount) { this->elementcount = elementcount; elements = new double[elementcount]; for( i = 0; i < elementcount; i++ ) { elements[i] = 0; 12. November 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 8/10

Vector.cpp / Kopierkonstruktor // copy constructor Vector::Vector(const Vector& source) { this->elementcount = source.elementcount; elements = new double[elementcount]; for( i = 0; i < elementcount; i++ ) { elements[i] = source.elements[i]; Vector.cpp / Zuweisungsoperator Vector& Vector::operator =(const Vector& source) { if( this!= &source ) { this->~vector(); this->vector::vector(source); return *this; Vector::~Vector() { delete[] elements; Vector.cpp / Destruktor Vector.cpp / Zugriffsmethoden // access methods for setting element values void Vector::setElementAt(int index, double element) { elements[index] = element; // access methods for reading element values double Vector::getElementAt(int index) const { return elements[index]; int Vector::getElementCount() const { return elementcount; Vector.cpp / Vektor-Vektor-Multiplikation double Vector::mult(const Vector& vector) const { double result = 0.0; for( i = 0; i < elementcount; i++ ) { result += elements[i] * vector.elements[i]; return result; 12. November 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 9/10

Vector.cpp / Anzeigemethode void Vector::toStdOut() const { for( i = 0; i < elementcount; i++ ) { cout << elements[i] << endl; cout << endl; Die Aufgaben werden am 25. Oktober 2001 besprochen. Der Webzugriff auf Übungsblatt 4 über http://www.riess.de/supp/ws01_02/infoii/uebungsblatt4 12. November 2001 Übungsblatt 4 zur Vorlesung Informatik II Seite 10/10