Gran Turismo Cars - WS 11/12

Ähnliche Dokumente
Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

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

Übungen zu Programmieren 3 (C++) (4-1)

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Klausur Grundlagen der Programmierung

Lösungen der Übungsaufgaben von Kapitel 4

Assoziative Container in C++ Christian Poulter

SS Stephan Gimbel. Repetitorium PG 1. Übungsblatt. Original Klausur von Prof. Dr. Johannes Arz

Verwenden der Druck- und Zurückhaltefunktion

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

Das Model/View/Controller Paradigma

Übungsblatt 4. Java Vorkurs (WS 2015)

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

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Institut für Programmierung und Reaktive Systeme 24. Juni Programmieren II. 14. Übungsblatt

Klausur Programmieren 2 SS 2016

3.3. Objektorientierung

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

Institut für Computational Science Prof. Dr. H. Hinterberger. Praxismodul 1. Einführung in die Programmierung Erste Programme

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

Informatik I. Matthias Geel Büro: IFW A Blog:

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

Die Formel für die Standardabweichung lautet (ohne die Wurzel haben wir die Varianz):

GI Vektoren

Übung Datenstrukturen. Sortieren

Algorithmen und Datenstrukturen

Einführung in die STL

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

Dieses Dokument enthält alle Teilaufgaben zur Java-Pflichtaufgabe für das Sommersemester Aufgabe 1 (Vier Gewinnt 1. Teil)

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

Sortierverfahren für Felder (Listen)

Klausur Programmieren 2 WS2016/17

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Übungsblatt 7. Thema: Sortieren, Objektorientierung

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

Aufgabe 1 ZUFÄLLIGES ENGLISCH. »Programmieren«, WS 2006/2007. Nino Simunic M.A.

Drucken und Löschen von angehaltenen Druckaufträgen Erkennen von Formatierungsfehlern Bestätigen von Druckaufträgen Reservieren von Druckaufträgen

Praktikum zu OOP (C++) (6-1)

Ein- und Ausgabe (I/O)

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

Arnold Willemer C++ Der Einstieg. WlLEY

Bedienungsanleitung MiniDV (V3)

Übungsklausur Programmieren / Algorithmen und Datenstrukturen 2

Informatik II Musterlösung

Aufgabenblatt 2 Suchen und Sortieren. Aufgabe 1: Vergleiche und Sortieren in Java

Grundlagen von Python

3. Übungsblatt zu Algorithmen I im SoSe 2017

Tutorial Excel Übung 7 Datenbanken I -1- Die Aufgabenstellung ist der folgenden URL zu entnehmen: Übung 7.

Schachtelung der 2. Variante (Bedingungs-Kaskade): if (B1) A1 else if (B2) A2 else if (B3) A3 else if (B4) A4 else A

C++ - Variablen: Gültigkeit - Sichtbarkeit

Nachklausur Programmieren / Algorithmen und Datenstrukturen 1

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

Organisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50

Probeklausur: Programmierung WS04/05

Browser Grid Funktionalitäten

Programmieren in C++ Überladen von Methoden und Operatoren

Objektorientiertes Programmieren in C++

Softwaretechnik WS 16/17. Übungsblatt 01

Sortieren durch Mischen (Mergesort; John von Neumann 1945)

MAXIMUM2.STR Struktogramme. Aufgabe: 3 Zahlen eingeben, größte Zahl ermitteln und ausgeben.

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

Einführung in die Programmierung für NF. Übung

Einführung in den Einsatz von Objekt-Orientierung mit C++ II

Widmung Einleitung Vorwort 15 Übersicht zu diesem Buch Einführung in die Welt der Objektorientierung... 21

kurze Wiederholung class templates

Überschreiben von Methoden

Tag 4 Repetitorium Informatik (Java)

4 Schleifen und Dateien

PIWIN 1 Übung Blatt 5

Arbeiten mit Suchergebnissen

1. Übung zu "Numerik partieller Differentialgleichungen"

Viele Anwender beklagten, das sie die Computer der Finanzbuchhaltung aus Sicherheitsgründen nicht mit einem Internet-Anschluss ausstatten möchten.

Tutoraufgabe 1 (Hoare-Kalkül):

Grundlagen der Programmierung

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung

Lösungsvorschlag für Übungsblatt 4 Software Engineering 1 (WS 2012/13)

