Übung Notendarstellung

Ähnliche Dokumente
Abend 4 Übung : Erweitern von Klassen durch Vererbung

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

Name: Klausur Informatik III WS 2003/04

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

Objektorientierung Grundlagen

Grundlagen der Informatik

Wissenschaftliches Rechnen

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

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

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

Grundlagen der Informatik

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

3. Semester : 1. Prüfung

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

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

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Objektorientierte Programmierung mit C++ SS 2007

SimpleStat mit Methoden

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

Klausur: Programmieren II

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

Vorlesungsprüfung Programmiersprache 1

Ein kleiner Blick auf die generische Programmierung

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

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

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

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

2. Semester, 2. Prüfung, Lösung

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

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

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

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

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

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

Hilfsblatt für C++ Prüfungen im 5. Semester

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

Entwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben!

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

Ziele sind das Arbeiten mit Funktionen (Modularisierung, Parameterübergabe), sowie - Reihentyp (Array)

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

Lösungen Übung 5. Programmieren in C++ 1. Aufgabe. #include <iostream.h> #include <stdarg.h>

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

Zählen von Objekten einer bestimmten Klasse

Info-2, Klausurvorbereitung, SS 2016

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

Escape-Sequenzen. Dr. Norbert Spangler

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

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

Hochschule Darmstadt Informatik-Praktikum SS 2018 EIT Bachelor 4. Aufgabenblatt Dateiverarbeitung, Funktionen, Records

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

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

Klausur Informatik WS 2012/13

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

Hochschule Darmstadt Informatik-Praktikum SS 2018 EIT Bachelor 3. Aufgabenblatt Funktionen - Unterprogramme

Quiz und Übungen. C++ Übung am 19. Mai 2016

Erste Java-Programme (Scopes und Rekursion)

Crashkurs C++ Wiederholung

Informatik - Übungsstunde

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

EPROG 2.Teilprüfung. Aufgabe 1:

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

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

Grundlagen der Informatik 2. Typen

Pseudo-Programmiersprache

Programmieren in C/C++ und MATLAB

Übung HP Beispielaufgaben 3

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.

Objektorientierte Anwendungsentwicklung

Übungsblatt 1. Java Vorkurs (WS 2017)

Objektorientierte Programmierung

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

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

Transkript:

Übung Notendarstellung Einführung Unsere Zeichenfläche hat einige Erweiterungen erfahren, die wir heute nutzen wollen um eine Notendarstellung zu erhalten. Insbesondere hat gibt es nun die Möglichkeit Linien und Punkte auf dem Bildschirm darzustellen. Erster Schritt: Klasse Note Diese Klasse mag ein wenig überraschen, denn wofür braucht es um eine Note zu speichern eine Klasse? Dafür genügt doch auch einfach ein double! Oder ein float? Es schadet nicht eine Note in einer Klasse zu kapseln, der Datentyp mit dem der Notenwert gespeichert wird ist dann gekapselt. Als Methode kann unsere Notenklasse einen gerundetet Wert ausgeben, was ja nicht so schlecht ist! Wie wäre es mit folgender Klasse? #ifndef NOTE_H #define NOTE_H class Note public: // Konstruktor Note(); // Konstruktor mit Parameter Note(double note); // Kopierkonstruktor Note(const Note& vorlage); // nachträgliches Setzen der Note void setzenote(double note); double holenote(); enum Rundung Zehntel, Viertel, Halbe, Ganze // gibt einen gerundeten Wert zurück // gemäss Parameter double holegerundetenote(rundung rundung); private: double m_notenwert; #endif 1/5 11.12.2001

