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