Klausur Programmieren 2 WS 2017/18

Ähnliche Dokumente
Klausur Programmieren 2 SS 2016

Klausur Programmieren 2 WS2016/17

Klausur Informatik WS 2012/13

Klausur Programmieren 1 SS 2017

Praxis der Programmierung

Allgemeine Informatik II SS :30-11:30 Uhr

Objektorientierte Anwendungsentwicklung

Klausur Informatik I WS 2006/2007

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

Grundlagen der Informatik

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

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

Programmierkurs C/C++

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

Klausur "C#" WS 2013/2014

Allgemeine Informatik II SS :30-13:30 Uhr

Probeklausur: Programmieren I

ALP II Dynamische Datenmengen Datenabstraktion

01. Grundprinzipien der Vererbung

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

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

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

Analyse der Klasse Konto

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

Implementieren von Klassen

Einführung in die Programmierung Vorlesungsprüfung

Objektorientierte Programmierung mit C++ SS 2007

Einstieg in die Informatik mit Java

Grundlagen der Informatik

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

C++ - Objektorientierte Programmierung Vererbung

7. Übung Informatik II - Objektorientierte Programmierung

Grundzüge der objektorientierten Programmierung

Datum, Uhrzeit: , Uhr Semester: IN1 Note:... Prof. Dr. G. Meixner

a) Für das vorgegebene Programmstück ergibt sich folgendes Referenzgeflecht:

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Prüfung aus PROGRAMMIEREN (2) (C++) (WS 2002/03)

Abend 4 Übung : Erweitern von Klassen durch Vererbung

Universität zu Lübeck Institut für Telematik. Prof. Dr. Stefan Fischer

FB Informatik. Fehler. Testplan

Bachelorprüfung: Objektorientierte Softwareentwicklung

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

Datum, Uhrzeit: , Uhr Semester: I1 Note:... Prof. Dr. G. Meixner

Klausur Grundlagen der Programmierung

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

Programmieren in C/C++ und MATLAB

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

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

Ausnahmen. Exceptions. Definition Ausnahmen erzeugen Ausnahmen abfangen Ausnahmen weiterleiten. Dr. Beatrice Amrhein

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

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

Prüfung Algorithmen und Datenstrukturen I

Einführung in die Programmierung

Klausur zur Lehrveranstaltung. Technische Informatik für Ingenieure WS 2009/10

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

13. Dynamische Datenstrukturen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

Java Übung. Übung Mai Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung. Werner Gaulke.

Vorlesung Objektorientierte Programmierung Klausur

5.6 Spezielle Liste: Stack

Matrikelnummer:

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Exceptions und Vererbung

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

16. Dynamische Datenstrukturen

Ausgabe:

Repetitorium Informatik (Java)

Aufgabenblatt 11 Musterlösung

Klausur "ADP" SS 2015

Info-2, Klausurvorbereitung, SS 2016

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Probeklausur: Programmierung WS04/05

Transkript:

Klausur Programmieren 2 WS 2017/18 Name Gruppe 1 Vorname Dauer 90 min Matrikelnummer Hilfsmittel keine Die Klausur ist mit 50 Punkten sicher bestanden. Hinweise: Formulieren Sie Ihre Lösungen auf dem Aufgabenblatt und nicht auf zusätzlichen Blättern. Sofern Sie die Rückseite eines Blattes verwenden vermerken sie dies auf der Vorderseite. Prüfen sie das Exemplar auf Vollständigkeit (8 Aufgaben) und Druckqualität. Lesen Sie zunächst alle Aufgaben durch und beginnen Sie dann mit der einfachsten. Schreiben Sie deutlich und sauber. Unleserlichkeiten werden nicht korrigiert!! Voraussetzung für die Zulassung zur Klausur ist das erfolgreich testierte, zugehörige Praktikum. Nr. Punkte Aufgabe 1 15 Gegeben sei die Klasse Person class Person. ; Erklären Sie die folgenden Befehlszeilen: 1) const int n=10; 2) Person pp[n+1],nobody; 3) Person *pt=&pp[1]; 4) for ( int i=0;i<n;i++) pt[i]=nobody; 1) Eine Variable vom Typ const int, initialisiert mit 10, wird deklariert. 2) Ein Array mit 11 Elementen vom Typ Person wird deklariert, sowie eine Variable vom selben Typ. Alle werden mit dem Defaultkonstruktor initialisiert 3) Eine Variable vom Typ Zeiger auf Person wird deklariert, initialisiert mit der Adresse des 2. Arrayelements. 4) Die Arrayelemente pp[1] bis pp[10] erhalten als Wert nobody. 1/9