Relationen-Algebra und Persistenz Teil I

Kurzeinführung Excel2App. Version 1.0.0

FB Informatik. Fehler. Testplan

1. Übungsblatt zu Algorithmen II im WS 2011/2012

Java Einführung Collections

Aufgabe 1: Sequenzdiagramm Gegeben ist das in Abbildung 1 dargestellte (vereinfachte) Sequenzdiagramm mit sechs Ereignissen (a-f ).

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

Javakurs für Anfänger

Online Banking System

Zürich, 25. August LMVZ digital CSV Import

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

Programmieren und Algorithmen und Datenstrukturen 2

SS Björn Berezowski B.Sc. Marco Münch B.Sc. Michael Roth B.Sc. Repetitorium PG 1. Übungsblatt. 1 Übung - Probeklausur SS 2010 Typ Prof.

Verwenden der Druck- und Zurückhaltefunktion 1

Stefan Schröder Hard- und Softwareentwicklungen. Anleitung TSImport. Zum Neetzekanal Brietlingen

Mapra: C++ Teil 7. Felix Gruber, Michael Rom. 14. Juni 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14.

Klausur Informatik I WS 2006/2007

Übung HP Beispielaufgaben 3

Grundlagen. Kapitel 1

Bei for-schleifen muss man nur immer bedenken, dass die letzte Anweisung immer erst nach der Ausführung der restlichen Anweisungen der Schleife

Objektorientiert in C++

Objektorientierte Programmierung mit C++ Vector und List

Die SQL-Schnittstelle

Name: Klausur Informatik III WS 2003/04

Transkript:

WS 2011/2012 Stephan Gimbel Repetitorium PAD 1+2 Übungsblatt Gran Turismo Cars - WS 11/12 Empfehlung: Arbeiten Sie in kleinen Schritten und sorgen Sie dafür, dass Sie jederzeit ein lauffähiges Anwendungssystem haben. Allgemeine Vorgaben: Keine globalen Variablen/Objekte, Verwendung der vorgegebenen Bezeichner ist verpflichtend, Eigene Bezeichner sind selbsterklärend; Kommentare nur wenn nötig, Principle of least privilege (z.b. const-correctness ), sowie KISS ist zu beachten. Aufgabenstellung: Gegeben ist eine Ascii-Datei die verschiedene Daten von Autos beinhaltet. Entwerfen Sie ein Programm welches die Datei einlesen und wieder schreiben kann und die Daten vorerst in einem geeigneten Container (std::vector<gtcar*>) speichert. Entwerfen Sie dazu die Klasse GTCar gemäß unten stehendem UML-Diagramm. 1

Klasse GTCar Überladen Sie weiterhin den Ausgabeoperator operator<< global für Objekte vom Typ GTCar, so dass die Ausgabe mittels cout << GTCar erfolgen kann. Besonderheiten der Methoden sind: Benutzen Sie für die Ausgabe (operator<<) eines GTCars auf der Konsole geeignete Strommanipulatoren, damit sie eine tabellarische Ausgabe erhalten. hpgreater und yearhpgreater dienen als statische Methoden (warum statisch?) dem Sortieralgorithmus sort aus der STL, die durch einen Function-Pointer übergeben werden. hpgreater soll nach HP/PS sortieren, yearhpgreater nach dem Jahr und innerhalb des Jahres nach HP/PS. operator< dient zum Vergleich zweier GTCars für den Sortieralgorithmus sort der STL und soll zuerst nach Hersteller und dann nach Model sortieren und damit die ursprüngliche Sortierreihenfolge wieder herstellen. (Achtung! Hier wird nach chars sortiert und nicht nach einem Zahlentyp!). Überlegen Sie sich wo das Einlesen und Schreiben der Dateien erfolgen soll und welche Vor- bzw. Nachteile dies hat. Im Zweifelsfall, erstellen Sie eine Klasse CarIO als Schnittstelle. Klasse Manager Zur Steuerung Ihres Programms, entwerfen Sie die Klasse Manager und darin die Methode run() welche den kompletten Ablauf ihres Programms steuert. Die Funktion main reduziert sich damit auf: i n t main ( ) { Manager mgr ; mgr. run ( ) ; r e t u r n 0 ; } Implementieren Sie die Anzeige des unten stehenden Menüs: B i t t e a u s w aehlen : 1. D a t e i e i n l e s e n ( ASCII ) 2. D a t e i e i n l e s e n ( B i n a r y ) 3. D a t e i s c h r e i b e n ( ASCII ) 4. D a t e i s c h r e i b e n ( B i n a r y ) 5. Z e i g e Autos 6. S o r t i e r e n nach PS 7. S o r t i e r e n nach J a h r und PS 8. S o r t i e r e n nach H e r s t e l l e r und Modell ( o r g i n a l ) 9. B u b b l e s o r t ( nach H e r s t e l l e r und Modell ) 1 0. I n s e r t i o n s o r t ( nach H e r s t e l l e r und Modell ) 1 1. Q u i c k s o r t ( nach H e r s t e l l e r und Modell ) 1 2. C o n t a i n e r l o e s c h e n 0. Programm beenden I h r e Eingabe : 2

