Klausur: Programmieren II

Ähnliche Dokumente
Bachelorprüfung: Objektorientierte Softwareentwicklung

Objektorientierte Programmierung mit C++ SS 2007

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

Objektorientierte Anwendungsentwicklung

Klausur: Java (Liste P)

Probeklausur: Programmieren I

Dokumentation zum AVL-Baum (C++)

Übung Notendarstellung

Klausur: Java (Liste P)

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

Ein kleiner Blick auf die generische Programmierung

Objektorientierte Anwendungsentwicklung

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

Info-2, Klausurvorbereitung, SS 2016

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

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

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

Objektorientierung Grundlagen

Klausur Informatik WS 2012/13

Praxis der Programmierung

Allgemeine Informatik II

Programmieren - C++ Templates

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

Übung HP Beispielaufgaben 3

Einführung in die STL

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

Klausur in Programmieren

Klausur in Programmieren

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

Lösung zur Klausur C++ und Data Mining 16. Juli 2004 (SS 2004)

Klausur in Programmieren

Abend 4 Übung : Erweitern von Klassen durch Vererbung

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

Modernes C++ (C++11)

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Prüfung Algorithmen und Datenstrukturen I

Klausur in Programmieren

7. Übung Informatik II - Objektorientierte Programmierung

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

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte

Ausnahmebehandlung. (exceptionhandling) in C++

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)

Vorlesungsprüfung Programmiersprache 1

Dies ist eine Probeklausur, die keine formalen Schlüsse auf die Form, die Struktur oder den Inhalt der endgültigen Klausur zulässt.

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

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

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele

Übungen zur Vorlesung EINI (WS 2010) Blatt 11

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

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

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

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

Vergleich verschiedener OO-Programmiersprachen

4. Objektorientierte Programmierung mit C++

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung

Repetitorium Programmieren I + II

Geoinformatik und Vermessung Prüfung 502 : Informatik (JAVA)

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

Universität Karlsruhe (TH)

Grundlagen der Informatik 2. Typen

Einführung in die Programmierung Wintersemester 2008/09

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

Klausur Programmieren 1 SS 17 Prof. Dr.-Ing. Jürgen Brauer

Einführung in C ++ und die Objektorientierte Programierung

Transkript:

Klausur: Programmieren II Diplomstudiengang Allgemeine Informatik SS07 Erlaubte Hilfsmittel: dokumentenechter Stift. Lösung ist auf den Klausurbögen anzufertigen. (eventuell Rückseiten nehmen) Bitte legen Sie einen Lichtbildausweis und den Studentenausweis auf den Tisch. Bearbeitungszeit: 90 Minuten Unterschrift Benotung Aufgabe: 1 2 3 4 5 Gesamt Note Punkte: 16 16 24 24 20 100 erreicht: SS07 Klausur: Programmieren II (Seite 1) 04.07.2007

Aufgabe 1 Folgende C++ Programme enthalten Fehler, die vom Compiler entdeckt werden. Erklären Sie den Fehler. a) 1 #include <iostream> 2 class A{ 3 private: 4 int x; 5 public: 6 A(int x):x(x){}; 7 int getx(){return x;} 8 }; 9 int main(){ 10 A a; 11 std::cout<<a.getx()<<std::endl; 12 } b) 1 int f(int& x){x=x+2;return x;} 2 int main(){f(4);return 0;} SS07 Klausur: Programmieren II (Seite 2) 04.07.2007

c) 1 #include <string> 2 template <typename a,typename b> 3 class P{ 4 public: 5 a fst; 6 b snd; 7 P(a x,b y):fst(x),snd(y){} 8 void swap(){b x=snd;snd=fst;fst=x;} 9 }; 10 11 int main(){ 12 P<std::string,std::string>* p1 13 = new P<std::string,std::string>("hallo","welt"); 14 P<int,std::string>* p2 = new P<int,std::string>(17,"4"); 15 p2->swap(); 16 p1->swap(); 17 return 0; 18 } SS07 Klausur: Programmieren II (Seite 3) 04.07.2007

d) 1 #include <iostream> 2 class A1 { 3 public: 4 virtual std::string tostring()=0; 5 virtual int getanswer(){return 42;} 6 }; 7 8 int main(){ 9 A1* a1 = new A1(); 10 std::cout<<a1->getanswer()<<std::endl; 11 return 0; 12 } SS07 Klausur: Programmieren II (Seite 4) 04.07.2007

