000
19.05.2018, 14:27 Uhr
Power33
|
Hallo alle zusammen ich habe in der AUfgabe eine Rumpf Implementierung gegeben weiss aber jetzt nicht wie ich das bei der a) implementieren soll?
C++: |
#ifndef CDIMMERLOGENTRY_H_ #define CDIMMERLOGENTRY_H_
#include <iostream>
/** * Diese Klasse modelliert ein Einschalten des Dimmers zu einem * gegebenen Zeitpunkt, f¸r eine bestimmte Dauer und mit einem * bestimmten Dimm-Faktor (ein Wert zwischen 0 (ausschliefllich) * und 1 (einschliefllich)). * * Um Speicherplatz zu sparen, werden der Einschaltzeitpunkt und * die Einschaltdauer mit Attributen vom Typ unsigned short * modelliert. Da deren Wertebereich nicht ganz ausreicht, um * alle Sekunden eines Tages zu rep‰sentieren (24*60*60 > 2^16), * werden die Sekundenangaben f¸r die Speicherung durch 2 geteilt * (und beim Auslesen der Werte wieder mit 2 multipliziert). * Die daduch entstehende Ungenauigkeit bei den Zeitangaben * ist im Rahmen der vorgesehenen Anwendungsf‰lle akzeptabel. * * Auch der Dimm-Faktor soll effizient gespeichert werden. Der * als float ¸bergebene Wert zwischen 0 und 1 wird daher * f¸r die Speicherung in einen unsigned short gewandelt. * Nutzen Sie den zur Verf¸gung stehenden Wertebereich * vollst‰ndig aus, d.h. speichern Sie den Faktor mit * mˆglichst hoher Genauigkeit. */ class CDimmerLogEntry { private: unsigned short m_startTime; unsigned short m_duration; unsigned short m_factor;
/** * Setzt das Attribut m_factor nach entsprechender * Umrechnung des ¸bergebenen Wertes. Die Methode * wertet auch die Zusicherung (s.u.) aus. */ void setFactor(float factor);
public: /** * Erzeugt einen neuen Log-Eintrag mit der angegebenen * Einschaltzeit, dem angegebenen Dimm-Faktor und einer * Einschaltdauer von 0. * * startTime: die Einschaltzeit als Sekunden seit Mitternacht. * Der Wert muss kleiner sein als die Anzahl * Sekunden eines Tages. Ist das nicht der Fall, * wird statt dessen der Maximalwert (sp‰test * mˆglicher Einschaltzeitpunkt an einem Tag) * genommen. * * factor: der Dimm-Faktor. Der Wert muss grˆfler 0 und * kleiner gleich 1 sein. Verletzt der angegebene * Wert diese Bedingung, wird der Wert 1 genommen. */ CDimmerLogEntry(unsigned int startTime, float factor = 0.5);
/** * Erzeugt einen neuen Log-Eintrag mit der aktuellen Zeit * als Einschaltzeit, dem angegebenen Dimm-Faktor und einer * Einschaltdauer von 0. * * factor: der Dimm-Faktor. Der Wert muss grˆfler 0 und * kleiner gleich 1 sein. Verletzt der angegebene * Wert diese Bedingung, wird der Wert 1 genommen. */ CDimmerLogEntry(float factor = 0.5);
/** * Legt die Ausschaltzeit des Dimmers und damit die * Einschaltdauer fest. * * offTime: die Ausschaltzeit als Sekunden seit Mitternacht. * Ist der Wert kleiner als die Einschaltzeit, wird * davon ausgegangen, dass der Dimmer am n‰chsten * Tag ausgeschaltet wurde (z.B. bedeutet bei einer * Einschaltzeit 22:00:00 ein Ausschalten um 01:00:00 * dass der Dimmer 3 Stunden angeschaltet war). */ void switchedOffAt(unsigned int offTime);
/** * Legt die aktuelle Zeit als Ausschaltzeitpunkt fest. */ void switchedOff();
/** * Liefert den Einschaltzeitpunkt. */ unsigned int getStartTime() const;
/** * Liefert die Einschaltdauer. */ unsigned int getDuration() const;
/** * Liefert den Dimm-Faktor. */ float getFactor() const;
};
#endif /* CDIMMERLOGENTRY_H_ */
|
C++: |
/* * CTimeStamp.h */
#ifndef CTIMEOFDAY_H_ #define CTIMEOFDAY_H_
#include <string>
class CTimeOfDay { private: unsigned int m_secsSinceMidnight;
/** * Hilfsmethode zum Konvertieren eines Ganzzahl-Wertes * in eine Zeichenkette. */ std::string intToString(unsigned int value);
public: /** * Erzeugt eine neue Zeitangabe mit der aktuellen Uhrzeit. */ CTimeOfDay();
/** * Erzeugt eine neue Zeitangabe aus der Angabe der * seit Mitternacht vergangenen Sekunden. */ CTimeOfDay(unsigned int secsSinceMidnight);
/** * Erzeugt eine neue Zeitangabe aus der Angabe einer * Uhrzeit im 24-Stunden Format ("hh:mm:ss", mit hh=Stunden, * mm=Minuten und ss=Sekunden). */ CTimeOfDay(std::string timeOfDay);
/** * Liefert den durch diese Zeitangabe repr‰sentierten * Zeitpunkt als Sekunden seit Mitternacht. */ long getSecsSinceMidgnight();
/** * Liefert den durch diese Zeitangabe repr‰sentierten * Zeitpunkt im 24-Stunden Format ("hh:mm:ss", mit hh=Stunden, * mm=Minuten und ss=Sekunden). */ std::string asTime(); };
#endif /* CTIMEOFDAY_H_ */
|
C++: |
/* * CTimeStamp.cpp */
#include "CTimeOfDay.h"
#include <stdio.h> #include <cstring> #include <time.h> using namespace std;
CTimeOfDay::CTimeOfDay() { time_t rawtime; struct tm * timeinfo;
time (&rawtime); timeinfo = localtime (&rawtime); m_secsSinceMidnight = timeinfo->tm_hour * 3600 + timeinfo->tm_min * 60 + timeinfo->tm_sec; }
CTimeOfDay::CTimeOfDay(unsigned int secsSinceMidnight) { m_secsSinceMidnight = secsSinceMidnight; }
CTimeOfDay::CTimeOfDay(std::string timeOfDay) { unsigned int hours; unsigned int minutes; unsigned int seconds; sscanf(timeOfDay.c_str(), "%02u:%02u:%02u", &hours, &minutes, &seconds); m_secsSinceMidnight = hours * 3600 + minutes * 60 + seconds; }
std::string CTimeOfDay::intToString(unsigned int value) { string result = ""; do { result = (char)('0' + value % 10) + result; value /= 10; } while (value > 0); return result; }
long CTimeOfDay::getSecsSinceMidgnight() { return m_secsSinceMidnight; }
std::string CTimeOfDay::asTime() { // Ersetzen Sie die nachfolgende Anweisung! return intToString(m_secsSinceMidnight); }
|
main.cpp
C++: |
//////////////////////////////////////////////////////////////////////////////// // Header-Dateien #include <iostream> // Header f¸r die Standard-IO-Objekte (z.B. cout, cin) #include <stdlib.h> // F¸gen Sie hier weitere benˆtigte Header-Dateien der // Standard-Bibliothek ein z.B. // #include <string>
using namespace std; // Erspart den scope vor Objekte der // C++-Standard-Bibliothek zu schreiben // z.B. statt "std::cout" kann man "cout" schreiben
// Inkludieren Sie hier die Header-Files Ihrer Klassen, z.B. // #include "CFraction.h"
// Hauptprogramm // Dient als Testrahmen, von hier aus werden die Klassen aufgerufen int main (void) { // TODO: Tragen Sie hier Ihren Namen, die Matrikelnummer und die Rechnernummer ein cout << "Name: ..., Matrikelnummer: ..., Rechnernummer: ..." << endl << endl;
// Aufgabe 1:
// Aufgabe 2:
// Zus‰tzliche Eintr‰ge f¸r Aufgabe 2f) /* CDimmerLogEntry entry2(39920, 0.5); entry2.switchedOffAt(40800); log += entry2; CDimmerLogEntry entry3(43800, 0.3); entry3.switchedOffAt(60700); log += entry3; */
return 0; }
|
https://www.pic-upload.de/view-35347791/Bildschirmfoto2018-05-19um14.20.07.png.html
Zitat von Aufgabenstellung: |
Eine wichtige Information in einem Protokoll ist der Zeitpunkt. Eine effiziente Möglichkeit, die Uhrzeit zu repräsentieren, ist, die seit Mitternacht vergangenen Sekunden in einer Ganzzahl zu speichern. Leider lässt sich diese Form der Zeitangabe vom Menschen schlecht interpretieren. Daher finden Sie im Proje eine vorbereitete Klasse CTime0fDay. Sie hat ein Attribut vom Typ unsigned int, in dem die seit Mitternacht vergangenen Sekunden gespeichert werden. Die Klasse stellt u. a. einen Konstruktor zur Verfügung, mit dem eine Zeitdarstellung im 24-Stunden Format ("hh:mm:ss", mit hh=Stunden, mm=Minuten und ss=Sekunden) in ein Objekt vom Typ CTime0fDay (und damit in eine Anzahl Sekunden seit Mitternacht) umgewandelt werden kann. Weiterhin kann mit der Methode asTime () der als Ganzzahl gespeicherte Wert in das übliche 24-Stunden-Format konvertiert werden. Weitere Informationen finden Sie in den Kommentaren der Klassendefinition von CTime0fDay. Hinweis: Beachten Sie, dass Kommentare zu Attributen und Methoden immer vor deren Definition angegeben werden. Die folgenden Teilaufgaben sollen Ihnen helfen, sich mit der Klasse vertraut zu machen.
a) Leider ist in der Methode asTime () die Umwandlung in das 24-Stunden Format noch nicht implementiert (derzeit wird die Anzahl der Sekunden seit Mitternacht als Zeichenkette zurückgegeben). Korrigieren Sie die Methode so, dass eine Zeichenkette zurückgegeben wird, die die gespeicherte Uhrzeit im 24-Stunden-Format darstellt. Beachten Sie, dass bei den Angaben für Stunde, Minute und Sekunde eine führende „0" ergänzt werden muss, wenn der Wert kleiner als 10 ist.
b) Testen Sie die Methode asTime () , indem Sie in main ein Objekt „timet" vom Typ CTime0fDay für die Uhrzeit 08:30:01 erzeugen und die von asTime ( ) gelieferte Zeit auf der Konsole ausgeben.
c) Ergänzen Sie in der Klasse CTime0fDay mit „Überladen durch Methode" den int operator- (CTime0fDay rhs) , mit dem sich die zwischen zwei Zeitpunkten verstrichenen Anzahl Sekunden ermitteln lässt.
d) Testen Sie den überladenen Operator, indem Sie in main die Differenz zwischen der aktuellen Zeit und 08:30:01 auf der Konsole ausgeben (geben Sie für eine leichtere Kontrolle des Wertes am besten die Anzahl der verstrichenen Minuten aus). ,.V
|
Ich hoffe jemand kann mir bei der a) helfen? Dieser Post wurde am 23.05.2018 um 17:22 Uhr von FloSoft editiert. |