Add project files.

This commit is contained in:
Daniel
2023-04-21 23:06:09 +03:00
parent bf4d30f7c8
commit 93c7cb0b3b
10 changed files with 708 additions and 0 deletions

31
Lab.sln Normal file
View File

@@ -0,0 +1,31 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.33214.272
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Lab", "Lab\Lab.vcxproj", "{A12EB4A7-1661-4043-AC3E-5E303447400C}"
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
{A12EB4A7-1661-4043-AC3E-5E303447400C}.Debug|x64.ActiveCfg = Debug|x64
{A12EB4A7-1661-4043-AC3E-5E303447400C}.Debug|x64.Build.0 = Debug|x64
{A12EB4A7-1661-4043-AC3E-5E303447400C}.Debug|x86.ActiveCfg = Debug|Win32
{A12EB4A7-1661-4043-AC3E-5E303447400C}.Debug|x86.Build.0 = Debug|Win32
{A12EB4A7-1661-4043-AC3E-5E303447400C}.Release|x64.ActiveCfg = Release|x64
{A12EB4A7-1661-4043-AC3E-5E303447400C}.Release|x64.Build.0 = Release|x64
{A12EB4A7-1661-4043-AC3E-5E303447400C}.Release|x86.ActiveCfg = Release|Win32
{A12EB4A7-1661-4043-AC3E-5E303447400C}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {74D84430-7BDE-4C9E-AEFE-64042027E7C7}
EndGlobalSection
EndGlobal

28
Lab/Lab.cpp Normal file
View File

@@ -0,0 +1,28 @@
#include "triple.h"
#include "operations.h"
#include "global.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[]) {
triple number1, number2;
triple res;
char action;
//setPrecision(atoi(argv[3]));
cin >> number1 >> number2 >> action >> precision;
switch (action) {
case '+': res = number1 + number2;
break;
case '-': res = number1 - number2;
break;
case '*': res = number1 * number2;
break;
case '/': res = number1 / number2;
break;
default: cout << "No such operation retard!";
break;
}
cout << res;
}

163
Lab/Lab.vcxproj Normal file
View File

@@ -0,0 +1,163 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{a12eb4a7-1661-4043-ac3e-5e303447400c}</ProjectGuid>
<RootNamespace>Lab</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>C:\LIBS\boost_1_81_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\LIBS\boost_1_81_0\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>C:\LIBS\boost_1_81_0;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\LIBS\boost_1_81_0\libs;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<Optimization>MaxSpeed</Optimization>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<WholeProgramOptimization>true</WholeProgramOptimization>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="global.cpp" />
<ClCompile Include="triple.cpp" />
<ClCompile Include="Lab.cpp" />
<ClCompile Include="operations.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="global.h" />
<ClInclude Include="triple.h" />
<ClInclude Include="operations.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

42
Lab/Lab.vcxproj.filters Normal file
View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Lab.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="operations.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="triple.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="global.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="triple.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="operations.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="global.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

3
Lab/global.cpp Normal file
View File

@@ -0,0 +1,3 @@
#include "global.h"
int precision = 0;

6
Lab/global.h Normal file
View File

@@ -0,0 +1,6 @@
#pragma once
#ifndef GLOBAL_H
#define GLOBAL_H
extern int precision;
#endif

258
Lab/operations.cpp Normal file
View File