2 15 Beantworten Sie die folgenden Fragen 1) Was versteht man unter einer Referenz? Eine Referenz ist ein anderer Name für ein existierendes Objekt. 2) Was bedeutet public-vererbung? Alle Public-Elemente der Basisklasse sind auch Public-Elemente der abgeleiteten Klasse. 3) Was versteht man unter einer queue? Eine Queue (auch Schlange, Warteschlange) ist eine sequenzielle Struktur von Objekten gleichen Typs, bei der die Operation Einfügen an einem Ende und Löschen nur an dem anderen Ende möglich sind. Prinzip: FIFO (first in first out) 12 4) Welchen Wert hat 3<<2? 5) Wozu wird catch verwendet? Kopfzeile eines Exception-Handlers 2/9

Nr. Punkte Die Klasse Person (Aufgabe 1) kann als Basisklasse für eine Vielzahl von Anwendungen dienen und ist nicht zu programmieren. class Person private: unsigned int personalnummer; string nachname,vorname; Person *next;//fuer verkettete Liste public: Person(unsigned int,string,string);// Konstruktor void anzeige(); Person* getnext(); void setnext(person*); // weitere bei Bedarf ; 3 15 a) Geben Sie die Definition einer von Person abgeleiteten Klasse Mitarbeiter an. Diese soll u.a. Angaben zur Position (z.b. Teamleiter) und zum Gehalt enthalten. Weiterhin soll die Vorgabe von Aufgabe 6 enthalten sein, sowie eine Anzeigemethode für alle Daten. b) Geben Sie das UML-Diagramm der beiden Klassen an inkl. Beziehung. Get-/Set-Methoden können weggelassen werden. c) Programmieren Sie für die abgeleitete Klasse einen Konstruktor unter Verwendung des Basisklassenkonstruktors. a) class Mitarbeiter:public Person private: unsigned int gehalt; string position; Mitarbeiter *nextm; //speziell fuer Mitarbeiterliste public: Mitarbeiter(unsigned int,string,string,unsigned int,string); void anzeige(); unsigned int getgehalt(); string getposition(); void setnext(mitarbeiter*); Mitarbeiter *getnext(); bool operator<(mitarbeiter&); ; 3/9

b) Person -personalnummer: unsigned int -vorname: string -nachname: string -next: Person* +Person(unsigned int, string, string) +anzeige(): void -bruttogehalt: unsigned int -position: string Mitarbeiter +Mitarbeiter(unsigned int, string, string, unsigned int, string) +anzeige(): void +operator<(mitarbeiter): bool c) Mitarbeiter::Mitarbeiter(unsigned int pnr,string vn, string nn,unsigned int b,string p ) :Person(pnr,vn,nn) bruttogehalt=b; position=p; 4/9

4 15 Es sollen aus einer Datei wiederholt die Daten von Objekten der Klasse Mitarbeiter gelesen werden. Zur Behandlung von Fehlern mittels Exception- Handling soll hierzu eine von der Systembasisklasse für Fehler abgeleitete Fehlerklasse definiert werden. a) Geben Sie die Klassendefinition einer derartigen Fehlerklasse an. Damit soll es möglich sein, folgenden Fehler zu melden: Personalnummer <nummer> mehrfach vorhanden. b) Formulieren Sie einen dazu passenden throw-befehl (ohne if). c) Programmieren Sie für die Fehlerklasse eine Methode, welche am Bildschirm obige Meldung erzeugt und anschließend noch die Daten der Person ausgibt. d) Programmieren Sie zu diesem Fehler einen dazu passenden Exception- Handler. a) class Mehrfach:public exception private: Mitarbeiter m; string meldung; public: Mehrfach(Mitarbeiter); void anzeigemeldung(); char* what(); ; b) throw Mehrfach(ma);// dabei ist ma ein betroffener Mitarbeiter c) void Mehrfach::anzeigeMeldung() cout<<" Personalnummer <"<<m.getpersonalnummer()<<"> mehrfach vorhanden"<<endl; m.anzeige(); d) catch (Mehrfach mf) mf.anzeigemeldung(); exit(1); 5/9