Implementierungsdetails: Implementieren Sie das Menü mit der switch-case-auswahl. Jede Aktion wird von einer Methode der Klasse Manager ausgeführt. Solange eine Aktion nicht implementiert ist, erscheint Nicht implementiert! auf der Konsole. Bei einer ungültigen Eingabe wird das Menü erneut angezeigt, bis eine gültige Aktion gewählt ist. Wenn die Aktion 5. Zeige Autos gewählt, aber noch keine Daten eingelesen wurden, so erscheint Keine Autos eingelesen! auf der Konsole. Wird eine Aktion zum lesen oder schreiben einer Datei ausgewählt, so wird der Benutzer nach einem Dateinamen gefragt. Dieser Bearbeitungsschritt kann vom Benutzer mittels ctrl-z abgebrochen werden. Dieser Abbruch wird mit der Meldung No further input! bestätigt und das Menü wird erneut angezeigt. Implementieren Sie dieses Feature mittels Exceptions. Hinweis: ctrl-z setzt das EOF- und fail-flag des IO-Systems. Bubblesort, Insertionsort und Quicksort sollten den Container nach Hersteller und innerhalb des Herstellers nach Model sortieren und damit die Originalreihenfolge wieder herstellen. Verwenden Sie dazu nicht den STL-Algorithmus sort, sondern implementieren Sie die Sortieralgorithmen selbst. Datei - cars.txt Jede Zeile der Datei cars.txt beschreibt einen vollständigen GTCar Datensatz. Die einzelnen Attribute sind durch ein ; getrennt, die Zeile durch \n terminiert. Dabei wurde folgende Reihenfolge der Attribute verwendet: Manufacturer, Model, cost, year, drive, hp, lbft, mass, pwd, wpr und origin. Lesen die Attribute ein und weisen Sie sie gemäß der erstellen Klasse GTCar einem Objekt zu (über den Konstruktor). Dynamischer Container Ersetzen Sie den bisher verwendeten Container std::vector<gtcar*> durch eine selbst geschriebene Template-Klasse Array, die Ihnen als dynamischer Container dient. Die Größe des Containers beträgt zu Anfang (sofern nicht anders an den Konstruktor übergeben) 0. Ist der Container vor dem erneuten Einfügen eines Elements voll, so wird die Größe und damit der zur Verfügung stehende Speicherplatz verdoppelt. Das Löschen von Elementen soll nicht die Maximalgröße des Containers beeinflussen, wohl aber die Anzahl der beinhalteten Elemente. Wird bei lesendem Zugriff auf ein Element außerhalb des Containers zugegriffen, so wird eine OutOfRange-Exception geworfen. Halten Sie 3

sich bei der Implementierung der Klasse Array an unten stehendes UML-Diagramm und bzgl. der Funktionalität an die Implementierung der Klasse Vector der STL, aber ohne Verwendung der selbigen! Iteratoren Erweitern Sie die Template-Klasse Array um eine nested Class Iter welche die Iteratoroperationen übernehmen. Halten Sie sich bei der Implementierung an das unten stehende UML-Diagramm. Um die Klasse nutzen zu können, vergessen Sie nicht die Klasse Array innerhalb der nested Class Iter als friend Class zu deklarieren. Weiterhin erweitern Sie die Klasse Array um folgende Methoden: Implementierungsdetails: Werden hinzugefügt, sofern benötigt. 4

Einlesen in Klassenobjekte Wird im Laufe der Woche hinzugefügt. 5