@@ -0,0 +1,258 @@
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
#include "triple.h"
#include "global.h"
#include "operations.h"
using namespace std;
triple operations::add(triple& a, triple& b) {
if (a.negative && !b.negative) {
a.negative = false;
triple res = b - a;
return res;
}
if (!a.negative && b.negative) {
b.negative = false;
triple res = a - b;
return res;
}
if (a.negative && b.negative) {
a.negative = false;
b.negative = false;
triple res = a + b;
res.negative = true;
a.negative = true;
b.negative = true;
return res;
}
triple res;
int next = 0;
int int_size = max(a.integer.size(), b.integer.size());
int float_size = max(a.floating.size(), b.floating.size());
vector<int> int_result;
vector<int> floating_result;
while (a.integer.size() < int_size)
a.integer.insert(a.integer.begin(), 0);
while (b.integer.size() < int_size)
b.integer.insert(b.integer.begin(), 0);
while (a.floating.size() < float_size)
a.floating.push_back(0);
while (b.floating.size() < float_size)
b.floating.push_back(0);
for (auto av = a.floating.rbegin(), bv = b.floating.rbegin(); av != a.floating.rend() && bv != b.floating.rend(); ++av, ++bv) {
int sum = *av + *bv + next;
floating_result.insert(floating_result.begin(), sum % 10);
next = sum / 10;
}
for (auto av = a.integer.rbegin(), bv = b.integer.rbegin(); av != a.integer.rend() && bv != b.integer.rend(); ++av, ++bv) {
int sum = *av + *bv + next;
int_result.insert(int_result.begin(), sum % 10);
next = sum / 10;
}
if (next != 0) int_result.insert(int_result.begin(), next);
res.integer = int_result;
res.floating = floating_result;
return res;
}
triple operations::subtract(triple& a, triple& b) {
triple res;
int borrow = 0;
bool negative = false;
int int_size = max(a.integer.size(), b.integer.size());
int float_size = max(a.floating.size(), b.floating.size());
vector<int> int_result;
vector<int> floating_result;
while (a.integer.size() < int_size)
a.integer.insert(a.integer.begin(), 0);
while (b.integer.size() < int_size)
b.integer.insert(b.integer.begin(), 0);
while (a.floating.size() < float_size)
a.floating.push_back(0);
while (b.floating.size() < float_size)
b.floating.push_back(0);
if (a < b) {
swap(a, b);
negative = true;
}
if (a.negative && !b.negative) {
res = a + b;
res.negative = true;
return res;
}
else if (!a.negative && b.negative) {
res = a + b;
res.negative = false;
return res;
}
for (int i = float_size - 1, j = float_size - 1; i >= 0 || j >= 0; i--, j--) {
int digit1 = (i >= 0) ? a.floating[i] : 0;
int digit2 = (j >= 0) ? b.floating[j] : 0;
int diff = digit1 - digit2 - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
}
else borrow = 0;
floating_result.insert(floating_result.begin(), diff);
}
for (int i = int_size - 1, j = int_size - 1; i >= 0 || j >= 0; i--, j--) {
int digit1 = (i >= 0) ? a.integer[i] : 0;
int digit2 = (j >= 0) ? b.integer[j] : 0;
int diff = digit1 - digit2 - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
}
else borrow = 0;
int_result.insert(int_result.begin(), diff);
}
while (!int_result.empty() && int_result.front() == 0) int_result.erase(int_result.begin());
while (!floating_result.empty() && floating_result.back() == 0) floating_result.pop_back();
if (int_result.empty()) {
int_result.push_back(0);
}
res.negative = negative;
res.integer = int_result;
res.floating = floating_result;
return res;
}
triple operations::multiply(triple& a, triple& b) {
triple res;
vector<int> int_result, floating_result;
vector<int> num1, num2;
int decimal = a.floating.size() + b.floating.size();
num1 = a.integer;
num2 = b.integer;
num1.insert(num1.end(), a.floating.begin(), a.floating.end());
num2.insert(num2.end(), b.floating.begin(), b.floating.end());
vector<int> result(num1.size() + num2.size());
if (a.negative && !b.negative || !a.negative && b.negative) res.negative = true;
for (int i = a.integer.size() + a.floating.size() - 1; i >= 0; i--) {
int carry = 0;
for (int j = b.integer.size() + b.floating.size() - 1; j >= 0; j--) {
int prod = num1[i] * num2[j] + result[i + j + 1] + carry;
result[i + j + 1] = prod % 10;
carry = prod / 10;
}
result[i] += carry;
}
int i = 0;
for (auto it = result.rbegin(); it != result.rend() && i < decimal; it++, i++)
floating_result.insert(floating_result.begin(), *it);
i = 0;
for (auto it = result.begin(); it != result.end() && i < result.size() - decimal; it++, i++)
int_result.push_back(*it);
while (!int_result.empty() && int_result.front() == 0) int_result.erase(int_result.begin());
while (!floating_result.empty() && floating_result.back() == 0) floating_result.pop_back();
res.integer = int_result;
res.floating = floating_result;
return res;
}
triple operations::divide(triple& a, triple& b) {
vector<int> dividend;
vector<int> divisor;
for (auto i : a.integer) dividend.push_back(i);
for (auto i : a.floating) dividend.push_back(i);
for (auto i : b.integer) divisor.push_back(i);
for (auto i : b.floating) divisor.push_back(i);
if (a.floating.size() > b.floating.size()) {
int add = a.floating.size() - b.floating.size();
while (add--) divisor.push_back(0);
}
if (a.floating.size() < b.floating.size()) {
int add = b.floating.size() - a.floating.size();
while (add--) dividend.push_back(0);
}
triple tempb;
int count = 0;
triple result;
result.integer = { 0 };
result.floating = {};
triple one;
triple ten;
triple zero;
zero.integer = { 0 };
zero.floating = { 0 };
ten.integer = { 1, 0 };
ten.floating = {};
one.integer = { 1 };
one.floating = { 0 };
triple res = a;
int currentPrecision = 0;
while (!(res < b)) {
tempb = b;
res = res - tempb;
if (!res.negative) result = result + one;
}
result.floating.clear();
bool first = false;
res.negative = false;
while (currentPrecision < precision) {
res.negative = false;
while (res < b && res != zero && res != b) {
if (res.integer.empty() && res.floating.empty() || (res.integer.size() == 1 && res.integer.at(0) == 0) && (res.floating.size() == 1 && res.floating.at(0) == 0)) {
break;
}
if (first) result.floating.push_back(0);
first = true;
res = res * ten;
}
first = false;
count = 0;
while (!(res < b) && !(res == zero)) {
tempb = b;
res = res - tempb;
count++;
}
res.negative = false;
if (count != 0) result.floating.push_back(count);
currentPrecision++;
}
return result;
}
triple operator+(triple& a,triple& b) {
operations op;
triple res = op.add(a, b);
return res;
}
triple operator-(triple& a, triple& b) {
operations op;
triple res = op.subtract(a, b);
return res;
}
triple operator*(triple& a, triple& b) {
operations op;
triple res = op.multiply(a, b);
return res;
}
triple operator/(triple& a, triple& b) {
operations op;
triple res = op.divide(a, b);
return res;
}