Aufgabe 2 Rechnen Sie folgendes Programm auf dem Papier und geben Sie die Ausgabe auf dem Bildschirm an. Erklären Sie kurz, wie es zu der Ausgabe kommt. a) 1 #include <iostream> 2 int f1(int x){ 3 int result = 0; 4 for (int i=0;i<=x;i++){ 5 if (i==3) throw result; 6 if (x<0) throw "negatives Argument in f1"; 7 result=result+i; 8 } 9 return result; 10 } 11 12 int f2(int i){ 13 try { 14 return f1(i); 15 }catch (int i){ 16 return i; 17 } 18 } 19 int main(){ 20 std::cout<<f2(12)<<std::endl; 21 return 0; 22 } SS07 Klausur: Programmieren II (Seite 5) 04.07.2007

b) 1 #include <iostream> 2 using namespace std; 3 4 class GeometricObject{ 5 public: 6 int hoehe; 7 int breite; 8 GeometricObject(int h,int b):hoehe(h),breite(b){} 9 virtual float flaeche(){return hoehe*breite;} 10 float umfang(){return 2*(hoehe+breite);} 11 }; 12 13 class Quadrat:public GeometricObject{ 14 public: 15 Quadrat(int h):geometricobject(h,h){} 16 }; 17 18 class Kreis:public Quadrat{ 19 public: 20 Kreis(int h):quadrat(h){} 21 virtual float flaeche(){return 3.14*breite*hoehe;} 22 virtual float umfang() {return 3.14*breite;} 23 }; 24 25 int main(){ 26 Quadrat geo0 = Quadrat(10); 27 GeometricObject& geo1 = geo0; 28 GeometricObject geo2 = Kreis(5); 29 GeometricObject* geo3 = &geo2; 30 geo0.breite = 20; 31 cout<< geo1.flaeche() <<endl; 32 cout<< geo1.umfang() <<endl; 33 cout<< geo2.flaeche() <<endl; 34 cout<< geo2.umfang() <<endl; 35 cout<< geo3->flaeche() <<endl; 36 cout<< geo3->umfang() <<endl; 37 return 0; 38 } SS07 Klausur: Programmieren II (Seite 6) 04.07.2007

SS07 Klausur: Programmieren II (Seite 7) 04.07.2007

Aufgabe 3 Schreiben Sie im Stil der Standard Template Library folgende Funktionen, die das Iterator-Konzept benutzen sollen. Schreiben Sie jeweils einen Test, in dem Sie die Funktion aufrufen. a) template <typename Iterator> void printall(iterator anfang, Iterator ende); Die Funktion soll alle Elemente des Iterationsbereichs auf die Konsole ausdrucken. b) template <typename Iterator, typename ElementType> void wendean(iterator anfang,iterator ende, void f(elementtype)); Die Funktion soll die übergebene Funktion f auf alle Elemente, über die Iteriert wird, anwenden. c) Lösen Sie jetzt noch einmal Aufgabenteil a) mit Hilfe der Funktion aus Aufgabenteil b). SS07 Klausur: Programmieren II (Seite 8) 04.07.2007

Aufgabe 4 Gegeben sei folgende generische Klasse, die einen Binärbaum realisiert: 1 template <typename ET> 2 class Tree{ 3 public: 4 ET x; 5 Tree<ET>* leftchild; 6 Tree<ET>* rightchild; 7 Tree(ET x,tree<et>* leftchild=0,tree<et>* rightchild=0) 8 :leftchild(leftchild),x(x),rightchild(rightchild){}; 9 }; Ergänzen sie die Klasse um folgende Methoden: a) bool isleaf(); die genau dann wahr ergibt, wenn die Felder leftchild und righchild beide einen Nullzeiger haben. b) int count(); die die Anzahl der Knoten des Baumes zurückgibt. c) Schreiben Sie einen geeigneten Destruktor für die Klasse Tree. SS07 Klausur: Programmieren II (Seite 9) 04.07.2007

SS07 Klausur: Programmieren II (Seite 10) 04.07.2007

Aufgabe 5 Erklären Sie in kurzen Worten die Begriffe den Unterscheid zwischen Überschreiben und Überladen von Methoden. Erläutern Sie in diesem Zusammenhang den Unterschied zwischen dynamischer und statischen Auflösung eines Methodenaufrufs. SS07 Klausur: Programmieren II (Seite 11) 04.07.2007