diff --git a/lab12/README.md b/lab12/README.md new file mode 100755 index 0000000..0b77123 --- /dev/null +++ b/lab12/README.md @@ -0,0 +1,14 @@ +# Лабораторна робота № 12 + +Тема Програмна реалізація абстрактних типів даних + +Мета роботи полягає у набутті ґрунтовних вмінь і практичних навичок об'єектного аналізу й проектування, створення класів C++ та тестування їх екземплярів, використання препроцесорних директив, макросів і макрооператорів під час реалізації програмних засобів у кросплатформовому середовищі Code::Blocks. + +Завдання +1. Як складову заголовкового файлу ModulesMykhailenko.h розробити клас ClassLab12_Mykhailenko — формальне представлення абстракції сутності предметної області (об'єкта) за варіантом, — поведінка об'єкта якого реалізовує розв'язування задачі 7.1. +2. Реалізувати додаток Teacher, який видає 100 звукових сигналів і в текстовий файл TestResults.txt записує рядок "Встановлені вимоги порядку виконання лабораторної роботи порушено!", якщо файл проекта main.cpp під час його компіляції знаходився не в \Lab12\prj, інакше — створює об'єкт класу ClassLab12_Mykhailenko із заголовкового файлу ModulesMykhailenko.h та виконує його unit-тестування за тест-сьютом(ами) із \Lab12\TestSuite\, протоколюючи результати тестування в текстовий файл \Lab12\TestSuite\TestResults.txt. + +Варіант № 1 + + +Кропивницький | ЦНТУ | 2023 diff --git a/lab12/Report/Report.pdf b/lab12/Report/Report.pdf new file mode 100755 index 0000000..c1335f2 Binary files /dev/null and b/lab12/Report/Report.pdf differ diff --git a/lab12/Software/Teacher.exe b/lab12/Software/Teacher.exe new file mode 100755 index 0000000..5d9f53e Binary files /dev/null and b/lab12/Software/Teacher.exe differ diff --git a/lab12/TestSuite/TestResults.txt b/lab12/TestSuite/TestResults.txt new file mode 100755 index 0000000..26b1b52 --- /dev/null +++ b/lab12/TestSuite/TestResults.txt @@ -0,0 +1,4 @@ +Test 2.1 passed +Test 2.2 passed +Test 3.1 passed +Test 3.2 passed diff --git a/lab12/TestSuite/unit.txt b/lab12/TestSuite/unit.txt new file mode 100755 index 0000000..d30e084 --- /dev/null +++ b/lab12/TestSuite/unit.txt @@ -0,0 +1,3 @@ +Edge Volume Seeds +5 125 100 +10 1000 200 diff --git a/lab12/prj/ModulesMykhailenko.h b/lab12/prj/ModulesMykhailenko.h new file mode 100755 index 0000000..2f5a0fd --- /dev/null +++ b/lab12/prj/ModulesMykhailenko.h @@ -0,0 +1,16 @@ +#ifndef MODULESMYKHAILENKO_H_INCLUDED +#define MODULESMYKHAILENKO_H_INCLUDED + +class ClassLab12_Mykhailenko { + private: + float edge; + unsigned int seeds; + public: + ClassLab12_Mykhailenko(float, unsigned int); + float getVolume(); + int getSeeds(); + bool setEdge(float); + void setSeeds(unsigned int); +}; + +#endif // MODULESMYKHAILENKO_H_INCLUDED diff --git a/lab12/prj/ModulesMykhailenko/ModulesMykhailenko.cbp b/lab12/prj/ModulesMykhailenko/ModulesMykhailenko.cbp new file mode 100755 index 0000000..ae8b833 --- /dev/null +++ b/lab12/prj/ModulesMykhailenko/ModulesMykhailenko.cbp @@ -0,0 +1,40 @@ + + + + + + diff --git a/lab12/prj/ModulesMykhailenko/ModulesMykhailenko.cpp b/lab12/prj/ModulesMykhailenko/ModulesMykhailenko.cpp new file mode 100755 index 0000000..3e97deb --- /dev/null +++ b/lab12/prj/ModulesMykhailenko/ModulesMykhailenko.cpp @@ -0,0 +1,28 @@ +#include +#include "ModulesMykhailenko.h" + +ClassLab12_Mykhailenko::ClassLab12_Mykhailenko(float edgeToSet, unsigned int seedsToSet) { + edge = edgeToSet; + seeds = seedsToSet; +} + +float ClassLab12_Mykhailenko::getVolume() { + return pow(edge, 3); +} + +int ClassLab12_Mykhailenko::getSeeds() { + return seeds; +} + +bool ClassLab12_Mykhailenko::setEdge(float edgeToSet) { + if (edgeToSet > 0) { + edge = edgeToSet; + return true; + } else { + return false; + } +} + +void ClassLab12_Mykhailenko::setSeeds(unsigned int seedsToSet) { + seeds = seedsToSet; +} diff --git a/lab12/prj/ModulesMykhailenko/bin/Debug/libModulesMykhailenko.a b/lab12/prj/ModulesMykhailenko/bin/Debug/libModulesMykhailenko.a new file mode 100755 index 0000000..925f20c Binary files /dev/null and b/lab12/prj/ModulesMykhailenko/bin/Debug/libModulesMykhailenko.a differ diff --git a/lab12/prj/ModulesMykhailenko/obj/Debug/ModulesMykhailenko.o b/lab12/prj/ModulesMykhailenko/obj/Debug/ModulesMykhailenko.o new file mode 100755 index 0000000..d611537 Binary files /dev/null and b/lab12/prj/ModulesMykhailenko/obj/Debug/ModulesMykhailenko.o differ diff --git a/lab12/prj/Teacher/Teacher.cbp b/lab12/prj/Teacher/Teacher.cbp new file mode 100755 index 0000000..07085a1 --- /dev/null +++ b/lab12/prj/Teacher/Teacher.cbp @@ -0,0 +1,38 @@ + + + + + + diff --git a/lab12/prj/Teacher/Teacher.cpp b/lab12/prj/Teacher/Teacher.cpp new file mode 100755 index 0000000..8012d65 --- /dev/null +++ b/lab12/prj/Teacher/Teacher.cpp @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include +#include "ModulesMykhailenko.h" + +using namespace std; + +int main() { + ofstream result; + result.open("../../TestSuite/TestResults.txt"); + if (!result) + return 1; + + string path = __FILE__; + + if (path.find("\\lab12\\prj") == string::npos) { + for (int i = 0; i < 100; i++) + cout << "\a"; + result << "Встановлені вимоги порядку виконання лабораторної роботи порушено!" << endl; + return 2; + } + + ifstream testsuite; + testsuite.open("../../TestSuite/unit.txt"); + + vector> content; + vector row; + string line, word; + unsigned int lines = 0; + bool firstLine = true; + + if (testsuite.is_open()) { + while(getline(testsuite, line)) { + if (firstLine) { + firstLine = false; + continue; + } + + row.clear(); + + stringstream str(line); + + while(getline(str, word, '\u0009')) + row.push_back(word); + content.push_back(row); + lines++; + } + } else + return 3; + + float edge[lines]; + float expectedVolume[lines]; + unsigned int expectedSeeds[lines]; + + for (unsigned int i = 0; i < content.size(); i++) { + edge[i] = stof(content[i][0]); + expectedVolume[i] = stof(content[i][1]); + expectedSeeds[i] = stoi(content[i][2]); + } + + ClassLab12_Mykhailenko *classLab = new ClassLab12_Mykhailenko(edge[0], expectedSeeds[0]); + for (unsigned int i = 0; i < lines; i++) { + float volume = classLab->getVolume(); + unsigned int seeds = classLab->getSeeds(); + result << "Test " << i + 2 << ".1 " << (volume == expectedVolume[i] ? "passed" : "failed") << endl; + result << "Test " << i + 2 << ".2 " << (seeds == expectedSeeds[i] ? "passed" : "failed") << endl; + if (i + 1 != lines) { + classLab->setEdge(edge[i + 1]); + classLab->setSeeds(expectedSeeds[i + 1]); + } + } +} diff --git a/lab12/prj/Teacher/bin/Debug/Teacher.exe b/lab12/prj/Teacher/bin/Debug/Teacher.exe new file mode 100755 index 0000000..5d9f53e Binary files /dev/null and b/lab12/prj/Teacher/bin/Debug/Teacher.exe differ diff --git a/lab12/prj/Teacher/obj/Debug/Teacher.o b/lab12/prj/Teacher/obj/Debug/Teacher.o new file mode 100755 index 0000000..34ab664 Binary files /dev/null and b/lab12/prj/Teacher/obj/Debug/Teacher.o differ diff --git a/lab12/tasks/L-A12-var-001.jpg b/lab12/tasks/L-A12-var-001.jpg new file mode 100755 index 0000000..d0d049e Binary files /dev/null and b/lab12/tasks/L-A12-var-001.jpg differ