14
Lab/operations.h Normal file
View File

@@ -0,0 +1,14 @@
#include <vector>
#include <string>
#include <algorithm>
#include "triple.h"
class operations {
public:
triple add(triple& a, triple& b) ;
triple subtract(triple& a, triple& b);
triple multiply(triple& a, triple& b);
triple divide(triple& a, triple& b);
friend triple operator+(triple& a, triple& b);
friend triple operator-(triple& a, triple& b);
};

132
Lab/triple.cpp Normal file
View File

@@ -0,0 +1,132 @@
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
#include "triple.h"
#include "operations.h"
using namespace std;
bool negative = false;
vector<int> integer;
vector<int> floating;
int decimal_pos = -1;
void triple::input() {
std::string line;
std::getline(std::cin, line);
bool negative = false;
if (line[0] == '-') {
negative = true;
line = line.substr(1);
}
decimal_pos = line.find('.');
if (decimal_pos != std::string::npos) {
std::transform(line.begin(), line.begin() + decimal_pos, std::back_inserter(integer),
[](char c) { return c - '0'; });
std::transform(line.begin() + decimal_pos + 1, line.end(), std::back_inserter(floating),
[](char c) { return c - '0'; });
}
else {
std::transform(line.begin(), line.end(), std::back_inserter(integer),
[](char c) { return c - '0'; });
}
this->negative = negative;
}
void triple::print() {
if (negative) cout << '-';
for (int i : integer) cout << i;
if (floating.size() == 0) {
cout << ".0";
return;
}
else {
cout << '.';
for (int x : floating) cout << x;
}
cout << '\n';
}
istream& operator>>(istream& in, triple& hf) {
hf.input();
return in;
}
ostream& operator<<(ostream& out, triple& hf) {
hf.print();
return out;
}
bool operator<(triple& a, triple& b) {
if (a.negative && !b.negative) return true;
if (!a.negative && b.negative) return false;
if (a.negative && b.negative) {
swap(a, b);
}
int int_size_a = a.integer.size();
int int_size_b = b.integer.size();
if (int_size_a != int_size_b) {
return int_size_a < int_size_b;
}
for (int i = 0; i < int_size_a; ++i) {
if (a.integer[i] != b.integer[i]) {
return a.integer[i] < b.integer[i];
}
}
int float_size_a = a.floating.size();
int float_size_b = b.floating.size();
if (float_size_a != float_size_b) {
return float_size_a < float_size_b;
}
for (int i = 0; i < float_size_a; ++i) {
if (a.floating[i] != b.floating[i]) {
return a.floating[i] < b.floating[i];
}
}
return false;
}
bool operator>(triple& a, triple& b) {
if (a.negative && !b.negative) return false;
if (!a.negative && b.negative) return true;
if (a.negative && b.negative) {
swap(a, b);
}
int int_size_a = a.integer.size();
int int_size_b = b.integer.size();
if (int_size_a != int_size_b) {
return int_size_a < int_size_b;
}
for (int i = 0; i < int_size_a; ++i) {
if (a.integer[i] != b.integer[i]) {
return a.integer[i] > b.integer[i];
}
}
int float_size_a = a.floating.size();
int float_size_b = b.floating.size();
if (float_size_a != float_size_b) {
return float_size_a > float_size_b;
}
for (int i = 0; i < float_size_a; ++i) {
if (a.floating[i] != b.floating[i]) {
return a.floating[i] > b.floating[i];
}
}
return false;
}
bool operator==(triple& a, triple& b) {
if (a.integer == b.integer && a.floating == b.floating) return true;
return false;
}
bool operator!=(triple& a, triple& b) {
if (a.integer == b.integer && a.floating == b.floating) return false;
return true;
}

31
Lab/triple.h Normal file
View File

@@ -0,0 +1,31 @@
#ifndef TRIPLE_H
#define TRIPLE_H
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
class triple {
public:
bool negative;
std::vector<int> integer;
std::vector<int> floating;
int decimal_pos;
void input();
void print();
friend istream& operator>>(istream& in, triple& hf);
friend ostream& operator<<(ostream& out, triple& hf);
friend triple operator+(triple& a, triple& b);
friend triple operator-(triple& a, triple& b);
friend triple operator*(triple& a, triple& b);
friend triple operator/(triple& a, triple& b);
friend bool operator<(triple& a, triple& b);
friend bool operator>(triple& a, triple& b);
friend bool operator==(triple& a, triple& b);
friend bool operator!=(triple& a, triple& b);
};
#endif