Nr. Punkte Aufgabe 5 15 Erstellen Sie eine Klasse Mitarbeiterliste als verkettete Liste von Mitarbeitern. Sie soll speziell auch die aktuelle Zahl aller Elemente der Liste als Eigenschaft enthalten. a) Geben Sie eine Klassendefinition von Mitarbeiterliste an. Dabei sollen alle in den Aufgaben 5 bis 7 genannten Methoden aufgeführt sein inkl. einer Anzeigemethode für alle Mitarbeiter in der Liste. b) Programmieren Sie einen zugehörigen Konstruktor. c) Programmieren Sie eine Methode, um einen neuen Mitarbeiter aufzunehmen. a) class Mitarbeiterliste private: Mitarbeiter* start; unsigned int anzahl; public: Mitarbeiterliste(); void einfuegen(mitarbeiter*); void anzeige(); void anzeigeposition(string); unsigned int getanzahl(); ; b) c) Mitarbeiterliste::Mitarbeiterliste() start=null; anzahl=0; void Mitarbeiterliste::einfuegen(Mitarbeiter* m) m->setnext(start); start=m; anzahl++; 6/9

6 15 Formulieren Sie für die Klasse Mitarbeiter eine Überladung des < Operators, um bequem im Bedarfsfall nach Gehalt sortierte Listen erzeugen zu können: bool Mitarbeiter::operator<(Mitarbeiter &m) return gehalt<m.getgehalt(); 7/9

7 15 a) Programmieren Sie eine Methode von Mitarbeiterliste, welche eine Liste aller Mitarbeiter mit gleicher Position (als Parameter vorzugeben) anzeigt. b) Erstellen Sie einen dazugehörigen Testplan. void Mitarbeiterliste::anzeigePosition(string p) Mitarbeiter*aktuell=start; while( aktuell!=null) if ( p == aktuell->getposition() ) aktuell->anzeige(); aktuell=aktuell->getnext(); Getestet wird mit Mitarbeitern mit folgenden Positionen M1 Assistent M2 Assistent M3 Teamleiter M4 Teamleiter M5 Teamleiter M6 Direktor Damit werden folgende Listen gebildet L1 keine Mitarbeiter L2 M6 L3 M1,M2,M3,M4,M5,M6 L4 M3,M4,M5 Fall Beschreibung Liste Parameter Erw. Ergebnis 1 Leerer Liste L1 Direktor / 2 Nur 1 MA + L2 Direktor M6 3 Nur 1 MA - L2 Assistent / 4 gemischt+ L3 Teamleiter M3,M4,M5 5 gemischt - L3 Gruppenleiter / 6 alle L4 Teamleiter M3,M4,M5 8/9

8 15 In einer Datei stehen zeilenweise (durch Zwischenraum getrennt) die Daten aller Mitarbeiter. Erstellen Sie ein Programm main, welches diese liest, entsprechende Objekte der Klasse Mitarbeiter erzeugt und diese in ein Objekt der Klasse Mitarbeiterliste einfügt. Weiterhin sind alle genannten Methoden von Mitarbeiterliste wenigstens einmal zu verwenden. Plausibilitätskontrollen bei der Eingabe können weggelassen werden. void main() Mitarbeiterliste ml; fstream ein("ein.txt",ios::in); unsigned int personalnummer,gehalt; string vorname,nachname,position; //Lesen aus Datei ein>>personalnummer>>vorname>>nachname>>gehalt>>position; while(!ein.eof()) Mitarbeiter *m=new Mitarbeiter(personalnummer,vorname,nachname,gehalt,position); ml.einfuegen(m); ein>>personalnummer>>vorname>>nachname>>gehalt>>position; //Methodenaufrufe ml.anzeige(); ml.anzeigeposition("projektleiter"); ml.anzeigeposition("pp"); 9/9