Zweiter Schritt : Klasse Notenliste Wie in der letzten Übung CDListe schreiben wir hier auch eine Klasse, die viele Noten speichern kann. Am besten du haltest Dich an die Vorgabe. Ersetze einfach die Klasse CD mit der Klasse Note. Hier was ich in einer ersten Version implementieren würde: #ifndef NOTENLISTE_H #define NOTENLISTE_H #include <string> #include "Note.h" const unsigned long MaxNoten = 50; class Notenliste public: // Konstruktor Notenliste(const std::string& Fach); bool hinzufuegen(const Note& note); // Diese Funktion berechnet den // Durchschnitt aller Noten Note berechnedurchschnitt(); private: Note m_noten[maxnoten]; int m_anzahlnoten; std::string m_fach; #endif Mir gefällt hier vor allem die Funktion berechnedurchschnitt, denn sie gibt eine Note als Rückgabewert, statt eines schnöden doubles oder so. Der Vorteil ist, dass ich diese Note auch wieder runden kann (mit Note:: holegerundetenote(...)). Dritter Schritt : Ausgabe und Testen Wie du bemerkt hast, haben wir bis jetzt rein gar nichts auf dem Bildschirm ausgegeben! Weder grafisch noch sonst irgendwie. Zusammen fügen wir jetzt eine nette Ausgabefunktion mit ein wenig Zauberfähigkeit hinzu. Ergänze folgende Funktion in der Klasse Notenliste: void ausgeben(ostream& out); Der Parameter vom Typ ostream entspricht dem cout Objekt. Aber nicht nur! Wir können nämlich anstelle des cout Objektes auch ein Datei - Objekt der Funktion ausgeben mitgeben. Füge auch die eine solche Funktion ausgeben in die Klasse Note ein. Hier die eine mögliche Implementation dieser beiden Funktionen. 2/5 11.12.2001

void Note::ausgeben(ostream& out) out << m_notenwert << endl; void Notenliste::ausgeben(ostream& out) out << "Noten des Fachs " << m_fach << endl; out << "Anzahl Noten : " << m_anzahlnoten << endl; for(int i = 0; i < m_anzahlnoten; ++i) m_noten[i].ausgeben(out); Note durchschnitt = berechnedurchschnitt(); out << "Durchschnitt : "; durchschnitt.ausgeben(out); Das gibt schon eine recht ansprechende Ausgabe. Wir können die Methode ausgeben der Liste von einem main aus aufrufen und dieser einfach cout übergeben. Im Beispiel erzeuge ich aber auch eine Datei! Da die Klasse ofstream sehr ähnlich ist wie das cout Objekt können wir der Methode asugeben einfach auch das file Objekt mitgeben. Hier das Beispiel : #include "Notenliste.h" #include <iostream> #include <fstream> using namespace std; int main() Notenliste liste("c++"); for(long i = 0; i < 10; ++i) double testnote = 4.0 + (double)i / 10.0; Note note(testnote); liste.hinzufuegen(note); liste.ausgeben(cout); // Datei erzeugen ofstream out("noten.txt"); liste.ausgeben(out); return 0; 3/5 11.12.2001

Diese Datei lässt sich sogar in Excel importieren. So können wir überprüfen, ob unsere Durchschnittsberechnung stimmt. Tipps zum Runden Das Runden scheint nicht so einfach zu sein. Ich kann im Moment nicht einmal sagen, ob die C++ Library solche Funktionen zur Verfügung stellt. Sie sind aber nicht so schwer selber zu schreiben! Beispiel Zehntel Rechne den Notenwert mal 10. Weise diesen Wert einer Ganzzahl zu, dadurch verschwinden die Nachkommastellen. Nun teile diese Zahl wieder durch 10, aber achte darauf, dass es eine genaue Rechnung gibt (mit doubles). Um bei den Rundungsgrenzen auch richtig zu liegen müssen wir zur Note soviel addieren, dass die Note, die gerade noch aufgerundet werden kann (hier x.x5) den nächsten zehntel erreicht. Bei viertel Noten oder halben Noten ist dieser Korrekturwert anders! double note = 5.25; double ergebnis = 0.0; int temp = (int)(10.0 * (note+0.05)); ergebnis = (double)temp / 10.0; Die anderen Rundungswerte sollten auf ähnliche Art zu berechnen sein! 4/5 11.12.2001

Grafische Ausgabe Die neueste Version der Zeichenflaeche bietet also die Möglichkeit Linien auszugeben. Ich stelle mir etwa folgende Grafik vor : Mathe Eine Möglichkeit eine solche Grafik zu erzeugen ist es, der Notenliste eine Zeichenflaeche als Datenelement hinzuzufügen. Danach gilt es die Zeichenflaeche vernünftig aufzuteilen, das heisst die X-Achse und die Y- Achse optimal auszunutzen, janach Anzahl Noten die sich in der Notenliste befinden. Hole Dir die neueste Version von TsuZeichnen.exe vom Internet und die passenden Klassen : ZeichenFlaeche, Kreis, Linie, Text. 5/5 11.12.2001