Додана лабораторна робота № 12

This commit is contained in:
Stanislav Mykhailenko 2023-05-11 18:10:19 +03:00
parent c174fea811
commit 480acbc188
GPG key ID: 1E95E66A9C9D6A36
15 changed files with 217 additions and 0 deletions

14
lab12/README.md Executable file
View file

@ -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
Кропивницький | <a href="http://www.kntu.kr.ua/">ЦНТУ</a> | 2023

BIN
lab12/Report/Report.pdf Executable file

Binary file not shown.

BIN
lab12/Software/Teacher.exe Executable file

Binary file not shown.

View file

@ -0,0 +1,4 @@
Test 2.1 passed
Test 2.2 passed
Test 3.1 passed
Test 3.2 passed

3
lab12/TestSuite/unit.txt Executable file
View file

@ -0,0 +1,3 @@
Edge Volume Seeds
5 125 100
10 1000 200

16
lab12/prj/ModulesMykhailenko.h Executable file
View file

@ -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

View file

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="ModulesMykhailenko" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/ModulesMykhailenko" prefix_auto="1" extension_auto="1" />
<Option working_dir="" />
<Option object_output="obj/Debug/" />
<Option type="2" />
<Option compiler="gcc" />
<Option createDefFile="1" />
<Compiler>
<Add option="-Wall" />
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/ModulesMykhailenko" prefix_auto="1" extension_auto="1" />
<Option working_dir="" />
<Option object_output="obj/Release/" />
<Option type="2" />
<Option compiler="gcc" />
<Option createDefFile="1" />
<Compiler>
<Add option="-Wall" />
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Unit filename="ModulesMykhailenko.cpp" />
<Extensions />
</Project>
</CodeBlocks_project_file>

View file

@ -0,0 +1,28 @@
#include <cmath>
#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;
}

Binary file not shown.

38
lab12/prj/Teacher/Teacher.cbp Executable file
View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="Teacher" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/Teacher" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/Teacher" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler>
<Unit filename="Teacher.cpp" />
<Extensions />
</Project>
</CodeBlocks_project_file>

74
lab12/prj/Teacher/Teacher.cpp Executable file
View file

@ -0,0 +1,74 @@
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#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<vector<string>> content;
vector<string> 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]);
}
}
}

Binary file not shown.

Binary file not shown.

BIN
lab12/tasks/L-A12-var-001.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB