From b18d091370ba26b50ff7e39e44466539a9fd48c7 Mon Sep 17 00:00:00 2001 From: Dmitriy Gorshenin Date: Sat, 14 May 2022 15:22:55 +0300 Subject: [PATCH] =?UTF-8?q?3=20=D1=81=D0=B5=D0=BC=D0=B5=D1=81=D1=82=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Part1/Lab1/Mashinnoe/Lab1_1.cpp | 255 ++++++++++++ Part1/Lab1/Mashinnoe/Lab1_1.sln | 31 ++ Part1/Lab1/Mashinnoe/Lab1_1.vcxproj | 150 +++++++ Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.filters | 27 ++ Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.user | 4 + Part1/Lab1/Mashinnoe/Test_result.txt | 60 +++ Part1/Lab1/Mashinnoe/zavtrak.cpp | 189 +++++++++ Part1/Lab1/Massiv_simv/Lab1_3.cpp | 288 ++++++++++++++ Part1/Lab1/Massiv_simv/Test_result.txt | 60 +++ Part1/Lab1/Massiv_simv/lab1_3.sln | 31 ++ Part1/Lab1/Massiv_simv/lab1_3.vcxproj | 150 +++++++ Part1/Lab1/Massiv_simv/lab1_3.vcxproj.filters | 27 ++ Part1/Lab1/Massiv_simv/lab1_3.vcxproj.user | 4 + Part1/Lab1/Spiski/Lab1_2.cpp | 376 ++++++++++++++++++ Part1/Lab1/Spiski/Lab1_2.sln | 31 ++ Part1/Lab1/Spiski/Lab1_2.vcxproj | 150 +++++++ Part1/Lab1/Spiski/Lab1_2.vcxproj.filters | 27 ++ Part1/Lab1/Spiski/Lab1_2.vcxproj.user | 4 + Part1/Lab1/Spiski/Test_result.txt | 60 +++ Part1/Lab1/Vector_bit/Lab1.cpp | 246 ++++++++++++ Part1/Lab1/Vector_bit/Lab1.sln | 31 ++ Part1/Lab1/Vector_bit/Lab1.vcxproj | 150 +++++++ Part1/Lab1/Vector_bit/Lab1.vcxproj.filters | 27 ++ Part1/Lab1/Vector_bit/Lab1.vcxproj.user | 4 + Part1/Lab1/Vector_bit/Test_result.txt | 72 ++++ Part1/Lab2/Lab2.cpp | 26 ++ Part1/Lab2/Lab2.sln | 31 ++ Part1/Lab2/Lab2.vcxproj | 153 +++++++ Part1/Lab2/Lab2.vcxproj.filters | 36 ++ Part1/Lab2/Lab2.vcxproj.user | 4 + Part1/Lab2/Set1.h | 118 ++++++ Part1/Lab2/Set2.h | 122 ++++++ Part1/Lab2/Set3.h | 114 ++++++ Part1/Lab2/Set4.h | 208 ++++++++++ Part1/Lab3/main.cpp | 281 +++++++++++++ 35 files changed, 3547 insertions(+) create mode 100644 Part1/Lab1/Mashinnoe/Lab1_1.cpp create mode 100644 Part1/Lab1/Mashinnoe/Lab1_1.sln create mode 100644 Part1/Lab1/Mashinnoe/Lab1_1.vcxproj create mode 100644 Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.filters create mode 100644 Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.user create mode 100644 Part1/Lab1/Mashinnoe/Test_result.txt create mode 100644 Part1/Lab1/Mashinnoe/zavtrak.cpp create mode 100644 Part1/Lab1/Massiv_simv/Lab1_3.cpp create mode 100644 Part1/Lab1/Massiv_simv/Test_result.txt create mode 100644 Part1/Lab1/Massiv_simv/lab1_3.sln create mode 100644 Part1/Lab1/Massiv_simv/lab1_3.vcxproj create mode 100644 Part1/Lab1/Massiv_simv/lab1_3.vcxproj.filters create mode 100644 Part1/Lab1/Massiv_simv/lab1_3.vcxproj.user create mode 100644 Part1/Lab1/Spiski/Lab1_2.cpp create mode 100644 Part1/Lab1/Spiski/Lab1_2.sln create mode 100644 Part1/Lab1/Spiski/Lab1_2.vcxproj create mode 100644 Part1/Lab1/Spiski/Lab1_2.vcxproj.filters create mode 100644 Part1/Lab1/Spiski/Lab1_2.vcxproj.user create mode 100644 Part1/Lab1/Spiski/Test_result.txt create mode 100644 Part1/Lab1/Vector_bit/Lab1.cpp create mode 100644 Part1/Lab1/Vector_bit/Lab1.sln create mode 100644 Part1/Lab1/Vector_bit/Lab1.vcxproj create mode 100644 Part1/Lab1/Vector_bit/Lab1.vcxproj.filters create mode 100644 Part1/Lab1/Vector_bit/Lab1.vcxproj.user create mode 100644 Part1/Lab1/Vector_bit/Test_result.txt create mode 100644 Part1/Lab2/Lab2.cpp create mode 100644 Part1/Lab2/Lab2.sln create mode 100644 Part1/Lab2/Lab2.vcxproj create mode 100644 Part1/Lab2/Lab2.vcxproj.filters create mode 100644 Part1/Lab2/Lab2.vcxproj.user create mode 100644 Part1/Lab2/Set1.h create mode 100644 Part1/Lab2/Set2.h create mode 100644 Part1/Lab2/Set3.h create mode 100644 Part1/Lab2/Set4.h create mode 100644 Part1/Lab3/main.cpp diff --git a/Part1/Lab1/Mashinnoe/Lab1_1.cpp b/Part1/Lab1/Mashinnoe/Lab1_1.cpp new file mode 100644 index 0000000..fa276ef --- /dev/null +++ b/Part1/Lab1/Mashinnoe/Lab1_1.cpp @@ -0,0 +1,255 @@ +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +const char universum[] = "ABCDEFGHIJKMNLOPQRSTUVWXYZ"; +const char filename[] = "Test_result.txt"; +const int length = 26; +const int durationCoeff = 1000000; +int customTestAmount = 0; +char stringA[length], stringB[length], stringC[length], stringD[length]; +unsigned int vectorA, vectorB, vectorC, vectorD, vectorF; + + +void setupConsole() +{ + setlocale(LC_ALL, "Russian"); + SetConsoleOutputCP(1251); + SetConsoleCP(1251); + cout << fixed; + cout << setprecision(7); +} + +void outputGreeting() +{ + cout << "Программа рассчитывает значение множества F согласно следующим законам - " << endl; + cout << "F = D && (A || B) && !C, что равносильно F = D*(A + B) - C." << endl; + cout << "Универсум: " << universum << endl; +} + +void input() +{ + cout << endl; + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Введите множество A: "; + cin >> stringA; + cout << "Введите множество B: "; + cin >> stringB; + cout << "Введите множество C: "; + cin >> stringC; + cout << "Введите множество D: "; + cin >> stringD; + + cout << endl; +} + +bool isCorrectSymbol(char symbol) +{ + return ((symbol >= universum[0] && symbol <= universum[length - 1]) || symbol == '\0') ? 1 : 0; +} + +bool isStringCorrect(char* string) +{ + for (int i = 0; i < length && string[i] != '\0'; i++) + if (!isCorrectSymbol(string[i])) + return 0; + return 1; +} + +int memberToIndex(char member) +{ + return member - universum[0]; +} + +char indexToMember(int number) +{ + return number + universum[0]; +} + +unsigned int vectorFromString(const char string[]) +{ + int vector = 0; + for (int i = 0; string[i]; ++i) + vector |= (1 << memberToIndex(string[i])); + return vector; +}; + +void convertSets() +{ + vectorA = vectorFromString(stringA); + vectorB = vectorFromString(stringB); + vectorC = vectorFromString(stringC); + vectorD = vectorFromString(stringD); +} + +void calculateAnswer() +{ + vectorF = vectorD & (vectorA | vectorB) & ~vectorC; +} + +void outputSetToConsole(int vector) +{ + for (int i = 0, k = 0; i < length; ++i) + if ((vector >> i) & 1) + cout << indexToMember(i); +} + +void outputSetToFile(int vector, ofstream& output) +{ + for (int i = 0, k = 0; i < length; ++i) + if ((vector >> i) & 1) + output << indexToMember(i); +} + +bool isSetEmpty(int vector) +{ + if (vector == 0) + return 1; + else return 0; +} + +void outputAnswer() +{ + cout << "Ответ: F = "; + if (isSetEmpty(vectorF)) + cout << "пустое множество"; + else + outputSetToConsole(vectorF); + cout << endl; +} + +double calulateDuration() +{ + double firstPoint, lastPoint, duration = 0; + for (int i = 0; i < durationCoeff; i++) + { + firstPoint = clock(); + calculateAnswer(); + lastPoint = clock(); + duration += lastPoint - firstPoint; + } + return duration / durationCoeff; +} + +void outputDuration() +{ + cout << endl; + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Временная сложность алгоритма - O(1), постоянное время" << endl; + cout << "На выполнение алгоритма уходит " << calulateDuration() << " секунд." << endl; + cout << endl; +} + +float factorial(int number) +{ + float factorial = 1; + for (int i = 1; i <= number; i++) + factorial *= i; + return factorial; +} + +int randomInt(int max) +{ + return rand() % (max + 1); +} + +unsigned int randomVector(long long max) +{ + return (rand() * 2 + randomInt(1)) * (rand() * 2 + randomInt(3)); +} + +void fillVectors() +{ + unsigned int maxVector = pow(2, length) - 1; + for (int i = 0; i < length; i++) + { + vectorA = randomVector(maxVector); + vectorB = randomVector(maxVector); + vectorC = randomVector(maxVector); + vectorD = randomVector(maxVector); + } +} + +void badInputLoop() +{ + while (cin.fail() || customTestAmount < 0) + { + cout << "Неправильный ввод, повторите еще раз:" << endl; + cin.clear(); + cin.ignore(32767, '\n'); + cin >> customTestAmount; + } +} + +void testInfo() +{ + cout << setprecision(0); + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Из 26 символов может быть составлено " << factorial(length) << " перестановок" << endl; + cout << "Сколько программа должна проделать тестов со случайными комбинациями?" << endl; + cin >> customTestAmount; + badInputLoop(); + if (customTestAmount > 0) + cout << "Отчеты будут выведены в файл " << filename << endl; + else cout << "Тесты не будут проделаны" << endl; +} + +void outputTestAnswer(ofstream& output) +{ + if (isSetEmpty(vectorF)) + output << "пустое множество"; + else + outputSetToFile(vectorF, output); +} + +void executeTest() +{ + ofstream output; + output.open(filename); + for (int i = 0; i < customTestAmount; i++) + { + fillVectors(); + vectorF = 0; + output << "Множество A: "; + outputSetToFile(vectorA, output); + output << endl; + output << "Множество B: "; + outputSetToFile(vectorB, output); + output << endl; + output << "Множество C: "; + outputSetToFile(vectorC, output); + output << endl; + output << "Множество D: "; + outputSetToFile(vectorD, output); + output << endl; + calculateAnswer(); + output << "Ответ: F = "; + outputTestAnswer(output); + output << endl; + output << '*' << endl; + } + output.close(); +} + +int main() +{ + setupConsole(); + outputGreeting(); + input(); + while (!isStringCorrect(stringA) || !isStringCorrect(stringB) || !isStringCorrect(stringC) || !isStringCorrect(stringD)) + { + cout << "Некорректный ввод" << endl; + input(); + } + convertSets(); + calculateAnswer(); + outputAnswer(); + outputDuration(); + testInfo(); + executeTest(); +} \ No newline at end of file diff --git a/Part1/Lab1/Mashinnoe/Lab1_1.sln b/Part1/Lab1/Mashinnoe/Lab1_1.sln new file mode 100644 index 0000000..3fb184a --- /dev/null +++ b/Part1/Lab1/Mashinnoe/Lab1_1.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31025.194 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lab1_1", "Lab1_1.vcxproj", "{8E1DEADF-98BA-4947-9AED-5486C2F7B9F5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8E1DEADF-98BA-4947-9AED-5486C2F7B9F5}.Debug|x64.ActiveCfg = Debug|x64 + {8E1DEADF-98BA-4947-9AED-5486C2F7B9F5}.Debug|x64.Build.0 = Debug|x64 + {8E1DEADF-98BA-4947-9AED-5486C2F7B9F5}.Debug|x86.ActiveCfg = Debug|Win32 + {8E1DEADF-98BA-4947-9AED-5486C2F7B9F5}.Debug|x86.Build.0 = Debug|Win32 + {8E1DEADF-98BA-4947-9AED-5486C2F7B9F5}.Release|x64.ActiveCfg = Release|x64 + {8E1DEADF-98BA-4947-9AED-5486C2F7B9F5}.Release|x64.Build.0 = Release|x64 + {8E1DEADF-98BA-4947-9AED-5486C2F7B9F5}.Release|x86.ActiveCfg = Release|Win32 + {8E1DEADF-98BA-4947-9AED-5486C2F7B9F5}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {83E70304-D43D-4184-9D07-00854F397EB3} + EndGlobalSection +EndGlobal diff --git a/Part1/Lab1/Mashinnoe/Lab1_1.vcxproj b/Part1/Lab1/Mashinnoe/Lab1_1.vcxproj new file mode 100644 index 0000000..d137fe3 --- /dev/null +++ b/Part1/Lab1/Mashinnoe/Lab1_1.vcxproj @@ -0,0 +1,150 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {8e1deadf-98ba-4947-9aed-5486c2f7b9f5} + Lab11 + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.filters b/Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.filters new file mode 100644 index 0000000..bbbed9d --- /dev/null +++ b/Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Исходные файлы + + + + + Файлы ресурсов + + + \ No newline at end of file diff --git a/Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.user b/Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.user new file mode 100644 index 0000000..0f14913 --- /dev/null +++ b/Part1/Lab1/Mashinnoe/Lab1_1.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Part1/Lab1/Mashinnoe/Test_result.txt b/Part1/Lab1/Mashinnoe/Test_result.txt new file mode 100644 index 0000000..55e3b40 --- /dev/null +++ b/Part1/Lab1/Mashinnoe/Test_result.txt @@ -0,0 +1,60 @@ + A: CDEHJKMNOTUVWYZ + B: CDEFGHJMQRSUVX + C: ACDEJNOPSUVWY + D: BEFGHJKLMNOPRTUVYZ +: F = FGHKMRTZ +* + A: CEFILMRSWY + B: BCFIJKNOPRSTVWY + C: BDEFIJKMOPQTUXYZ + D: CHLMNSUYZ +: F = CLNS +* + A: ABCEFGIJKNOQRTUVXYZ + B: GHINPRSXYZ + C: BCHJMNPQRSVWXZ + D: DEGLMNOPQWYZ +: F = EGOY +* + A: AHIJKMNOPQRSU + B: BEFGHIMNOQRSTVWXZ + C: BDEHIJKLOUVXY + D: BCDEFLNQSUVWXY +: F = FNQSW +* + A: AEFGJLNPVX + B: BFJNOQRTVXY + C: EFIJKMNOQRUXYZ + D: MNPRT +: F = PT +* + A: BCDEFHMOPRSTUX + B: DEIKPQRTVWZ + C: BCFJKMNOPRSXYZ + D: DHIKLOPQTY +: F = DHIQT +* + A: ABDGIJKMSVWXZ + B: CIMNOPQRSUVW + C: BCDFIKNSTUVWY + D: CGHIJLMRSUWXYZ +: F = GJMRXZ +* + A: ABDEHIRSTUWZ + B: ABDGIJLOSTUZ + C: ACEFHLOPTUWX + D: CIKNOPQZ +: F = IZ +* + A: CDEIJLMOQSTUWYZ + B: CFJKLMNOQTUVWXZ + C: AEJKMPRSWZ + D: ABFHIKLMORTY +: F = FILOTY +* + A: AHJLMNUVXYZ + B: BFHIJKLNORTVYZ + C: FGJKLNPRSWX + D: CHINPQRSTUV +: F = HITUV +* diff --git a/Part1/Lab1/Mashinnoe/zavtrak.cpp b/Part1/Lab1/Mashinnoe/zavtrak.cpp new file mode 100644 index 0000000..d956836 --- /dev/null +++ b/Part1/Lab1/Mashinnoe/zavtrak.cpp @@ -0,0 +1,189 @@ +#include +#include +#include +#include +#include +#include +using namespace std; + +const int length = 32; +const char universum[] = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; +char stringA[length]; +char stringB[length]; +char stringC[length]; +char stringD[length]; +bool vectorA[length], vectorB[length], vectorC[length], vectorD[length], vectorF[length]; +double firstTimePoint, lastTimePoint, totalTime = 0; +const char filename[] = "output.txt"; +const int testAmount = 10; + + + +void setupConsole() +{ + setlocale(LC_ALL, "Russian"); + SetConsoleOutputCP(1251); + SetConsoleCP(1251); +} + +void outputGreeting() +{ + cout << "Программа рассчитывает значение множества F согласно следующим законам - " << endl; + cout << "F = A - (B v C v D), что равносильно F = A - B - C - D." << endl; + cout << "Универсум: " << universum << endl; +} + +void input() +{ + cout << endl; + cout << "Введите множество A: "; + cin >> stringA; + cout << "Введите множество B: "; + cin >> stringB; + cout << "Введите множество C: "; + cin >> stringC; + cout << "Введите множество D: "; + cin >> stringD; + + cout << endl; +} + +int memberToIndex(char member) +{ + return member - 'А'; +} + +char indexToMember(int number) +{ + return number + 'А'; +} + +void vectorFromString(bool*vector, const char string[]) +{ + for (int i = 0; string[i]; i++) + vector[memberToIndex(string[i])] = 1; +}; + +void convertSets() +{ + vectorFromString(vectorA, stringA); + vectorFromString(vectorB, stringB); + vectorFromString(vectorC, stringC); + vectorFromString(vectorD, stringD); +} + +void calculateAnswer() +{ + for (int i = 0; i < length; i++) + vectorF[i] = (vectorA[i] && !vectorB[i] && !vectorC[i] && !vectorD[i]); +} + +void outputSetToConsole(bool(&vector)[length]) +{ + for (int i = 0; i < length; ++i) + if (vector[i]) + cout << indexToMember(i); +} + +void outputSetToFile(bool(&vector)[length], ofstream& output) +{ + for (int i = 0; i < length; ++i) + if (vector[i]) + output << indexToMember(i); +} + +void executeTask() +{ + convertSets(); + calculateAnswer(); +} + +void outputAnswer() +{ + cout << "Ответ: F = "; + outputSetToConsole(vectorF); + cout << endl; +} + +int factorial(int number) +{ + int factorial = 1; + for (int i = 1; i <= number; i++) + factorial *= number; + return factorial; +} + +bool randomBool() +{ + return rand() % 2; +} + +void fillVectors() +{ + for (int i = 0; i < length; i++) + { + vectorA[i] = randomBool(); + vectorB[i] = randomBool(); + vectorC[i] = randomBool(); + vectorD[i] = randomBool(); + } +} + +void clearAnswerVector() +{ + for (int i = 0; i < length; i++) + vectorF[i] = 0; +} + +void executeTest() +{ + ofstream output; + output.open(filename); + for (int i = 0; i < testAmount; i++) + { + fillVectors(); + clearAnswerVector(); + output << "Множество A: "; + outputSetToFile(vectorA, output); + output << endl; + output << "Множество B: "; + outputSetToFile(vectorB, output); + output << endl; + output << "Множество C: "; + outputSetToFile(vectorC, output); + output << endl; + output << "Множество D: "; + outputSetToFile(vectorD, output); + output << endl; + firstTimePoint = clock(); + calculateAnswer(); + lastTimePoint = clock(); + totalTime += lastTimePoint - firstTimePoint; + output << "Ответ: F = "; + outputSetToFile(vectorF, output); + output << endl; + output << '*' << endl; + } + output.close(); +} + +void outputTestInfo() +{ + cout << endl; + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Из 33 символов может быть составлено " << factorial(length) << " перестановок" << endl; + cout << "Программой будут рассмотрены лишь " << testAmount << " случайных комбинаций" << endl; + cout << "Отчеты будут выведены в файл output.txt" << endl; + cout << "На выполнение алгоритма уходит " << totalTime / 1000 << " секунд." << endl; +} + +int main() +{ + setupConsole(); + outputGreeting(); + input(); + executeTask(); + outputAnswer(); + executeTest(); + outputTestInfo(); +} diff --git a/Part1/Lab1/Massiv_simv/Lab1_3.cpp b/Part1/Lab1/Massiv_simv/Lab1_3.cpp new file mode 100644 index 0000000..85499fd --- /dev/null +++ b/Part1/Lab1/Massiv_simv/Lab1_3.cpp @@ -0,0 +1,288 @@ +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +const char universum[] = "ABCDEFGHIJKMNLOPQRSTUVWXYZ"; +const char filename[] = "Test_result.txt"; +const int length = 26; +const int durationCoeff = 1000000; +int customTestAmount = 0; +char stringA[length], stringB[length], stringC[length], stringD[length]; +char vectorA[length], vectorB[length], vectorC[length], vectorD[length], vectorF[length]; + + +void setupConsole() +{ + setlocale(LC_ALL, "Russian"); + SetConsoleOutputCP(1251); + SetConsoleCP(1251); + cout << fixed << setprecision(7); +} + +void outputGreeting() +{ + cout << "Программа рассчитывает значение множества F согласно следующим законам - " << endl; + cout << "F = D && (A || B) && !C, что равносильно F = D*(A + B) - C." << endl; + cout << "Универсум: " << universum << endl; +} + +void input() +{ + cout << endl; + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Введите множество A: "; + cin >> stringA; + cout << "Введите множество B: "; + cin >> stringB; + cout << "Введите множество C: "; + cin >> stringC; + cout << "Введите множество D: "; + cin >> stringD; + + cout << endl; +} + +bool isCorrectSymbol(char symbol) +{ + return ((symbol >= universum[0] && symbol <= universum[length - 1]) || symbol == '\0') ? 1 : 0; +} + +bool isStringCorrect(char* string) +{ + for (int i = 0; i < length && string[i] != '\0'; i++) + if (!isCorrectSymbol(string[i])) + return 0; + return 1; +} + +int memberToIndex(char member) +{ + return member - universum[0]; +} + +char indexToMember(int number) +{ + return number + universum[0]; +} + +void vectorFromString(char* vector, const char string[]) +{ + for (int i = 0; string[i]; i++) { + int j = 0; + for (j = 0; j < i; j++) { + if (memberToIndex(string[i]) < memberToIndex(vector[j])) { + for (int k = i + 1; k > j; k--) { + vector[k] = vector[k - 1]; + } + break; + } + if (memberToIndex(string[i]) == memberToIndex(vector[j])) { + j = -1; + break; + } + } + if(j != -1) vector[j] = string[i]; + } +}; + +void convertSets() +{ + vectorFromString(vectorA, stringA); + vectorFromString(vectorB, stringB); + vectorFromString(vectorC, stringC); + vectorFromString(vectorD, stringD); +} + +void calculateAnswer() +{ + for (int i = 0; vectorA[i]; i++) + vectorF[i] = vectorA[i]; + + int j = 0; + for (int i = 0; vectorB[i]; i++) { + while (j < strlen(vectorF) && memberToIndex(vectorB[i]) > memberToIndex(vectorF[j])) j++; + if (memberToIndex(vectorB[i]) != memberToIndex(vectorF[j])) { + for (int k = strlen(vectorF); k >= j; k--) vectorF[k + 1] = vectorF[k]; + vectorF[j] = vectorB[i]; + } + } + + j = 0; + for (int i = 0; vectorC[i]; i++) { + while (j < strlen(vectorF) && memberToIndex(vectorC[i]) > memberToIndex(vectorF[j])) j++; + if (memberToIndex(vectorC[i]) == memberToIndex(vectorF[j])) { + for (int k = j; k < strlen(vectorF); k++) vectorF[k] = vectorF[k + 1]; + } + } + + j = 0; + for (int i = 0; vectorD[i]; i++) { + while (j < strlen(vectorF) && memberToIndex(vectorD[i]) > memberToIndex(vectorF[j])) { + for (int k = j; k < strlen(vectorF); k++) vectorF[k] = vectorF[k + 1]; + } + if (memberToIndex(vectorD[i]) == memberToIndex(vectorF[j])) j++; + } + for (j; j < strlen(vectorF); j++) { + vectorF[j] = '\0'; + } +} + +void outputSetToConsole(char* vector) +{ + for (int i = 0; vector[i]; i++) + cout << vector[i]; +} + +void outputSetToFile(char* vector, ofstream& output) +{ + for (int i = 0; vector[i]; i++) + output << vector[i]; +} + +bool isSetEmpty(char* vector) +{ + return (vector[0] == '\0') ? true : false; +} + +void outputAnswer() +{ + cout << "Ответ: F = "; + if (isSetEmpty(vectorF)) + cout << "пустое множество"; + else + outputSetToConsole(vectorF); + cout << endl; +} + +double calulateDuration() +{ + double firstPoint, lastPoint, duration = 0; + for (int i = 0; i < durationCoeff; i++) + { + firstPoint = clock(); + calculateAnswer(); + lastPoint = clock(); + duration += lastPoint - firstPoint; + } + return duration / durationCoeff; +} + +void outputDuration() +{ + cout << endl; + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Временная сложность алгоритма - O(1), постоянное время" << endl; + cout << "На выполнение алгоритма уходит " << calulateDuration() << " секунд." << endl; + cout << endl; +} + +float factorial(int number) +{ + float factorial = 1; + for (int i = 1; i <= number; i++) + factorial *= i; + return factorial; +} + +bool randomVector() +{ + return rand() % 2; +} + +void fillVectors() +{ + for (int i = 0; i < length; i++) { + vectorA[i] = '\0'; + vectorB[i] = '\0'; + vectorC[i] = '\0'; + vectorD[i] = '\0'; + } + for (int i = 0; i < length; i++) { + if (randomVector()) vectorA[strlen(vectorA)] = indexToMember(i); + if (randomVector()) vectorB[strlen(vectorB)] = indexToMember(i); + if (randomVector()) vectorC[strlen(vectorC)] = indexToMember(i); + if (randomVector()) vectorD[strlen(vectorD)] = indexToMember(i); + } +} + +void clearAnswerVector() +{ + for (int i = 0; i < strlen(vectorF); i++) + vectorF[i] = '\0'; +} + +void badInputLoop() +{ + while (cin.fail() || customTestAmount < 0) + { + cout << "Неправильный ввод, повторите еще раз:" << endl; + cin.clear(); + cin.ignore(32767, '\n'); + cin >> customTestAmount; + } +} + +void testInfo() +{ + cout << setprecision(0); + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Из 26 символов может быть составлено " << factorial(length) << " перестановок" << endl; + cout << "Сколько программа должна проделать тестов со случайными комбинациями?" << endl; + cin >> customTestAmount; + badInputLoop(); + if (customTestAmount > 0) + cout << "Отчеты будут выведены в файл " << filename << endl; + else cout << "Тесты не будут проделаны" << endl; +} + +void executeTest() +{ + ofstream output; + output.open(filename); + for (int i = 0; i < customTestAmount; i++) + { + fillVectors(); + clearAnswerVector(); + output << "Множество A: "; + outputSetToFile(vectorA, output); + output << endl; + output << "Множество B: "; + outputSetToFile(vectorB, output); + output << endl; + output << "Множество C: "; + outputSetToFile(vectorC, output); + output << endl; + output << "Множество D: "; + outputSetToFile(vectorD, output); + output << endl; + calculateAnswer(); + output << "Ответ: F = "; + outputSetToFile(vectorF, output); + output << endl; + output << '*' << endl; + } + output.close(); +} + +int main() +{ + setupConsole(); + outputGreeting(); + input(); + while (!isStringCorrect(stringA) || !isStringCorrect(stringB) || !isStringCorrect(stringC) || !isStringCorrect(stringD)) + { + cout << "Некорректный ввод" << endl; + input(); + } + convertSets(); + calculateAnswer(); + outputAnswer(); + outputDuration(); + testInfo(); + executeTest(); +} \ No newline at end of file diff --git a/Part1/Lab1/Massiv_simv/Test_result.txt b/Part1/Lab1/Massiv_simv/Test_result.txt new file mode 100644 index 0000000..4062768 --- /dev/null +++ b/Part1/Lab1/Massiv_simv/Test_result.txt @@ -0,0 +1,60 @@ + A: ABDEFIJKLMOUWZ + B: ADHJKNOPSTUXZ + C: CDEGHIJLMNOTXYZ + D: CDFKLNRWY +: F = FKW +* + A: BDFGHIJKLTVY + B: DFIJKNOPSVWXZ + C: ABDEFIJKMPQTWXYZ + D: BCIJNOPRTVWY +: F = NOV +* + A: CDGNOPSTVWYZ + B: ABCDIJKLPQTUVXY + C: BCGJMPQRSWZ + D: CDFGIMORSTWY +: F = DIOTY +* + A: BCDFHJMOPRVWYZ + B: ACDEGHNPRSUVXYZ + C: ABDHJKLMSUWZ + D: ABCFGHILNPRVY +: F = CFGNPRVY +* + A: ABCEGHIKLMPRSUX + B: COUXZ + C: ABEFIQRSTUWX + D: ABFGIKMNOPQRUWYZ +: F = GKMOPZ +* + A: BDEGHIKMNOPSTVY + B: ABCEIJKNRSUVZ + C: BCDEFGKLMNQRSTUVWXY + D: JKMNOQRUWXZ +: F = JOZ +* + A: BFGHIKLNOPQRUVWZ + B: BEHJLMPRSVWX + C: ABCIJMOPQRTXY + D: BCDEGILMNOQSVWY +: F = EGLNSVW +* + A: BDFGKLMNPTVXZ + B: ADFJKLNSXYZ + C: ACDEFGHJMNQSTUWX + D: ABHIJKLMNQRTUVW +: F = BKLV +* + A: BDGHJLNPQRTVWYZ + B: BGHJQTUVWZ + C: CHKLMPUXZ + D: BCDFGMOQRSTUWYZ +: F = BDGQRTWY +* + A: ABCEGHJLMQRTUVXZ + B: ACFGILMNRVWX + C: BFHIJMOQUWY + D: BCFJLMNOPSVY +: F = CLNV +* diff --git a/Part1/Lab1/Massiv_simv/lab1_3.sln b/Part1/Lab1/Massiv_simv/lab1_3.sln new file mode 100644 index 0000000..cf1f558 --- /dev/null +++ b/Part1/Lab1/Massiv_simv/lab1_3.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30804.86 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lab1_3", "lab1_3.vcxproj", "{945AD67E-9CAA-4BA6-B7B2-937E53F8E45B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {945AD67E-9CAA-4BA6-B7B2-937E53F8E45B}.Debug|x64.ActiveCfg = Debug|x64 + {945AD67E-9CAA-4BA6-B7B2-937E53F8E45B}.Debug|x64.Build.0 = Debug|x64 + {945AD67E-9CAA-4BA6-B7B2-937E53F8E45B}.Debug|x86.ActiveCfg = Debug|Win32 + {945AD67E-9CAA-4BA6-B7B2-937E53F8E45B}.Debug|x86.Build.0 = Debug|Win32 + {945AD67E-9CAA-4BA6-B7B2-937E53F8E45B}.Release|x64.ActiveCfg = Release|x64 + {945AD67E-9CAA-4BA6-B7B2-937E53F8E45B}.Release|x64.Build.0 = Release|x64 + {945AD67E-9CAA-4BA6-B7B2-937E53F8E45B}.Release|x86.ActiveCfg = Release|Win32 + {945AD67E-9CAA-4BA6-B7B2-937E53F8E45B}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4FCBA152-888E-40B7-A874-3297AD785AB2} + EndGlobalSection +EndGlobal diff --git a/Part1/Lab1/Massiv_simv/lab1_3.vcxproj b/Part1/Lab1/Massiv_simv/lab1_3.vcxproj new file mode 100644 index 0000000..92debc0 --- /dev/null +++ b/Part1/Lab1/Massiv_simv/lab1_3.vcxproj @@ -0,0 +1,150 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {945ad67e-9caa-4ba6-b7b2-937e53f8e45b} + lab13 + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/Part1/Lab1/Massiv_simv/lab1_3.vcxproj.filters b/Part1/Lab1/Massiv_simv/lab1_3.vcxproj.filters new file mode 100644 index 0000000..a32728e --- /dev/null +++ b/Part1/Lab1/Massiv_simv/lab1_3.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/Part1/Lab1/Massiv_simv/lab1_3.vcxproj.user b/Part1/Lab1/Massiv_simv/lab1_3.vcxproj.user new file mode 100644 index 0000000..0f14913 --- /dev/null +++ b/Part1/Lab1/Massiv_simv/lab1_3.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Part1/Lab1/Spiski/Lab1_2.cpp b/Part1/Lab1/Spiski/Lab1_2.cpp new file mode 100644 index 0000000..bfc64b0 --- /dev/null +++ b/Part1/Lab1/Spiski/Lab1_2.cpp @@ -0,0 +1,376 @@ +#include +#include +#include +#include +#include +#include +#include + +struct Set { + char el; + Set* next; + Set(char e, Set* n = nullptr) : el(e), next(n) { } + ~Set() { delete next; } +}; + +using namespace std; + +const char universum[] = "ABCDEFGHIJKMNLOPQRSTUVWXYZ"; +const char filename[] = "Test_result.txt"; +const int length = 26; +const int durationCoeff = 1000000; +int customTestAmount = 0; +char stringA[length], stringB[length], stringC[length], stringD[length]; +Set *vectorA = nullptr, *vectorB = nullptr, *vectorC = nullptr, *vectorD = nullptr, *vectorF = nullptr; + + +void setupConsole() +{ + setlocale(LC_ALL, "Russian"); + SetConsoleOutputCP(1251); + SetConsoleCP(1251); + cout << fixed << setprecision(7); +} + +void outputGreeting() +{ + cout << " F - " << endl; + cout << "F = D && (A || B) && !C, F = D*(A + B) - C." << endl; + cout << ": " << universum << endl; +} + +void input() +{ + cout << endl; + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << " A: "; + cin >> stringA; + cout << " B: "; + cin >> stringB; + cout << " C: "; + cin >> stringC; + cout << " D: "; + cin >> stringD; + + cout << endl; +} + +bool isCorrectSymbol(char symbol) +{ + return ((symbol >= universum[0] && symbol <= universum[length - 1]) || symbol == '\0') ? 1 : 0; +} + +bool isStringCorrect(char* string) +{ + for (int i = 0; i < length && string[i] != '\0'; i++) + if (!isCorrectSymbol(string[i])) + return 0; + return 1; +} + +int memberToIndex(char member) +{ + return member - universum[0]; +} + +char indexToMember(int number) +{ + return number + universum[0]; +} + +Set* vectorFromString(Set* vector, const char string[]) +{ + Set* p = vector; + for (int i = 0; string[i]; i++) { + if (p) { + p = vector; + if (memberToIndex(vector->el) > memberToIndex(string[i])) { + p = new Set(string[i], vector); + vector = p; + } + else { + while (p->next && memberToIndex(p->next->el) < memberToIndex(string[i])) p = p->next; + if (p->next) p->next = new Set(string[i], p->next); + else { + if (memberToIndex(p->el) < memberToIndex(string[i])) p->next = new Set(string[i]); + else { + if (memberToIndex(p->el) != memberToIndex(string[i])) { + p->next = new Set(string[i], p->next); + } + } + } + + } + } + else { + vector = new Set(string[i]); + p = vector; + } + } + return vector; +} + +void convertSets() +{ + vectorA = vectorFromString(vectorA, stringA); + vectorB = vectorFromString(vectorB, stringB); + vectorC = vectorFromString(vectorC, stringC); + vectorD = vectorFromString(vectorD, stringD); +} + +void calculateAnswer() +{ + Set* pF = vectorF; + for (Set* pA = vectorA; pA; pA = pA->next) { + if (pF) { + pF->next = new Set(pA->el); + pF = pF->next; + } + else { + pF = new Set(pA->el); + vectorF = pF; + } + } + pF = vectorF; + for (Set* pB = vectorB; pB; pB = pB->next) { + if (pF) { + while (pF->next && memberToIndex(pF->next->el) < memberToIndex(pB->el)) pF = pF->next; + if (!pF->next || memberToIndex(pF->next->el) != memberToIndex(pB->el)) { + if (pF == vectorF) { + if (memberToIndex(pB->el) <= memberToIndex(pF->el)) { + pF = new Set(pB->el, vectorF); + vectorF = pF; + } + } + else { + pF->next = new Set(pB->el, pF->next); + pF = pF->next; + } + } + } + else { + pF = new Set(pB->el); + vectorF = pF; + } + } + pF = vectorF; + for (Set* pC = vectorC; pC && pF; pC = pC->next) { + if (memberToIndex(pF->el) == memberToIndex(pC->el) && pF == vectorF) { + vectorF = pF->next; + pF = pF->next; + } + while (pF && pF->next && memberToIndex(pF->next->el) < memberToIndex(pC->el)) pF = pF->next; + if (pF && pF->next && memberToIndex(pF->next->el) == memberToIndex(pC->el)) pF->next = pF->next->next; + } + pF = vectorF; + Set* last = nullptr; + for (Set* pD = vectorD; pD; pD = pD->next) { + while (pF && memberToIndex(pF->el) < memberToIndex(pD->el)) pF = pF->next; + if (pF && memberToIndex(pF->el) == memberToIndex(pD->el)) { + if (last == nullptr) { + last = pF; + vectorF = pF; + } + else { + last->next = pF; + last = pF; + } + } + } + if(pF) last->next = nullptr; +} + +void outputSetToConsole(Set* vector) +{ + for (Set* p = vector; p; p = p->next) + cout << p->el; +} + +void outputSetToFile(Set* vector, ofstream& output) +{ + for (Set* p = vector; p; p = p->next) + output << p->el; +} + +bool isSetEmpty(Set* vector) +{ + return vector ? 0 : 1; +} + +void outputAnswer() +{ + cout << ": F = "; + if (isSetEmpty(vectorF)) + cout << " "; + else + outputSetToConsole(vectorF); + cout << endl; +} + +double calulateDuration() +{ + double firstPoint, lastPoint, duration = 0; + for (int i = 0; i < durationCoeff; i++) + { + firstPoint = clock(); + calculateAnswer(); + lastPoint = clock(); + duration += lastPoint - firstPoint; + } + return duration / durationCoeff; +} + +void outputDuration() +{ + cout << endl; + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << " - O(1), " << endl; + cout << " " << calulateDuration() << " ." << endl; + cout << endl; +} + +float factorial(int number) +{ + float factorial = 1; + for (int i = 1; i <= number; i++) + factorial *= i; + return factorial; +} + +bool randomVector() +{ + return rand() % 2; +} + +void fillVectors() +{ + Set* pA = vectorA, * pB = vectorB, * pC = vectorC, * pD = vectorD; + for (int i = 0; i < length; i++) + { + if (randomVector()) { + if (pA) { + pA->next = new Set(indexToMember(i)); + pA = pA->next; + } + else { + vectorA = new Set(indexToMember(i)); + pA = vectorA; + } + } + if (randomVector()) { + if (pB) { + pB->next = new Set(indexToMember(i)); + pB = pB->next; + } + else { + vectorB = new Set(indexToMember(i)); + pB = vectorB; + } + } + if (randomVector()) { + if (pC) { + pC->next = new Set(indexToMember(i)); + pC = pC->next; + } + else { + vectorC = new Set(indexToMember(i)); + pC = vectorC; + } + } + if (randomVector()) { + if (pD) { + pD->next = new Set(indexToMember(i)); + pD = pD->next; + } + else { + vectorD = new Set(indexToMember(i)); + pD = vectorD; + } + } + } +} + +void clearAnswerVector() +{ + delete vectorA; + vectorA = nullptr; + delete vectorB; + vectorB = nullptr; + delete vectorC; + vectorC = nullptr; + delete vectorD; + vectorD = nullptr; + delete vectorF; + vectorF = nullptr; +} + +void badInputLoop() +{ + while (cin.fail() || customTestAmount < 0) + { + cout << " , :" << endl; + cin.clear(); + cin.ignore(32767, '\n'); + cin >> customTestAmount; + } +} + +void testInfo() +{ + cout << setprecision(0); + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << " 26 " << factorial(length) << " " << endl; + cout << " ?" << endl; + cin >> customTestAmount; + badInputLoop(); + if (customTestAmount > 0) + cout << " " << filename << endl; + else cout << " " << endl; +} + +void executeTest() +{ + ofstream output; + output.open(filename); + for (int i = 0; i < customTestAmount; i++) + { + clearAnswerVector(); + fillVectors(); + output << " A: "; + outputSetToFile(vectorA, output); + output << endl; + output << " B: "; + outputSetToFile(vectorB, output); + output << endl; + output << " C: "; + outputSetToFile(vectorC, output); + output << endl; + output << " D: "; + outputSetToFile(vectorD, output); + output << endl; + calculateAnswer(); + output << ": F = "; + outputSetToFile(vectorF, output); + output << endl; + output << '*' << endl; + } + output.close(); +} + +int main() +{ + setupConsole(); + outputGreeting(); + input(); + while (!isStringCorrect(stringA) || !isStringCorrect(stringB) || !isStringCorrect(stringC) || !isStringCorrect(stringD)) + { + cout << " " << endl; + input(); + } + convertSets(); + calculateAnswer(); + outputAnswer(); + outputDuration(); + testInfo(); + executeTest(); +} \ No newline at end of file diff --git a/Part1/Lab1/Spiski/Lab1_2.sln b/Part1/Lab1/Spiski/Lab1_2.sln new file mode 100644 index 0000000..fe5eeac --- /dev/null +++ b/Part1/Lab1/Spiski/Lab1_2.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30804.86 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lab1_2", "Lab1_2.vcxproj", "{8489226B-D3FE-48BC-BD12-A3E04ED4EE76}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8489226B-D3FE-48BC-BD12-A3E04ED4EE76}.Debug|x64.ActiveCfg = Debug|x64 + {8489226B-D3FE-48BC-BD12-A3E04ED4EE76}.Debug|x64.Build.0 = Debug|x64 + {8489226B-D3FE-48BC-BD12-A3E04ED4EE76}.Debug|x86.ActiveCfg = Debug|Win32 + {8489226B-D3FE-48BC-BD12-A3E04ED4EE76}.Debug|x86.Build.0 = Debug|Win32 + {8489226B-D3FE-48BC-BD12-A3E04ED4EE76}.Release|x64.ActiveCfg = Release|x64 + {8489226B-D3FE-48BC-BD12-A3E04ED4EE76}.Release|x64.Build.0 = Release|x64 + {8489226B-D3FE-48BC-BD12-A3E04ED4EE76}.Release|x86.ActiveCfg = Release|Win32 + {8489226B-D3FE-48BC-BD12-A3E04ED4EE76}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A83C62FA-2C3E-42FC-A61C-68426AECC40E} + EndGlobalSection +EndGlobal diff --git a/Part1/Lab1/Spiski/Lab1_2.vcxproj b/Part1/Lab1/Spiski/Lab1_2.vcxproj new file mode 100644 index 0000000..aa57791 --- /dev/null +++ b/Part1/Lab1/Spiski/Lab1_2.vcxproj @@ -0,0 +1,150 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {8489226b-d3fe-48bc-bd12-a3e04ed4ee76} + Lab12 + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/Part1/Lab1/Spiski/Lab1_2.vcxproj.filters b/Part1/Lab1/Spiski/Lab1_2.vcxproj.filters new file mode 100644 index 0000000..8468bc0 --- /dev/null +++ b/Part1/Lab1/Spiski/Lab1_2.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/Part1/Lab1/Spiski/Lab1_2.vcxproj.user b/Part1/Lab1/Spiski/Lab1_2.vcxproj.user new file mode 100644 index 0000000..0f14913 --- /dev/null +++ b/Part1/Lab1/Spiski/Lab1_2.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Part1/Lab1/Spiski/Test_result.txt b/Part1/Lab1/Spiski/Test_result.txt new file mode 100644 index 0000000..97d7502 --- /dev/null +++ b/Part1/Lab1/Spiski/Test_result.txt @@ -0,0 +1,60 @@ + A: ABDEFIJKLMOUWZ + B: ADHJKNOPSTUXZ + C: CDEGHIJLMNOTXYZ + D: CDFKLNRWY +: F = FKW +* + A: BDFGHIJKLTVY + B: DFIJKNOPSVWXZ + C: ABDEFIJKMPQTWXYZ + D: BCIJNOPRTVWY +: F = NOV +* + A: CDGNOPSTVWYZ + B: ABCDIJKLPQTUVXY + C: BCGJMPQRSWZ + D: CDFGIMORSTWY +: F = DIOTY +* + A: BCDFHJMOPRVWYZ + B: ACDEGHNPRSUVXYZ + C: ABDHJKLMSUWZ + D: ABCFGHILNPRVY +: F = CFGNPRVY +* + A: ABCEGHIKLMPRSUX + B: COUXZ + C: ABEFIQRSTUWX + D: ABFGIKMNOPQRUWYZ +: F = GKMOPZ +* + A: BDEGHIKMNOPSTVY + B: ABCEIJKNRSUVZ + C: BCDEFGKLMNQRSTUVWXY + D: JKMNOQRUWXZ +: F = OZ +* + A: BFGHIKLNOPQRUVWZ + B: BEHJLMPRSVWX + C: ABCIJMOPQRTXY + D: BCDEGILMNOQSVWY +: F = EGLNSVW +* + A: BDFGKLMNPTVXZ + B: ADFJKLNSXYZ + C: ACDEFGHJMNQSTUWX + D: ABHIJKLMNQRTUVW +: F = BKLV +* + A: BDGHJLNPQRTVWYZ + B: BGHJQTUVWZ + C: CHKLMPUXZ + D: BCDFGMOQRSTUWYZ +: F = DGQRTWY +* + A: ABCEGHJLMQRTUVXZ + B: ACFGILMNRVWX + C: BFHIJMOQUWY + D: BCFJLMNOPSVY +: F = CLNV +* diff --git a/Part1/Lab1/Vector_bit/Lab1.cpp b/Part1/Lab1/Vector_bit/Lab1.cpp new file mode 100644 index 0000000..c94b0e6 --- /dev/null +++ b/Part1/Lab1/Vector_bit/Lab1.cpp @@ -0,0 +1,246 @@ +#include +#include +#include +#include +#include +#include +#include +using namespace std; + +const char universum[] = "ABCDEFGHIJKMNLOPQRSTUVWXYZ"; +const char filename[] = "Test_result.txt"; +const int length = 26; +const int durationCoeff = 1000000; +int customTestAmount = 0; +char stringA[length], stringB[length], stringC[length], stringD[length]; +bool vectorA[length], vectorB[length], vectorC[length], vectorD[length], vectorF[length]; + + +void setupConsole() +{ + setlocale(LC_ALL, "Russian"); + SetConsoleOutputCP(1251); + SetConsoleCP(1251); + cout << fixed << setprecision(7); +} + +void outputGreeting() +{ + cout << "Программа рассчитывает значение множества F согласно следующим законам - " << endl; + cout << "F = D && (A || B) && !C, что равносильно F = D*(A + B) - C." << endl; + cout << "Универсум: " << universum << endl; +} + +void input() +{ + cout << endl; + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Введите множество A: "; + cin >> stringA; + cout << "Введите множество B: "; + cin >> stringB; + cout << "Введите множество C: "; + cin >> stringC; + cout << "Введите множество D: "; + cin >> stringD; + + cout << endl; +} + +bool isCorrectSymbol(char symbol) +{ + return ((symbol >= universum[0] && symbol <= universum[length - 1]) || symbol == '\0') ? 1 : 0; +} + +bool isStringCorrect(char* string) +{ + for (int i = 0; i < length && string[i] != '\0'; i++) + if (!isCorrectSymbol(string[i])) + return 0; + return 1; +} + +int memberToIndex(char member) +{ + return member - universum[0]; +} + +char indexToMember(int number) +{ + return number + universum[0]; +} + +void vectorFromString(bool* vector, const char string[]) +{ + for (int i = 0; string[i]; i++) + vector[memberToIndex(string[i])] = 1; +}; + +void convertSets() +{ + vectorFromString(vectorA, stringA); + vectorFromString(vectorB, stringB); + vectorFromString(vectorC, stringC); + vectorFromString(vectorD, stringD); +} + +void calculateAnswer() +{ + for (int i = 0; i < length; i++) + vectorF[i] = vectorD[i] && (vectorA[i] || vectorB[i]) && !vectorC[i]; +} + +void outputSetToConsole(bool* vector) +{ + for (int i = 0; i < length; ++i) + if (vector[i]) + cout << indexToMember(i); +} + +void outputSetToFile(bool* vector, ofstream& output) +{ + for (int i = 0; i < length; ++i) + if (vector[i]) + output << indexToMember(i); +} + +bool isSetEmpty(bool* vector) +{ + for (int i = 0; i < length; i++) + if (vector[i] == 1) + return 0; + return 1; +} + +void outputAnswer() +{ + cout << "Ответ: F = "; + if (isSetEmpty(vectorF)) + cout << "пустое множество"; + else + outputSetToConsole(vectorF); + cout << endl; +} + +double calulateDuration() +{ + double firstPoint, lastPoint, duration = 0; + for (int i = 0; i < durationCoeff; i++) + { + firstPoint = clock(); + calculateAnswer(); + lastPoint = clock(); + duration += lastPoint - firstPoint; + } + return duration / durationCoeff; +} + +void outputDuration() +{ + cout << endl; + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Временная сложность алгоритма - O(1), постоянное время" << endl; + cout << "На выполнение алгоритма уходит " << calulateDuration() << " секунд." << endl; + cout << endl; +} + +float factorial(int number) +{ + float factorial = 1; + for (int i = 1; i <= number; i++) + factorial *= i; + return factorial; +} + +bool randomVector() +{ + return rand() % 2; +} + +void fillVectors() +{ + for (int i = 0; i < length; i++) + { + vectorA[i] = randomVector(); + vectorB[i] = randomVector(); + vectorC[i] = randomVector(); + vectorD[i] = randomVector(); + } +} + +void clearAnswerVector() +{ + for (int i = 0; i < length; i++) + vectorF[i] = 0; +} + +void badInputLoop() +{ + while (cin.fail() || customTestAmount < 0) + { + cout << "Неправильный ввод, повторите еще раз:" << endl; + cin.clear(); + cin.ignore(32767, '\n'); + cin >> customTestAmount; + } +} + +void testInfo() +{ + cout << setprecision(0); + cout << "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" << endl; + cout << "Из 26 символов может быть составлено " << factorial(length) << " перестановок" << endl; + cout << "Сколько программа должна проделать тестов со случайными комбинациями?" << endl; + cin >> customTestAmount; + badInputLoop(); + if (customTestAmount > 0) + cout << "Отчеты будут выведены в файл " << filename << endl; + else cout << "Тесты не будут проделаны" << endl; +} + +void executeTest() +{ + ofstream output; + output.open(filename); + for (int i = 0; i < customTestAmount; i++) + { + fillVectors(); + clearAnswerVector(); + output << "Множество A: "; + outputSetToFile(vectorA, output); + output << endl; + output << "Множество B: "; + outputSetToFile(vectorB, output); + output << endl; + output << "Множество C: "; + outputSetToFile(vectorC, output); + output << endl; + output << "Множество D: "; + outputSetToFile(vectorD, output); + output << endl; + calculateAnswer(); + output << "Ответ: F = "; + outputSetToFile(vectorF, output); + output << endl; + output << '*' << endl; + } + output.close(); +} + +int main() +{ + setupConsole(); + outputGreeting(); + input(); + while (!isStringCorrect(stringA) || !isStringCorrect(stringB) || !isStringCorrect(stringC) || !isStringCorrect(stringD)) + { + cout << "Некорректный ввод" << endl; + input(); + } + convertSets(); + calculateAnswer(); + outputAnswer(); + outputDuration(); + testInfo(); + executeTest(); +} \ No newline at end of file diff --git a/Part1/Lab1/Vector_bit/Lab1.sln b/Part1/Lab1/Vector_bit/Lab1.sln new file mode 100644 index 0000000..a206504 --- /dev/null +++ b/Part1/Lab1/Vector_bit/Lab1.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.31025.194 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lab1", "Lab1.vcxproj", "{56A2AB4F-94CB-4D3E-9174-96C549809152}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {56A2AB4F-94CB-4D3E-9174-96C549809152}.Debug|x64.ActiveCfg = Debug|x64 + {56A2AB4F-94CB-4D3E-9174-96C549809152}.Debug|x64.Build.0 = Debug|x64 + {56A2AB4F-94CB-4D3E-9174-96C549809152}.Debug|x86.ActiveCfg = Debug|Win32 + {56A2AB4F-94CB-4D3E-9174-96C549809152}.Debug|x86.Build.0 = Debug|Win32 + {56A2AB4F-94CB-4D3E-9174-96C549809152}.Release|x64.ActiveCfg = Release|x64 + {56A2AB4F-94CB-4D3E-9174-96C549809152}.Release|x64.Build.0 = Release|x64 + {56A2AB4F-94CB-4D3E-9174-96C549809152}.Release|x86.ActiveCfg = Release|Win32 + {56A2AB4F-94CB-4D3E-9174-96C549809152}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {7983316A-D121-4CF6-82F5-FCA20F9DC2CE} + EndGlobalSection +EndGlobal diff --git a/Part1/Lab1/Vector_bit/Lab1.vcxproj b/Part1/Lab1/Vector_bit/Lab1.vcxproj new file mode 100644 index 0000000..6636eb9 --- /dev/null +++ b/Part1/Lab1/Vector_bit/Lab1.vcxproj @@ -0,0 +1,150 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {56a2ab4f-94cb-4d3e-9174-96c549809152} + Lab1 + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/Part1/Lab1/Vector_bit/Lab1.vcxproj.filters b/Part1/Lab1/Vector_bit/Lab1.vcxproj.filters new file mode 100644 index 0000000..1e552f7 --- /dev/null +++ b/Part1/Lab1/Vector_bit/Lab1.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Исходные файлы + + + + + Файлы ресурсов + + + \ No newline at end of file diff --git a/Part1/Lab1/Vector_bit/Lab1.vcxproj.user b/Part1/Lab1/Vector_bit/Lab1.vcxproj.user new file mode 100644 index 0000000..0f14913 --- /dev/null +++ b/Part1/Lab1/Vector_bit/Lab1.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Part1/Lab1/Vector_bit/Test_result.txt b/Part1/Lab1/Vector_bit/Test_result.txt new file mode 100644 index 0000000..ccce222 --- /dev/null +++ b/Part1/Lab1/Vector_bit/Test_result.txt @@ -0,0 +1,72 @@ + A: ABDEFIJKLMOUWZ + B: ADHJKNOPSTUXZ + C: CDEGHIJLMNOTXYZ + D: CDFKLNRWY +: F = FKW +* + A: BDFGHIJKLTVY + B: DFIJKNOPSVWXZ + C: ABDEFIJKMPQTWXYZ + D: BCIJNOPRTVWY +: F = NOV +* + A: CDGNOPSTVWYZ + B: ABCDIJKLPQTUVXY + C: BCGJMPQRSWZ + D: CDFGIMORSTWY +: F = DIOTY +* + A: BCDFHJMOPRVWYZ + B: ACDEGHNPRSUVXYZ + C: ABDHJKLMSUWZ + D: ABCFGHILNPRVY +: F = CFGNPRVY +* + A: ABCEGHIKLMPRSUX + B: COUXZ + C: ABEFIQRSTUWX + D: ABFGIKMNOPQRUWYZ +: F = GKMOPZ +* + A: BDEGHIKMNOPSTVY + B: ABCEIJKNRSUVZ + C: BCDEFGKLMNQRSTUVWXY + D: JKMNOQRUWXZ +: F = JOZ +* + A: BFGHIKLNOPQRUVWZ + B: BEHJLMPRSVWX + C: ABCIJMOPQRTXY + D: BCDEGILMNOQSVWY +: F = EGLNSVW +* + A: BDFGKLMNPTVXZ + B: ADFJKLNSXYZ + C: ACDEFGHJMNQSTUWX + D: ABHIJKLMNQRTUVW +: F = BKLV +* + A: BDGHJLNPQRTVWYZ + B: BGHJQTUVWZ + C: CHKLMPUXZ + D: BCDFGMOQRSTUWYZ +: F = BDGQRTWY +* + A: ABCEGHJLMQRTUVXZ + B: ACFGILMNRVWX + C: BFHIJMOQUWY + D: BCFJLMNOPSVY +: F = CLNV +* + A: DEFHKTWXYZ + B: ABCGIMOPRSVW + C: DFJNQTWYZ + D: FJKNOPQSVWZ +: F = KOPSV +* + A: BCEFJKLOPTWY + B: AEFHKLPQUVW + C: BCDEGKLMNOWX + D: ADGJKLMORSVWYZ +: F = AJVY +* diff --git a/Part1/Lab2/Lab2.cpp b/Part1/Lab2/Lab2.cpp new file mode 100644 index 0000000..fc00e9e --- /dev/null +++ b/Part1/Lab2/Lab2.cpp @@ -0,0 +1,26 @@ +#include +#include +#include +#include +using namespace std; +#include "Set4.h" +int Set::N = 26, Set::cnt = 0; // +const long q0 = 100000; // +int main() +{ + srand(time(nullptr)); + Set A('A'), B('B'), C('C'), D('D'), E; //A, B, C, D . E - + clock_t begin = clock(); + for (long q = 0; q < q0; ++q) + { + E = D & (A | B) & ~C; + //E = ~A; + } + clock_t end = clock(); + E.Show(); + cout << " Middle power =" << + (A.power() + B.power() + C.power() + D.power() + E.power()) / 5 << + " Time=" << end - begin << " / " << q0 << endl; + cin.get(); + return 0; +} \ No newline at end of file diff --git a/Part1/Lab2/Lab2.sln b/Part1/Lab2/Lab2.sln new file mode 100644 index 0000000..c13185f --- /dev/null +++ b/Part1/Lab2/Lab2.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30804.86 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lab2", "Lab2.vcxproj", "{43E2B72C-FD3D-4357-ACBD-6379834A6269}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {43E2B72C-FD3D-4357-ACBD-6379834A6269}.Debug|x64.ActiveCfg = Debug|x64 + {43E2B72C-FD3D-4357-ACBD-6379834A6269}.Debug|x64.Build.0 = Debug|x64 + {43E2B72C-FD3D-4357-ACBD-6379834A6269}.Debug|x86.ActiveCfg = Debug|Win32 + {43E2B72C-FD3D-4357-ACBD-6379834A6269}.Debug|x86.Build.0 = Debug|Win32 + {43E2B72C-FD3D-4357-ACBD-6379834A6269}.Release|x64.ActiveCfg = Release|x64 + {43E2B72C-FD3D-4357-ACBD-6379834A6269}.Release|x64.Build.0 = Release|x64 + {43E2B72C-FD3D-4357-ACBD-6379834A6269}.Release|x86.ActiveCfg = Release|Win32 + {43E2B72C-FD3D-4357-ACBD-6379834A6269}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C2582D30-E578-4B2C-AB32-A4F887D1D73C} + EndGlobalSection +EndGlobal diff --git a/Part1/Lab2/Lab2.vcxproj b/Part1/Lab2/Lab2.vcxproj new file mode 100644 index 0000000..bbd9098 --- /dev/null +++ b/Part1/Lab2/Lab2.vcxproj @@ -0,0 +1,153 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {43e2b72c-fd3d-4357-acbd-6379834a6269} + Lab2 + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Part1/Lab2/Lab2.vcxproj.filters b/Part1/Lab2/Lab2.vcxproj.filters new file mode 100644 index 0000000..d8dc616 --- /dev/null +++ b/Part1/Lab2/Lab2.vcxproj.filters @@ -0,0 +1,36 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/Part1/Lab2/Lab2.vcxproj.user b/Part1/Lab2/Lab2.vcxproj.user new file mode 100644 index 0000000..0f14913 --- /dev/null +++ b/Part1/Lab2/Lab2.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Part1/Lab2/Set1.h b/Part1/Lab2/Set1.h new file mode 100644 index 0000000..b6c10b3 --- /dev/null +++ b/Part1/Lab2/Set1.h @@ -0,0 +1,118 @@ +#include +#include +#include +#include +#include +#include + +using namespace std; + +class Set { +private: + static int N, cnt; // + int n; // + char S, * A; // +public: + Set operator | (const Set&) const; // + Set& operator |= (const Set&); + Set operator & (const Set&) const; // + Set& operator &= (const Set&); + Set operator ~ () const; // + void Show(); // + int power() { return n; } // + Set(char); + // + Set(); // + Set(const Set&); // + Set(Set&&); // (C++11) + Set operator = (const Set&); // + Set operator = (Set&&); // (C++11) + ~Set() { delete[] A; } // +}; + +Set::Set() : n(0), S('A' + cnt++), A(new char[N + 1]) { A[0] = 0; } + +Set::Set(char) : S('A' + cnt++), n(0), A(new char[N + 1]) { + for (int i = 0; i < N; i++) + if (rand() % 2) A[n++] = i + 'A'; + A[n] = 0; + cout << '\n' << S << " = [" << A << "]"; +} + +Set::Set(const Set& B) : S('A' + cnt++), n(B.n), A(new char[N + 1]) { + char* dst(A), * src(B.A); // / + while (*dst++ = *src++); // 0 +} + +Set Set:: operator= (const Set& B) { + if (this != &B) { + char* dst(A), * src(B.A); n = B.n; + + while (*dst++ = *src++); S = 'A' + cnt++; + } + return *this; +} + +Set& Set :: operator &= (const Set& B) +{ + Set C(*this); + n = 0; + for (int i = 0; i < C.n; ++i) { + for (int j = 0; j < B.n; ++j) + if (C.A[i] == B.A[j]) A[n++] = C.A[i]; + } + A[n] = 0; // + return *this; +} + +Set Set :: operator & (const Set& B) const +{ + Set C(*this); + return std::move(C &= B); +} + +Set& Set :: operator |= (const Set& B) +{ + for (int i = 0; i < B.n; ++i) { + bool f = true; + for (int j = 0; j < n; ++j) + if (B.A[i] == A[j]) f = false; + if (f) A[n++] = B.A[i]; + } + A[n] = 0; return *this; +} + +Set Set :: operator | (const Set& B) const +{ + Set C(*this); + return std::move(C |= B); +} + +Set Set :: operator ~ () const +{ + Set C; + for (char c = 'A'; c <= 'Z'; ++c) { // + bool f = true; + for (int j = 0; j < n; ++j) + if (c == A[j]) { f = false; break; } + if (f) C.A[C.n++] = c; + } + C.A[C.n] = 0; + return std::move(C); +} + +Set::Set(Set&& B) : S('A' + cnt++), n(B.n), A(B.A) +{ + B.A = nullptr; +} // + +Set Set:: operator = (Set&& B) // +{ + if (this != &B) + { + n = B.n; A = B.A; S = 'A' + cnt++; B.A = nullptr; + } + return *this; +} + +void Set::Show() { cout << '\n' << S << " = [" << A << "]"; } \ No newline at end of file diff --git a/Part1/Lab2/Set2.h b/Part1/Lab2/Set2.h new file mode 100644 index 0000000..abfbb5a --- /dev/null +++ b/Part1/Lab2/Set2.h @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include +#include + +using namespace std; + + +class Set { +private: + static int N, cnt; // + int n; // + char S; // + bool* A; +public: + Set operator | (const Set&) const; // + Set& operator |= (const Set&); + Set operator & (const Set&) const; // + Set& operator &= (const Set&); + Set operator ~ () const; // + void Show(); // + int power() { return n; } // + Set(char);// + Set(); // + Set(const Set&); // + Set(Set&&); // (C++11) + Set operator = (const Set&); // + Set operator = (Set&&); // (C++11) + ~Set() { delete[] A; } // +}; + +Set::Set() : n(0), S('A' + cnt++), A(new bool[N] {0}) {}; + +Set::Set(char) : S('A' + cnt++), n(0), A(new bool[N] {0}) { + for (int i = 0; i < N; i++) + if (rand() % 2) { + A[i] = true; + n++; + } + cout << '\n' << S << " = ["; + for (int i = 0; i < N; i++) + if (A[i]) cout << char(i + 'A'); + cout << "]"; +} + +Set::Set(const Set& B) : S('A' + cnt++), n(B.n), A(new bool[N] {0}) { + bool* dst(A), * src(B.A); // / + for (int i = 0; i < N; i++) *dst++ = *src++; +} + +Set Set:: operator= (const Set& B) { + if (this != &B) { + bool* dst(A), * src(B.A); n = B.n; + for (int i = 0; i < N; i++) *dst++ = *src++; + S = 'A' + cnt++; + } + return *this; +} + +Set& Set :: operator &= (const Set& B) +{ + Set C(*this); + n = 0; + for (int i = 0; i < N; ++i) { + if (C.A[i] && B.A[i]) { A[i] = true; n++; } + else A[i] = false; + } + return *this; +} + +Set Set :: operator & (const Set& B) const +{ + Set C(*this); + return std::move(C &= B); +} + +Set& Set :: operator |= (const Set& B) +{ + for (int i = 0; i < N; ++i) + if (B.A[i]) { + A[i] = true; + n++; + } + return *this; +} + +Set Set :: operator | (const Set& B) const +{ + Set C(*this); + return std::move(C |= B); +} + +Set Set :: operator ~ () const +{ + Set C; + for (int i = 0; i < N; ++i) { // + C.A[i] = !A[i]; + } + return std::move(C); +} + +Set::Set(Set&& B) : S('A' + cnt++), n(B.n), A(B.A) +{ + B.A = nullptr; +} // + +Set Set:: operator = (Set&& B) // +{ + if (this != &B) + { + n = B.n; A = B.A; S = 'A' + cnt++; B.A = nullptr; + } + return *this; +} + +void Set::Show() { + cout << '\n' << S << " = ["; + for (int i = 0; i < N; i++) if(A[i]) cout << char(i + 'A'); + cout << "]"; +} \ No newline at end of file diff --git a/Part1/Lab2/Set3.h b/Part1/Lab2/Set3.h new file mode 100644 index 0000000..97f46de --- /dev/null +++ b/Part1/Lab2/Set3.h @@ -0,0 +1,114 @@ +#include +#include +#include +#include +#include +#include + +using namespace std; + + +class Set { +private: + static int N, cnt; // + int n; // + char S; // + int A; +public: + Set operator | (const Set&) const; // + Set& operator |= (const Set&); + Set operator & (const Set&) const; // + Set& operator &= (const Set&); + Set operator ~ () const; // + void Show(); // + int power() { return n; } // + Set(char);// + Set(); // + Set(const Set&); // + Set(Set&&); // (C++11) + Set operator = (const Set&); // + Set operator = (Set&&); // (C++11) + ~Set() {} // +}; + +Set::Set() : n(0), S('A' + cnt++), A(0) {}; + +Set::Set(char) : S('A' + cnt++), n(0), A(0) { + for (int i = 0; i < N; i++) + if (rand() % 2) { + A |= (1 << i); + n++; + } + cout << '\n' << S << " = ["; + for (int i = 0; i < N; i++) + if ((A >> i) & 1) + cout << char(i + 'A'); + cout << "]"; +} + +Set::Set(const Set& B) : S('A' + cnt++), n(B.n), A(B.A) { } + +Set Set:: operator= (const Set& B) { + if (this != &B) { + n = B.n; + A = B.A; + S = 'A' + cnt++; + } + return *this; +} + +Set& Set :: operator &= (const Set& B) +{ + n = 0; + A = A & B.A; + for (int i = 0; i < N; i++) if ((A >> i) & 1) n++; + return *this; +} + +Set Set :: operator & (const Set& B) const +{ + Set C(*this); + return std::move(C &= B); +} + +Set& Set :: operator |= (const Set& B) +{ + n = 0; + A = A | B.A; + for (int i = 0; i < N; i++) if ((A >> i) & 1) n++; + return *this; +} + +Set Set :: operator | (const Set& B) const +{ + Set C(*this); + return std::move(C |= B); +} + +Set Set :: operator ~ () const +{ + Set C; + C.A = ~A; + return std::move(C); +} + +Set::Set(Set&& B) : S('A' + cnt++), n(B.n), A(B.A) +{ + B.A = 0; +} // + +Set Set:: operator = (Set&& B) // +{ + if (this != &B) + { + n = B.n; A = B.A; S = 'A' + cnt++; B.A = 0; + } + return *this; +} + +void Set::Show() { + cout << '\n' << S << " = ["; + for (int i = 0; i < N; i++) if ((A >> i) & 1) + cout << char(i + 'A'); + cout << "]"; +} \ No newline at end of file diff --git a/Part1/Lab2/Set4.h b/Part1/Lab2/Set4.h new file mode 100644 index 0000000..bb532f3 --- /dev/null +++ b/Part1/Lab2/Set4.h @@ -0,0 +1,208 @@ +#include +#include +#include +#include +#include +#include + +using namespace std; + +class SetElem { +public: + char el; + SetElem* next; + SetElem(char e, SetElem* n = nullptr) : el(e), next(n) { } + ~SetElem() { delete next; } +}; + +class Set { +private: + static int N, cnt; // + int n; // + char S; // + SetElem* A; +public: + Set operator | (const Set&) const; // + Set& operator |= (const Set&); + Set operator & (const Set&) const; // + Set& operator &= (const Set&); + Set operator ~ () const; // + void Show(); // + int power() { return n; } // + Set(char);// + Set(); // + Set(const Set&); // + Set(Set&&); // (C++11) + Set operator = (const Set&); // + Set operator = (Set&&); // (C++11) + ~Set() {} // +}; + +Set::Set() : n(0), S('A' + cnt++), A(nullptr) {}; + +Set::Set(char) : S('A' + cnt++), n(0), A(nullptr) { + SetElem* pA = A; + for (int i = 0; i < N; i++) + if (rand() % 2) { + if (A) { + pA->next = new SetElem(char(i + 'A')); + pA = pA->next; + } + else { + A = new SetElem(char(i + 'A')); + pA = A; + } + n++; + } + cout << '\n' << S << " = ["; + for (SetElem* p = A; p; p = p->next) + cout << p->el; + cout << "]"; +} + +Set::Set(const Set& B) : S('A' + cnt++), n(B.n), A(nullptr) { + SetElem* pA = A, * pB = B.A; + while (pB) { + if (pA) { + pA->next = new SetElem(pB->el); + pA = pA->next; + } + else { + A = new SetElem(B.A->el); + pA = A; + } + pB = pB->next; + } +} + +Set Set:: operator= (const Set& B) { + if (this != &B) { + n = B.n; + A = nullptr; + SetElem* pA = A, *pB = B.A; + while (pB) { + if (pA) { + pA->next = new SetElem(B.A->el); + pA = pA->next; + } + else { + A = new SetElem(B.A->el); + pA = A; + } + pB = pB->next; + } + S = 'A' + cnt++; + } + return *this; +} + +Set& Set :: operator &= (const Set& B) +{ + n = 0; + SetElem* last = nullptr, * pA = A; + for (SetElem* pB = B.A; pB; pB = pB->next) { + while (pA && pA->el < pB->el) pA = pA->next; + if (pA && pA->el == pB->el) { + if (last == nullptr) { + last = pA; + A = pA; + } + else { + last->next = pA; + last = pA; + } + } + } + if (pA) last->next = nullptr; + for (pA = A; pA; pA = pA->next) n++; + return *this; +} + +Set Set :: operator & (const Set& B) const +{ + Set C(*this); + return std::move(C &= B); +} + +Set& Set :: operator |= (const Set& B) +{ + n = 0; + SetElem* pA = A; + for (SetElem* pB = B.A; pB; pB = pB->next) { + if (pA) { + while (pA->next && pA->next->el - 'A' < pB->el - 'A') pA = pA->next; + if (!pA->next || pA->next->el - 'A' != pB->el - 'A') { + if (pA == A) { + if (pB->el - 'A' <= pA->el - 'A') { + pA = new SetElem(pB->el, A); + A = pA; + } + } + else { + pA->next = new SetElem(pB->el, pA->next); + pA = pA->next; + } + } + } + else { + pA = new SetElem(pB->el); + A = pA; + } + } + for (pA = A; pA; pA = pA->next) n++; + return *this; +} + +Set Set :: operator | (const Set& B) const +{ + Set C(*this); + return std::move(C |= B); +} + +Set Set :: operator ~ () const +{ + Set C; + C.n = N - n; + SetElem* pC = C.A, *pA = A; + for (char c = 'A'; c <= 'Z'; ++c) { // + if (pA && pA->el > c) { + if (pC) { + pC->next = new SetElem(c); + pC = pC->next; + } + else { + C.A = new SetElem(c); + pC = C.A; + } + } + else { + if(pA) pA = pA->next; + else { + pC->next = new SetElem(c); + pC = pC->next; + } + } + } + return std::move(C); +} + +Set::Set(Set&& B) : S('A' + cnt++), n(B.n), A(B.A) +{ + B.A = 0; +} // + +Set Set:: operator = (Set&& B) // +{ + if (this != &B) + { + n = B.n; A = B.A; S = 'A' + cnt++; B.A = 0; + } + return *this; +} + +void Set::Show() { + cout << '\n' << S << " = ["; + for (SetElem* p = A; p; p = p->next) + cout << p->el; + cout << "]"; +} \ No newline at end of file diff --git a/Part1/Lab3/main.cpp b/Part1/Lab3/main.cpp new file mode 100644 index 0000000..fb3f2b4 --- /dev/null +++ b/Part1/Lab3/main.cpp @@ -0,0 +1,281 @@ +#include +#include +using namespace std; +// +class Node { + char d; // + Node* lft; // + Node* rgt; // + int count = 0; +public: + Node() : lft(nullptr), rgt(nullptr) { } // + Node(const Node&) = delete; + Node& operator = (const Node&) = delete; + ~Node() { + delete lft; // ( + delete rgt; + } // , ) + friend class Tree; // +}; +// +class Tree +{ + Node* root; // + char num, maxnum; // + int maxrow, offset; // , + char** SCREEN; // + void clrscr() // + { + for (int i = 0; i < maxrow; i++) + memset(SCREEN[i], '.', 80); + } + + Node* MakeNode(int depth) // + { + Node* v = nullptr; + int random; + random = rand() % 5 + 1;// cout << random << endl; + int Y = (depth < random) && (num <= ''); + //: cout << "Node (" << num << ',' << depth << ")1/0: "; cin >> Y; + if (Y) { // , Y = 1 + v = new Node; + v->lft = MakeNode(depth + 1); + v->d = num++; // + v->rgt = MakeNode(depth + 1); + } + return v; + } + void OutNodes(Node* v, int r, int c) // // root, 1, 40 + { + if (r && c && (c < 80)) SCREEN[r - 1][c - 1] = v->d; // + if (r < maxrow) { + if (v->lft) OutNodes(v->lft, r + 1, c -(offset >> r)); // + if (v->rgt) OutNodes(v->rgt, r + 1, c + (offset >> r)); // + } + } + + //Tree(const Tree&) = delete; // + //Tree(Tree&&) = delete; // (++11) + //Tree& operator = (const Tree&) const = delete; // + //Tree& operator = (Tree&&) const = delete; // , + // + + +public: + Tree(char nm, char mnm, int mxr) : + num(nm), maxnum(mnm), maxrow(mxr), offset(40), root(nullptr), + SCREEN(new char* [maxrow]) + { + for (int i = 0; i < maxrow; i++) SCREEN[i] = new char[80]; + } + + ~Tree() { + for (int i = 0; i < maxrow; i++) delete[]SCREEN[i]; + delete[]SCREEN; delete root; + } + void MakeTree() // + { + root = MakeNode(0); + } + bool exist() { return root != nullptr; } // + void OutTree() // + { + clrscr(); + OutNodes(root, 1, offset); + for (int i = 0; i < maxrow; i++) + { + SCREEN[i][79] = 0; + cout << '\n' << SCREEN[i]; + } + cout << '\n'; + } + + int DFS() // + { + const int MaxS = 20; // + int count = 0; + STACK S(MaxS); // + S.push(root); // STACK <- root + while (!S.empty()) // + { + Node* v = S.pop(); // + cout << v->d << '_'; count++; // , + if (v->rgt) S.push(v->rgt); // STACK <- ( ) + if (v->lft) S.push(v->lft); // STACK <- ( ) + } + return count; + } + +template +class STACK +{ + Item* S; + int t; +public: + STACK(int maxt) + { + S = new Item[maxt]; + t = 0; + } + int empty() const + { + return t == 0; + } + void push(Item item) + { + S[t++] = item; + } + Item pop() + { + return (t ? S[--t] : 0); + } +}; + + +int result() +{ + int rezult = 0; + search_1(root, 1); + search_2(root, 1); + return counter(root, 1, &rezult); +} +void search_1(Node* v, int x) // +{ + while (x) + { + if (v->lft != nullptr) + { + v->count++; + search_1(v->lft,1); + if (v->rgt != nullptr) + { + v->count++; + search_1(v->rgt, 1); + x = 0; + } + x = 0; + } + if ((v->rgt == nullptr && v->lft == nullptr) || (v->count > 1)) + { + x = 0; + break; + } + + if (v->rgt != nullptr) + { + v->count++; + search_1(v->rgt, 1); + if (v->lft != nullptr) + { + v->count++; + search_1(v->lft, 1); + x = 0; + } + x = 0; + } + + if (v->rgt == nullptr && v->lft == nullptr) x = 0; + } +} +void search_2(Node* v, int x) // +{ + while (x)// ////// + { + if (v->lft != nullptr) + { + v->count = v->count + v->lft->count; + search_2(v->lft, 1); + if (v->rgt != nullptr) + { + v->count = v->count + v->rgt->count; + search_2(v->rgt, 1); + x = 0; + } + x = 0; + } + + + if ((v->rgt == nullptr && v->lft == nullptr) || (v->count > 3)) + { + x = 0; + break; + } + + if (v->rgt != nullptr) + { + v->count = v->count + v->rgt->count; + search_2(v->rgt, 1); + if (v->lft != nullptr) + { + v->count = v->count + v->lft->count; + search_2(v->lft, 1); + x = 0; + } + x = 0; + } + + if (v->rgt == nullptr && v->lft == nullptr) x = 0; + } +} + +int counter(Node* v, int x, int* rezult) +{// 0 * (* ) + while (x) + { + if (v->count < 2) + { + (*rezult)++; + if (v->lft != nullptr) + { + counter(v->lft, 1, rezult); + x = 0; + } + if (v->rgt != nullptr) + { + counter(v->rgt, 1, rezult); + x = 0; + } + if (v->rgt == nullptr && v->lft == nullptr) x = 0; + } + else + { + if (v->lft != nullptr) + { + counter(v->lft, 1, rezult); + x = 0; + } + if (v->rgt != nullptr) + { + counter(v->rgt, 1, rezult); + x = 0; + } + if (v->rgt == nullptr && v->lft == nullptr) x = 0; + } + } + return *rezult; +} +}; + + +// +int main () +{ + int n = 0, rezult; + setlocale(LC_ALL, "Russian"); + srand(time(0)); + + Tree tr('','',5); + tr.MakeTree(); + if (tr.exist()) + { + tr.OutTree(); + cout << '\n' << " : "; + n = tr.DFS(); + cout << " = " << n << '\n'; + rezult = tr.result(); + cout << " , : " << rezult << '\n'; + } + else + cout << "Error." << '\n'; + +} \ No newline at end of file