diff options
Added my work from today's exam
11 files changed, 224 insertions, 0 deletions
diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/Event.cpp b/Year 1/Object-oriented Programming/Exam 2/ex2/Event.cpp new file mode 100644 index 0000000..90c3740 --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/Event.cpp @@ -0,0 +1,18 @@ +#include "Event.h" + +void Event::setStartTime(unsigned startTime) { + this->startTime = startTime; +} + +void Event::setEndTime(unsigned endTime) { + this->endTime = endTime; +} + +Event::Event(unsigned startTime, unsigned endTime) { + setStartTime(startTime); + setEndTime(endTime); +} + +bool Event::isHappeningAt(unsigned time) const { + return time >= startTime && time <= endTime; +} diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/Event.h b/Year 1/Object-oriented Programming/Exam 2/ex2/Event.h new file mode 100644 index 0000000..a02f60c --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/Event.h @@ -0,0 +1,20 @@ +#ifndef HEADER_EVENT +#define HEADER_EVENT + +class Event { + unsigned startTime; + unsigned endTime; + +protected: + void setStartTime(unsigned startTime); + void setEndTime(unsigned endTime); + +public: + Event(unsigned startTime, unsigned endTime); + virtual bool isHappeningAt(unsigned time) const; + + virtual Event* clone() const = 0; + virtual ~Event() = default; +}; + +#endif diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.cpp b/Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.cpp new file mode 100644 index 0000000..cf96756 --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.cpp @@ -0,0 +1,54 @@ +#include "EventManager.h" + +void EventManager::copyFrom(const EventManager& other) { + events = new Event*[other.maxCount]; + for (unsigned i = 0; i < other.count; i++) + events[i] = other.events[i]->clone(); + count = other.count; + maxCount = other.maxCount; +} + +void EventManager::free() { + for (unsigned i = 0; i < count; i++) + delete events[i]; + delete[] events; +} + +EventManager::EventManager(unsigned maxCount) { + events = new Event*[maxCount]; + this->maxCount = maxCount; + count = 0; +} + +bool EventManager::addEvent(const Event* event) { + if (maxCount == count) + return false; + + events[count++] = event->clone(); + return true; +} + +unsigned EventManager::ongoingEvents(unsigned time) { + unsigned ongoing = 0; + for (unsigned i = 0; i < count; i++) + ongoing += events[i]->isHappeningAt(time); + return ongoing; +} + +EventManager::EventManager() : EventManager(1) {} + +EventManager::EventManager(const EventManager& other) { + copyFrom(other); +} + +EventManager& EventManager::operator=(const EventManager& other) { + if (this != &other) { + free(); + copyFrom(other); + } + return *this; +} + +EventManager::~EventManager() { + free(); +} diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.h b/Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.h new file mode 100644 index 0000000..f6721b7 --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/EventManager.h @@ -0,0 +1,20 @@ +#include "Event.h" + +class EventManager { + Event** events; + unsigned count; + unsigned maxCount; + + void copyFrom(const EventManager& other); + void free(); +public: + EventManager(unsigned maxCount); + + bool addEvent(const Event* event); + unsigned ongoingEvents(unsigned time); + + EventManager(); + EventManager(const EventManager& other); + EventManager& operator=(const EventManager& other); + ~EventManager(); +}; diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithFixedIntermission.cpp b/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithFixedIntermission.cpp new file mode 100644 index 0000000..17078d9 --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithFixedIntermission.cpp @@ -0,0 +1,20 @@ +#include "EventWithFixedIntermission.h" +#include <iostream> + +EventWithFixedIntermission::EventWithFixedIntermission(unsigned startTime, unsigned endTime, unsigned intermissionStart) : Event(0, 0) { + this->intermissionStart = intermissionStart; + if (endTime - startTime <= 240) { + Event::setStartTime(startTime); + Event::setEndTime(endTime); + } + else + std::cout << "Event cannot last for more than 4 hours (240 minutes)!" << std::endl; +} + +bool EventWithFixedIntermission::isHappeningAt(unsigned time) const { + return (time < intermissionStart || time > intermissionStart + 20) && Event::isHappeningAt(time); +} + +EventWithFixedIntermission* EventWithFixedIntermission::clone() const { + return new EventWithFixedIntermission(*this); +} diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithFixedIntermission.h b/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithFixedIntermission.h new file mode 100644 index 0000000..4db3c1a --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithFixedIntermission.h @@ -0,0 +1,11 @@ +#include "Event.h" + +class EventWithFixedIntermission : public Event { + unsigned intermissionStart; + +public: + EventWithFixedIntermission(unsigned startTime, unsigned endTime, unsigned intermissionStart); + virtual bool isHappeningAt(unsigned time) const override; + + EventWithFixedIntermission* clone() const override; +}; diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithIntermission.cpp b/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithIntermission.cpp new file mode 100644 index 0000000..2681b71 --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithIntermission.cpp @@ -0,0 +1,28 @@ +#include "EventWithIntermission.h" +#include <iostream> + +EventWithIntermission::EventWithIntermission(unsigned startTime, unsigned endTime, unsigned intermissionStart, unsigned intermissionEnd) : Event(0, 0) { + this->intermissionStart = this->intermissionEnd = 0; + + if (endTime - startTime <= 360) { + Event::setStartTime(startTime); + Event::setEndTime(endTime); + } + else + std::cout << "Event cannot last for more than 6 hours (360 minutes)!" << std::endl; + + if (intermissionEnd - intermissionStart >= 30 && intermissionEnd - intermissionStart <= 60) { + this->intermissionStart = intermissionStart; + this->intermissionEnd = intermissionEnd; + } + else + std::cout << "Event intermission must last between 30 and 60 minutes!" << std::endl; +} + +bool EventWithIntermission::isHappeningAt(unsigned time) const { + return (time < intermissionStart || time > intermissionEnd) && Event::isHappeningAt(time); +} + +EventWithIntermission* EventWithIntermission::clone() const { + return new EventWithIntermission(*this); +} diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithIntermission.h b/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithIntermission.h new file mode 100644 index 0000000..dbc6b4c --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/EventWithIntermission.h @@ -0,0 +1,12 @@ +#include "Event.h" + +class EventWithIntermission : public Event { + unsigned intermissionStart; + unsigned intermissionEnd; + +public: + EventWithIntermission(unsigned startTime, unsigned endTime, unsigned intermissionStart, unsigned intermissionEnd); + virtual bool isHappeningAt(unsigned time) const override; + + EventWithIntermission* clone() const override; +}; diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/SimpleEvent.cpp b/Year 1/Object-oriented Programming/Exam 2/ex2/SimpleEvent.cpp new file mode 100644 index 0000000..bca2bdf --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/SimpleEvent.cpp @@ -0,0 +1,15 @@ +#include "SimpleEvent.h" +#include <iostream> + +SimpleEvent::SimpleEvent(unsigned startTime, unsigned endTime) : Event(0, 0) { + if (endTime - startTime <= 120) { + Event::setStartTime(startTime); + Event::setEndTime(endTime); + } + else + std::cout << "Event cannot last for more than 2 hours (120 minutes)!" << std::endl; +} + +SimpleEvent* SimpleEvent::clone() const { + return new SimpleEvent(*this); +} diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/SimpleEvent.h b/Year 1/Object-oriented Programming/Exam 2/ex2/SimpleEvent.h new file mode 100644 index 0000000..b98256d --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/SimpleEvent.h @@ -0,0 +1,8 @@ +#include "Event.h" + +class SimpleEvent : public Event { +public: + SimpleEvent(unsigned startTime, unsigned endTime); + + SimpleEvent* clone() const override; +}; diff --git a/Year 1/Object-oriented Programming/Exam 2/ex2/main.cpp b/Year 1/Object-oriented Programming/Exam 2/ex2/main.cpp new file mode 100644 index 0000000..1790a48 --- /dev/null +++ b/Year 1/Object-oriented Programming/Exam 2/ex2/main.cpp @@ -0,0 +1,18 @@ +#include "EventManager.h" +#include "EventWithFixedIntermission.h" +#include "EventWithIntermission.h" +#include "SimpleEvent.h" +#include <iostream> + +int main() { + EventManager es(3); + SimpleEvent e1(10, 20); + EventWithFixedIntermission e2(30, 50, 35); + EventWithIntermission e3(90, 200, 95, 126); + + es.addEvent(&e1); + es.addEvent(&e2); + es.addEvent(&e3); + + std::cout << es.ongoingEvents(91) << std::endl; +} |
