diff --git a/Equel/.vs/Equel/v15/.suo b/Equel/.vs/Equel/v15/.suo new file mode 100644 index 0000000..d85fdfc Binary files /dev/null and b/Equel/.vs/Equel/v15/.suo differ diff --git a/Equel/.vs/Equel/v16/.suo b/Equel/.vs/Equel/v16/.suo new file mode 100644 index 0000000..1f9af55 Binary files /dev/null and b/Equel/.vs/Equel/v16/.suo differ diff --git a/Equel/.vs/Equel/v16/Browse.VC.db b/Equel/.vs/Equel/v16/Browse.VC.db new file mode 100644 index 0000000..a5f91e8 Binary files /dev/null and b/Equel/.vs/Equel/v16/Browse.VC.db differ diff --git a/Equel/.vs/Equel/v16/ipch/AutoPCH/2e5308200ad4cf43/CUBEQ.ipch b/Equel/.vs/Equel/v16/ipch/AutoPCH/2e5308200ad4cf43/CUBEQ.ipch new file mode 100644 index 0000000..54f0fc4 Binary files /dev/null and b/Equel/.vs/Equel/v16/ipch/AutoPCH/2e5308200ad4cf43/CUBEQ.ipch differ diff --git a/Equel/.vs/Equel/v16/ipch/AutoPCH/42c16cc7ec0aa7fe/FOURSTEQ.ipch b/Equel/.vs/Equel/v16/ipch/AutoPCH/42c16cc7ec0aa7fe/FOURSTEQ.ipch new file mode 100644 index 0000000..7dfe3fc Binary files /dev/null and b/Equel/.vs/Equel/v16/ipch/AutoPCH/42c16cc7ec0aa7fe/FOURSTEQ.ipch differ diff --git a/Equel/.vs/Equel/v16/ipch/AutoPCH/4dabc09d6c7620a2/LINEAREQ.ipch b/Equel/.vs/Equel/v16/ipch/AutoPCH/4dabc09d6c7620a2/LINEAREQ.ipch new file mode 100644 index 0000000..0ee40a1 Binary files /dev/null and b/Equel/.vs/Equel/v16/ipch/AutoPCH/4dabc09d6c7620a2/LINEAREQ.ipch differ diff --git a/Equel/.vs/Equel/v16/ipch/AutoPCH/837c06f902e414e/SOURCE.ipch b/Equel/.vs/Equel/v16/ipch/AutoPCH/837c06f902e414e/SOURCE.ipch new file mode 100644 index 0000000..536b918 Binary files /dev/null and b/Equel/.vs/Equel/v16/ipch/AutoPCH/837c06f902e414e/SOURCE.ipch differ diff --git a/Equel/.vs/Equel/v16/ipch/AutoPCH/860cb841c6c79786/SQUAREEQ.ipch b/Equel/.vs/Equel/v16/ipch/AutoPCH/860cb841c6c79786/SQUAREEQ.ipch new file mode 100644 index 0000000..3ac1bdc Binary files /dev/null and b/Equel/.vs/Equel/v16/ipch/AutoPCH/860cb841c6c79786/SQUAREEQ.ipch differ diff --git a/Equel/.vs/Equel/v16/ipch/AutoPCH/d2aff6a23ac1f8cb/CUBEQUATION.ipch b/Equel/.vs/Equel/v16/ipch/AutoPCH/d2aff6a23ac1f8cb/CUBEQUATION.ipch new file mode 100644 index 0000000..740c9c5 Binary files /dev/null and b/Equel/.vs/Equel/v16/ipch/AutoPCH/d2aff6a23ac1f8cb/CUBEQUATION.ipch differ diff --git a/Equel/.vs/Equel/v16/ipch/AutoPCH/dede0f4c93808bc/FOURSRCOMPLEX.ipch b/Equel/.vs/Equel/v16/ipch/AutoPCH/dede0f4c93808bc/FOURSRCOMPLEX.ipch new file mode 100644 index 0000000..2de15d0 Binary files /dev/null and b/Equel/.vs/Equel/v16/ipch/AutoPCH/dede0f4c93808bc/FOURSRCOMPLEX.ipch differ diff --git a/Equel/.vs/ProjectSettings.json b/Equel/.vs/ProjectSettings.json new file mode 100644 index 0000000..0cf5ea5 --- /dev/null +++ b/Equel/.vs/ProjectSettings.json @@ -0,0 +1,3 @@ +{ + "CurrentProjectSetting": "No Configurations" +} \ No newline at end of file diff --git a/Equel/.vs/VSWorkspaceState.json b/Equel/.vs/VSWorkspaceState.json new file mode 100644 index 0000000..12b8fc2 --- /dev/null +++ b/Equel/.vs/VSWorkspaceState.json @@ -0,0 +1,7 @@ +{ + "ExpandedNodes": [ + "" + ], + "SelectedNode": "\\Equel.sln", + "PreviewInSolutionExplorer": false +} \ No newline at end of file diff --git a/Equel/.vs/slnx.sqlite b/Equel/.vs/slnx.sqlite new file mode 100644 index 0000000..2766b37 Binary files /dev/null and b/Equel/.vs/slnx.sqlite differ diff --git a/Equel/Debug/Equel.ilk b/Equel/Debug/Equel.ilk new file mode 100644 index 0000000..eba76a9 Binary files /dev/null and b/Equel/Debug/Equel.ilk differ diff --git a/Equel/Debug/Equel.pdb b/Equel/Debug/Equel.pdb new file mode 100644 index 0000000..8c1fae8 Binary files /dev/null and b/Equel/Debug/Equel.pdb differ diff --git a/Equel/Equel.sln b/Equel/Equel.sln new file mode 100644 index 0000000..2270eab --- /dev/null +++ b/Equel/Equel.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27428.2043 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Equel", "Equel\Equel.vcxproj", "{FE06C801-59C7-4732-80E8-C2FF84675DD8}" +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 + {FE06C801-59C7-4732-80E8-C2FF84675DD8}.Debug|x64.ActiveCfg = Debug|x64 + {FE06C801-59C7-4732-80E8-C2FF84675DD8}.Debug|x64.Build.0 = Debug|x64 + {FE06C801-59C7-4732-80E8-C2FF84675DD8}.Debug|x86.ActiveCfg = Debug|Win32 + {FE06C801-59C7-4732-80E8-C2FF84675DD8}.Debug|x86.Build.0 = Debug|Win32 + {FE06C801-59C7-4732-80E8-C2FF84675DD8}.Release|x64.ActiveCfg = Release|x64 + {FE06C801-59C7-4732-80E8-C2FF84675DD8}.Release|x64.Build.0 = Release|x64 + {FE06C801-59C7-4732-80E8-C2FF84675DD8}.Release|x86.ActiveCfg = Release|Win32 + {FE06C801-59C7-4732-80E8-C2FF84675DD8}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {44F85693-50C9-45A3-B804-D03B0A2F2B8A} + EndGlobalSection +EndGlobal diff --git a/Equel/Equel/CubEq.cpp b/Equel/Equel/CubEq.cpp new file mode 100644 index 0000000..f05870c --- /dev/null +++ b/Equel/Equel/CubEq.cpp @@ -0,0 +1,231 @@ +#include "CubEq.h" +#include + + +CubEq::CubEq() +{ + inputCoef(); + + Zmist(); + + compSQR(); + + computeN(); + + if (n != 0 || n != 255) + { + x = new double[n]; + } + + solve(); +} + + +CubEq::CubEq(double const a, double const b, double const c, double const d) +{ + this->a = a; + this->b = b; + this->c = c; + this->d = d; + + Zmist(); + + compSQR(); + + computeN(); + + if (n != 0 || n != 255) + { + x = new double[n]; + } + + solve(); +} + + + +CubEq::~CubEq() +{ + delete[] x; + x = nullptr; +} + + +void CubEq::compSQR() +{ + Q = (b*b - 3*c)/9; + R = (2*b*b*b - 9*b*c + 27*d)/54; + S = Q * Q * Q - R * R; + //std::cout << S << std::endl; + //std::cout << Q << std::endl; + //std::cout << R << std::endl; +} + + +void CubEq::Zmist() +{ + if (a != 0) + { + b = b / a; + c = c / a; + d = d / a; + a = 1; + } +} + + +void CubEq::computeN() +{ + if (a != 0) + { + if (S >= 0) + { + n = 3; + } + else + { + n = 1; + } + } + else + { + SquareEq* sq = new SquareEq(b, c, d); + n = sq->GetN(); + + } +} + + +void CubEq::solve() +{ + //std::cout << "\n\tStart solve!" << std::endl; + + if (a == 0) + { + if (b == 0) + { + LinearEq* linear = new LinearEq(c, d); + + x[0] = linear->getX(); + n = linear->getN(); + //std::cout << "We are in cycle " << x[0]; + + } + else + { + + SquareEq* sq = new SquareEq(b, c, d); + + x = sq->GetX(); + } + } + else + { + if (S > 0) + { + double fi; + //std::cout << "fi_under = " << R / sqrt(Q * Q * Q) << std::endl; + //std::cout << "acos = " << acos(-0.7638) << std::endl; + fi = acos(R / sqrt(Q * Q * Q))/3; + //std::cout << "fi = " << fi << std::endl; + x[0] = -2 * sqrt(Q) * cos(fi) - b / 3; + //std::cout << "x[0] = " << x[0]; + x[1] = -2 * sqrt(Q) * cos(fi - 2*M_PI/3) - b / 3; + x[2] = -2 * sqrt(Q) * cos(fi + 2*M_PI/3) - b / 3; + } + else if (S == 0) + { + //std::cout << "We are in cycle " << x[0]; + x[0] = -2*cbrt(R) - b / 3; + x[1] = cbrt(R) - b / 3; + x[2] = cbrt(R) - b / 3; + } + else + { + //std::cout << "We are in cycle " << x[0]; + if (Q > 0) + { + double fi; + fi = acosh(abs(R) / sqrt(Q * Q * Q)) / 3; + x[0] = -2 * R / abs(R) * sqrt(Q) * cosh(fi) - b / 3; + } + else if (Q < 0) + { + //std::cout << "We are in cycle " << x[0]; + double fi; + fi = asinh(abs(R) / sqrt(abs(Q * Q * Q))) / 3; + x[0] = -2 * R / abs(R) * sqrt(abs(Q)) * sinh(fi) - b / 3; + } + else + { + x[0] = -cbrt(d - b * b * b / 27) - b / 3; + } + } + } +} + + +void CubEq::showX() +{ + if (n == 255) + { + std::cout << "\t\t-We have to many solves!" << std::endl; + } + else if (n == 0) + { + std::cout << "\t\t-We have no solves!" << std::endl; + } + else + { + std::cout << "\t\t-Our solves are:\n"; + for (int i = 0; i < n; i++) + { + std::cout << "\t\t\tx[" << i << "] = " << x[i] << std::endl; + } + } +} + +double* CubEq::GetX() +{ + return x; +} + + +void CubEq::inputCoef() +{ + std::cout << "\tPlease, input a = ?\b"; + while (!(std::cin >> a)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + std::cout << "\tPlease, input b = ?\b"; + while (!(std::cin >> b)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + std::cout << "\tPlease, input c = ?\b"; + while (!(std::cin >> c)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + std::cout << "\tPlease, input d = ?\b"; + while (!(std::cin >> d)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } +} diff --git a/Equel/Equel/CubEq.h b/Equel/Equel/CubEq.h new file mode 100644 index 0000000..6186f91 --- /dev/null +++ b/Equel/Equel/CubEq.h @@ -0,0 +1,29 @@ +#pragma once +#include "Equation.h" +#include "LinearEq.h" +#include "SquareEq.h" +#include +#include +#define _USE_MATH_DEFINES +#include + +class CubEq : public Equation +{ +public: + CubEq(); + CubEq(double const, double const, double const, double const); + ~CubEq(); + + void showX() override; + + double* GetX(); + +private: + double a, b, c, d, S, Q, R; + void solve() override; + void computeN() override; + void inputCoef() override; + void compSQR(); + void Zmist(); + +}; \ No newline at end of file diff --git a/Equel/Equel/CubEquation.cpp b/Equel/Equel/CubEquation.cpp new file mode 100644 index 0000000..0670dc1 --- /dev/null +++ b/Equel/Equel/CubEquation.cpp @@ -0,0 +1,12 @@ +#include "CubEquation.h" + + + +CubEquation::CubEquation() +{ +} + + +CubEquation::~CubEquation() +{ +} diff --git a/Equel/Equel/CubEquation.h b/Equel/Equel/CubEquation.h new file mode 100644 index 0000000..139597f --- /dev/null +++ b/Equel/Equel/CubEquation.h @@ -0,0 +1,2 @@ + + diff --git a/Equel/Equel/Debug/Equel.log b/Equel/Equel/Debug/Equel.log new file mode 100644 index 0000000..37ced1a --- /dev/null +++ b/Equel/Equel/Debug/Equel.log @@ -0,0 +1,5 @@ + LinearEq.cpp + Source.cpp + SquareEq.cpp + Generating Code... + Equel.vcxproj -> c:\Users\Roman\source\repos\Equel\Debug\Equel.exe diff --git a/Equel/Equel/Debug/Equel.tlog/CL.command.1.tlog b/Equel/Equel/Debug/Equel.tlog/CL.command.1.tlog new file mode 100644 index 0000000..a9c4f12 Binary files /dev/null and b/Equel/Equel/Debug/Equel.tlog/CL.command.1.tlog differ diff --git a/Equel/Equel/Debug/Equel.tlog/CL.read.1.tlog b/Equel/Equel/Debug/Equel.tlog/CL.read.1.tlog new file mode 100644 index 0000000..d48dc4a Binary files /dev/null and b/Equel/Equel/Debug/Equel.tlog/CL.read.1.tlog differ diff --git a/Equel/Equel/Debug/Equel.tlog/CL.write.1.tlog b/Equel/Equel/Debug/Equel.tlog/CL.write.1.tlog new file mode 100644 index 0000000..b466103 Binary files /dev/null and b/Equel/Equel/Debug/Equel.tlog/CL.write.1.tlog differ diff --git a/Equel/Equel/Debug/Equel.tlog/Equel.lastbuildstate b/Equel/Equel/Debug/Equel.tlog/Equel.lastbuildstate new file mode 100644 index 0000000..6a3d83d --- /dev/null +++ b/Equel/Equel/Debug/Equel.tlog/Equel.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v141:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0.16299.0 +Debug|Win32|c:\Users\Roman\source\repos\Equel\| diff --git a/Equel/Equel/Debug/Equel.tlog/link.command.1.tlog b/Equel/Equel/Debug/Equel.tlog/link.command.1.tlog new file mode 100644 index 0000000..2f81aa1 Binary files /dev/null and b/Equel/Equel/Debug/Equel.tlog/link.command.1.tlog differ diff --git a/Equel/Equel/Debug/Equel.tlog/link.read.1.tlog b/Equel/Equel/Debug/Equel.tlog/link.read.1.tlog new file mode 100644 index 0000000..3ad044b Binary files /dev/null and b/Equel/Equel/Debug/Equel.tlog/link.read.1.tlog differ diff --git a/Equel/Equel/Debug/Equel.tlog/link.write.1.tlog b/Equel/Equel/Debug/Equel.tlog/link.write.1.tlog new file mode 100644 index 0000000..7126a9c Binary files /dev/null and b/Equel/Equel/Debug/Equel.tlog/link.write.1.tlog differ diff --git a/Equel/Equel/Debug/vc141.idb b/Equel/Equel/Debug/vc141.idb new file mode 100644 index 0000000..a0f24b9 Binary files /dev/null and b/Equel/Equel/Debug/vc141.idb differ diff --git a/Equel/Equel/Debug/vc141.pdb b/Equel/Equel/Debug/vc141.pdb new file mode 100644 index 0000000..4757c36 Binary files /dev/null and b/Equel/Equel/Debug/vc141.pdb differ diff --git a/Equel/Equel/Equation.h b/Equel/Equel/Equation.h new file mode 100644 index 0000000..ae45c92 --- /dev/null +++ b/Equel/Equel/Equation.h @@ -0,0 +1,16 @@ +#pragma once +#include +class Equation +{ +public: + virtual void showX() = 0; + int getN() { return n; } + +protected: + int n; + double *x; + + virtual void solve() = 0; + virtual void computeN() = 0; + virtual void inputCoef() = 0; +}; diff --git a/Equel/Equel/Equel.vcxproj b/Equel/Equel/Equel.vcxproj new file mode 100644 index 0000000..5e8dba4 --- /dev/null +++ b/Equel/Equel/Equel.vcxproj @@ -0,0 +1,137 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {FE06C801-59C7-4732-80E8-C2FF84675DD8} + Equel + 10.0 + + + + Application + true + v142 + MultiByte + + + Application + false + v142 + true + MultiByte + + + Application + true + v142 + MultiByte + + + Application + false + v142 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + Level3 + Disabled + true + true + + + + + Level3 + Disabled + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + Level3 + MaxSpeed + true + true + true + true + + + true + true + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Equel/Equel/Equel.vcxproj.filters b/Equel/Equel/Equel.vcxproj.filters new file mode 100644 index 0000000..efd80cf --- /dev/null +++ b/Equel/Equel/Equel.vcxproj.filters @@ -0,0 +1,56 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;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 + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/Equel/Equel/Equel.vcxproj.user b/Equel/Equel/Equel.vcxproj.user new file mode 100644 index 0000000..be25078 --- /dev/null +++ b/Equel/Equel/Equel.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Equel/Equel/FourSrComplex.cpp b/Equel/Equel/FourSrComplex.cpp new file mode 100644 index 0000000..abf4506 --- /dev/null +++ b/Equel/Equel/FourSrComplex.cpp @@ -0,0 +1,82 @@ +#include "FourSrComplex.h" + +using namespace std; + +FourSrComplex::FourSrComplex() +{ + inputCoef(); + + showX(); +} + + +FourSrComplex::~FourSrComplex() +{ +} + + +void FourSrComplex::ComputeABG() +{ + alpha = ((-3) * pow(b, 2)) / (8 * pow(a, 2)) + c / a; + betta = ((pow(b, 3)) / (8 * pow(a, 3))) - ((b * c) / (2 * pow(a, 2))) + d / a; + gamma = (((-3) * pow(b, 4)) / (256 * pow(a, 4))) + ((c * pow(b, 2)) / (16 * pow(a, 3))) - ((b * d) / (4 * pow(a, 2))) + e / a; +} + + +void FourSrComplex::inputCoef() +{ + cout << "Please enter A, and press 'Enter': " << endl; + cin >> a; + cout << "Please enter B, and press 'Enter': " << endl; + cin >> b; + cout << "Please enter C, and press 'Enter': " << endl; + cin >> c; + cout << "Please enter D, and press 'Enter': " << endl; + cin >> d; + cout << "Please enter E, and press 'Enter': " << endl; + cin >> e; +} + +void FourSrComplex::showX() +{ + if (betta == 0) + { + char* u1, * u2, * u3, * u4, * x1, * x2, * x3, * x4; //Ïîïûòêà ââîäà ÷èñëà i=sqrt(-1). Íåóäà÷íî. + char* i[1] = 'i'; + if ((pow(alpha, 2) - (4 * gamma)) >= 0) + { + if (((-alpha + sqrt(pow(alpha, 2) - (4 * gamma))) / 2) >= 0) + { + * u1 = sqrt((-alpha + sqrt(pow(alpha, 2) - (4 * gamma))) / 2); + * u2 = (-1) * sqrt((-alpha + sqrt(pow(alpha, 2) - (4 * gamma))) / 2); + * u3 = sqrt((-alpha - sqrt(pow(alpha, 2) - (4 * gamma))) / 2); + * u4 = (-1) * sqrt((-alpha - sqrt(pow(alpha, 2) - (4 * gamma))) / 2); + cout << *u1 << endl << *u2 << endl << *u3 << endl << *u4; + } + else + { + * u1 = "i" * sqrt((-1) * ((-alpha + sqrt(pow(alpha, 2) - (4 * gamma))) / 2)); + * u2 = (*i) * (-1) * sqrt((-1) * ((-alpha + sqrt(pow(alpha, 2) - (4 * gamma))) / 2)); + * u3 = (*i) * sqrt((-1) * ((-alpha - sqrt(pow(alpha, 2) - (4 * gamma))) / 2)); + * u4 = (*i) * (-1) * sqrt((-1) * ((-alpha - sqrt(pow(alpha, 2) - (4 * gamma))) / 2)); + cout << *u1 << endl << *u2 << endl << *u3 << endl << *u4; + } + } + else + { + * u1 = sqrt((-alpha + sqrt(pow(alpha, 2) - (4 * gamma))) / 2); + * u2 = (-1) * sqrt((-alpha + sqrt(pow(alpha, 2) - (4 * gamma))) / 2); + * u3 = sqrt((-alpha - sqrt(pow(alpha, 2) - (4 * gamma))) / 2); + * u4 = (-1) * sqrt((-alpha - sqrt(pow(alpha, 2) - (4 * gamma))) / 2); + } + * x1 = *u1 - (b / (4 * a)); + * x2 = *u2 - (b / (4 * a)); + * x3 = *u3 - (b / (4 * a)); + * x4 = *u4 - (b / (4 * a)); + cout << "The roots equalization pars: " << endl << endl; + cout << "x_1= " << *x1 << endl; + cout << "x_2= " << *x2 << endl; + cout << "x_3= " << *x3 << endl; + cout << "x_4= " << *x4 << endl; + } +} \ No newline at end of file diff --git a/Equel/Equel/FourSrComplex.h b/Equel/Equel/FourSrComplex.h new file mode 100644 index 0000000..7d70dc0 --- /dev/null +++ b/Equel/Equel/FourSrComplex.h @@ -0,0 +1,18 @@ +#pragma once +//#include "stdafx.h" +#include +#include +class FourSrComplex +{ +public: + FourSrComplex(); + ~FourSrComplex(); + void showX(); +private: + void inputCoef(); + double a, b, c, d, e, f; + double alpha, betta, gamma; + void ComputeABG(); + void solve(); +}; + diff --git a/Equel/Equel/FourStEq.cpp b/Equel/Equel/FourStEq.cpp new file mode 100644 index 0000000..be3ad90 --- /dev/null +++ b/Equel/Equel/FourStEq.cpp @@ -0,0 +1,236 @@ +#include "FourStEq.h" + + + +FourStEq::FourStEq() +{ + inputCoef(); + + computeN(); + + if (n != 0 || n != 255) + { + //std::cout << "Here"; + x = new double[n]; + } + + solve(); +} + + +FourStEq::FourStEq(double const a, double const b, double const c, double const d, double const e) +{ + this->a = a; + this->b = b; + this->c = c; + this->d = d; + this->e = e; + + + computeN(); + + if (n != 0 || n != 255) + { + //std::cout << "Here"; + x = new double[n]; + } + + solve(); +} + + + +FourStEq::~FourStEq() +{ + delete x; + x = nullptr; +} + + +void FourStEq::computeN() +{ + if (a == 0) + { + CubEq* cb = new CubEq(b, c, d, e); + n = cb->getN(); + } + else + { + double a1, b1, c1, d1; + a1 = b / a; + b1 = c / a; + c1 = d / a; + d1 = e / a; + double p, q, r, s; + p = b1 - 3 * a1 * a1 / 8; + q = a1 * a1 * a1 / 8 - a1 * b1 / 2 + c1; + r = -3 * (a1 * a1 * a1 * a1 / 256) + (a1 * a1 * b1 / 16) - (c1 * a1 / 4) + (d1); + + CubEq* cb = new CubEq(2, -p, (-2 * r), (r * p - q * q / 4)); + //std::cout << "2 = " << -p << std::endl; + //std::cout << "3 = " << -2*r << std::endl; + //std::cout << "4 = " << r*p - q*q/4 << std::endl; + s = cb->GetX()[0]; + + //std::cout << "s = " << s << std::endl; + //std::cout << "s2 = " << cb->GetX()[1] << std::endl; + //std::cout << "s3 = " << cb->GetX()[2] << std::endl; + //std::cout << "p = " << p << std::endl; + //std::cout << "q = " << q << std::endl; + //std::cout << "r = " << r << std::endl; + if (2 * s - p <= 0) + { + n = 0; + } + else + { + //std::cout << "We are here"; + int n1, n2; + SquareEq* sq = new SquareEq(1, -sqrt(2 * s - p), q / (2 * sqrt(2 * s - p))); + SquareEq* sq2 = new SquareEq(1, sqrt(2 * s - p), -q / (2 * sqrt(2 * s - p))); + + n1 = sq->getN(); + n2 = sq2->getN(); + //td::cout << "n1 = " << n1 << std::endl; + //std::cout << "n2 = " << n2 << std::endl; + + n = n1 + n2; + //std::cout << "n = " << n << std::endl; + } + } +} + + +void FourStEq::solve() +{ + //std::cout << "Here"; + if (a == 0) + { + CubEq* cb = new CubEq(b, c, d, e); + x = cb->GetX(); + } + else + { + double a1, b1, c1, d1; + a1 = b / a; + b1 = c / a; + c1 = d / a; + d1 = e / a; + double p, q, r, s; + p = b1 - 3 * a1 * a1 / 8; + q = a1 * a1 * a1 / 8 - a1 * b1 / 2 + c1; + r = -3 * (a1 * a1 * a1 * a1 / 256) + (a1 * a1 * b1 / 16) - (c1 * a1 / 4) + (d1); + + CubEq* cb = new CubEq(2, -p, -2 * r, r * p - q * q / 4); + s = cb->GetX()[0]; + + SquareEq* sq = new SquareEq(1, -sqrt(2 * s - p), q / (2 * sqrt(2 * s - p)) + s); + SquareEq * sq2 = new SquareEq(1, sqrt(2 * s - p), -q / (2 * sqrt(2 * s - p)) + s); + + //std::cout << "b3 = " << -sqrt(2 * s - p) << "c3 = " << q / (2 * sqrt(2 * s - p)) + s << std::endl; + //std::cout << "b3 = " << sqrt(2 * s - p) << "c3 = " << -q / (2 * sqrt(2 * s - p)) + s << std::endl; + + int n1, n2; + double* x1 = new double; + double* x2 = new double; + + + n1 = sq->getN(); + n2 = sq2->getN(); + + x1 = sq->GetX(); + x2 = sq2->GetX(); + + //std::cout << " x1 = " << x1[0] << " x2 = " << x1[1] << " x3 = " << x2[0] << " x4 = " << x2[1] << std::endl; + + if ((n1 != 255) && (n != 0)) + { + for (int i = 0; i < n1; i++) + { + x[i] = x1[i] - a1/4; + } + } + if ((n2 != 255) && (n != 0)) + { + for (int i = 0; i < n2; i++) + { + x[n1 + i] = x2[i] - a1/4; + } + } + } +} + + +void FourStEq::showX() +{ + //std::cout << "Here"; + if (n == 255) + { + std::cout << "\t\t-We have to many solves!" << std::endl; + } + else if (n == 510) + { + std::cout << "\t\t-We have to many solves!" << std::endl; + } + else if (n == 0) + { + std::cout << "\t\t-We have no solves!" << std::endl; + } + else + { + std::cout << "\t\t-Our solves are:\n"; + for (int i = 0; i < n; i++) + { + std::cout << "\t\t\tx[" << i << "] = " << x[i] << std::endl; + } + } +} + + +void FourStEq::inputCoef() +{ + std::cout << "\tPlease, input a = ?\b"; + while (!(std::cin >> a)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + std::cout << "\tPlease, input b = ?\b"; + while (!(std::cin >> b)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + std::cout << "\tPlease, input c = ?\b"; + while (!(std::cin >> c)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + std::cout << "\tPlease, input d = ?\b"; + while (!(std::cin >> d)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + std::cout << "\tPlease, input e = ?\b"; + while (!(std::cin >> e)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } +} diff --git a/Equel/Equel/FourStEq.h b/Equel/Equel/FourStEq.h new file mode 100644 index 0000000..efe5ab1 --- /dev/null +++ b/Equel/Equel/FourStEq.h @@ -0,0 +1,21 @@ +#pragma once +#include "Equation.h" +#include "CubEq.h" + +class FourStEq : + public Equation +{ +public: + FourStEq(); + FourStEq(double const, double const, double const, double const, double const); + ~FourStEq(); + + void showX() override; + +private: + double a, b, c, d, e; + void solve() override; + void computeN() override; + void inputCoef() override; +}; + diff --git a/Equel/Equel/LinearEq.cpp b/Equel/Equel/LinearEq.cpp new file mode 100644 index 0000000..a85dec0 --- /dev/null +++ b/Equel/Equel/LinearEq.cpp @@ -0,0 +1,120 @@ +#include "LinearEq.h" + +LinearEq::LinearEq() +{ + inputCoef(); + + //std::cout << std::endl; + + computeN(); + + if (n != 0 || n != 255) + { + x = new double[n]; + } + + solve(); +} + +LinearEq::LinearEq(const double a, const double b) +{ + this->a = a; + this->b = b; + + computeN(); + + if (n != 0 || n != 255) + { + x = new double[n]; + } + + solve(); +} + + +LinearEq::~LinearEq() +{ + delete[] x; + x = nullptr; +} + +void LinearEq::computeN() +{ + if ((a * a + b * b) == 0) + { + n = 255; + } + else if ((a == 0) && (b != 0)) + { + n = 0; + } + else + { + n = 1; + } +} + +void LinearEq::solve() +{ + std::cout << "\n\tStart solve!" << std::endl; + + if (n == 255 || n == 0) + { + return; + } + else + { + if (b != 0) + { + x[0] = (-1.0) * (b / a); + } + else + { + x[0] = 0; + } + } +} + +void LinearEq::showX() +{ + if (n == 255) + { + std::cout << "\t\t-We have to many solves!" << std::endl; + } + else if (n == 0) + { + std::cout << "\t\t-We have no solves!" << std::endl; + } + else + { + std::cout << "\t\t-Our solves is x = " << x[0] << std::endl; + } +} + +void LinearEq::inputCoef() +{ + std::cout << "\tPlease, input a = ?\b"; + while (!(std::cin >> a)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + // std::cout << std::endl; + + std::cout << "\tPlease, input b = ?\b"; + while (!(std::cin >> b)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } +} + +double LinearEq::getX() +{ + return x[0]; +} diff --git a/Equel/Equel/LinearEq.h b/Equel/Equel/LinearEq.h new file mode 100644 index 0000000..421e9ba --- /dev/null +++ b/Equel/Equel/LinearEq.h @@ -0,0 +1,26 @@ +#pragma once +#include "Equation.h" +#include + +class LinearEq : public Equation +{ +public: + LinearEq(); + LinearEq(const double, const double); + ~LinearEq(); + + void showX() override; + + double getX(); + +private: + double a; + double b; + bool isSolved = false; + + void solve() override; + void computeN() override; + void inputCoef() override; + +}; + diff --git a/Equel/Equel/Source.cpp b/Equel/Equel/Source.cpp new file mode 100644 index 0000000..2d37d20 --- /dev/null +++ b/Equel/Equel/Source.cpp @@ -0,0 +1,256 @@ +#include "LinearEq.h" +#include "SquareEq.h" +#include "CubEq.h" +#include "FourStEq.h" +#include +#include + +void show_menu(); +int choice(); + +int main() +{ + show_menu(); + + return 0; +} + +void show_menu() +{ + switch (choice()) + { + case 1: + { + int answer; + std::cout << "Input from:\n" << "1. Consol\n" << "2. Test File" << std::endl; + while (!(std::cin >> answer)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Invalid input. Try aganin: "; + } + //std::cin >> answer; + if (answer == 1) + { + LinearEq* lin = new LinearEq(); + + lin->showX(); + } + else + { + if (answer == 2) + { + std::ifstream fin("testLin.txt"); + int n; + fin >> n; + for (int i = 0; i < n; i++) + { + double a, b; + fin >> a >> b; + + std::cout << a << "x + " << b << " = 0" << std::endl; + + LinearEq* lin = new LinearEq(a, b); + lin->showX(); + + std::cout << "\n---------------" << std::endl; + } + fin.close(); + } + } + + system("pause"); + system("cls"); + + show_menu(); + + return; + } + case 2: + { + int answer = 0; + std::cout << "Input from:\n" << "1. Consol\n" << "2. Test File" << std::endl; + while (!(std::cin >> answer)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Invalid input. Try aganin: "; + } + //std::cin >> answer; + if (answer == 1) + { + SquareEq* sq = new SquareEq(); + + sq->showX(); + + } + else + { + if (answer == 2) + { + std::ifstream fin("testSq.txt"); + int n; + fin >> n; + for (int i = 0; i < n; i++) + { + double a, b, c; + fin >> a >> b >> c; + + std::cout << a << "x^2 + " <showX(); + + std::cout << "\n---------------" << std::endl; + } + fin.close(); + } + } + + system("pause"); + system("cls"); + show_menu(); + return; + } + case 3: + { + int answer; + std::cout << "Input from:\n" << "1. Consol\n" << "2. Test File" << std::endl; + while (!(std::cin >> answer)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Invalid input. Try aganin: "; + } + //std::cin >> answer; + if (answer == 1) + { + CubEq* cb = new CubEq(); + + cb->showX(); + + int n; + n = cb->getN(); + std::cout << "n = " << n; + } + else + { + if (answer == 2) + { + std::ifstream fin("test.txt"); + int n; + fin >> n; + for (int i = 0; i < n; i++) + { + double a, b, c, d; + fin >> a >> b >> c >> d; + + std::cout << a << "x^3 + " << b << "x^2 + " << c << "x + " << d << std::endl; + + CubEq* cb = new CubEq(a, b, c, d); + cb->showX(); + + std::cout << "\n---------------" << std::endl; + } + fin.close(); + } + } + + + + + system("pause"); + system("cls"); + show_menu(); + return; + } + case 4: + { + int answer; + std::cout << "Input from:\n" << "1. Consol\n" << "2. Test File" << std::endl; + while (!(std::cin >> answer)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Invalid input. Try aganin: "; + } + //std::cin >> answer; + if (answer == 1) + { + FourStEq* fs = new FourStEq(); + + fs->showX(); + } + else + { + if (answer == 2) + { + std::ifstream fin("testFs.txt"); + int n; + fin >> n; + for (int i = 0; i < n; i++) + { + double a, b, c, d, e; + fin >> a >> b >> c >> d >> e; + + std::cout << a << "x^4 + " << b << "x^3 + " << c << "x^2 + " << d << "x + " << e << std::endl; + + FourStEq* fs = new FourStEq(a, b, c, d, e); + fs->showX(); + + std::cout << "\n---------------" << std::endl; + } + fin.close(); + } + } + + system("pause"); + system("cls"); + show_menu(); + return; + } + case 5: + { + return; + } + default: + return; + } +} + +int choice() +{ + bool answer = false; + do + { + std::cout << "\t\t\tMenu\n\n"; + std::cout << "All tasks:\n" << "\t1. Linear equation \n" << "\t2. Square equation \n" << "\t3. Cube equation \n" << "\t4. 4-th equation \n" << "\t5. Exit\n" << std::endl; + std::cout << "Please, enter your choice (1-5): "; + int choice; + + while (!(std::cin >> choice)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "Invalid input. Try aganin: "; + } + + switch (choice) + { + case 1: return 1; + case 2: return 2; + case 3: return 3; + case 4: return 4; + case 5: return 5; + default: answer = true; system("cls"); break; + } + } while (answer); + + return -1; +} + diff --git a/Equel/Equel/SquareEq.cpp b/Equel/Equel/SquareEq.cpp new file mode 100644 index 0000000..91649a4 --- /dev/null +++ b/Equel/Equel/SquareEq.cpp @@ -0,0 +1,165 @@ +#include "SquareEq.h" + + + +SquareEq::SquareEq() +{ + inputCoef(); + + //std::cout << std::endl; + + computeN(); + + if (n != 0 || n != 255) + { + x = new double[n]; + } + + solve(); +} + + +SquareEq::SquareEq(const double a, const double b, const double c) +{ + this->a = a; + this->b = b; + this->c = c; + computeN(); + + if (n != 0 || n != 255) + { + x = new double[n]; + } + + solve(); +} + + + +SquareEq::~SquareEq() +{ + delete[] x; + x = nullptr; +} + +void SquareEq::computeN() +{ + if (a == 0) + { + LinearEq* linear = new LinearEq(b, c); + + n = linear->getN(); + + delete linear; + } + else + { + + D = computeD(); + + if (D == 0) + { + n = 1; + } + else if (D > 0) + { + n = 2; + } + else + { + n = 0; + } + } +} + +double SquareEq::computeD() +{ + return b * b - 4 * a * c; +} + +void SquareEq::solve() +{ + //std::cout << "\n\tStart solve!" << std::endl; + + if (a == 0) + { + LinearEq *linear = new LinearEq(b, c); + + x[0] = linear->getX(); + + delete linear; + } + else + { + if (D == 0) + { + x[0] = (-1) * b / (2.0 * a); + } + else if (D > 0) + { + x[0] = ((-1) * b + sqrt(D))/ (2.0 * a); + x[1] = ((-1) * b - sqrt(D)) / (2.0 * a); + } + } +} + +void SquareEq::showX() +{ + if (n == 255) + { + std::cout << "\t\t-We have to many solves!" << std::endl; + } + else if (n == 0) + { + std::cout << "\t\t-We have no solves!" << std::endl; + } + else + { + std::cout << "\t\t-Our solves are:\n"; + for (int i = 0; i < n; i++) + { + std::cout << "\t\t\tx[" << i << "] = " << x[i] << std::endl; + } + } +} + +int SquareEq::GetN() +{ + return n; +} + +double* SquareEq::GetX() +{ + return x; +} + +void SquareEq::inputCoef() +{ + std::cout << "\tPlease, input a = ?\b"; + while (!(std::cin >> a)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + std::cout << "\tPlease, input b = ?\b"; + while (!(std::cin >> b)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } + + std::cout << "\tPlease, input c = ?\b"; + while (!(std::cin >> c)) + { + std::cin.clear(); + + std::cin.ignore(std::numeric_limits::max(), '\n'); + std::cout << "\t\t-Invalid input. Try aganin: "; + } +} + diff --git a/Equel/Equel/SquareEq.h b/Equel/Equel/SquareEq.h new file mode 100644 index 0000000..1fa63f0 --- /dev/null +++ b/Equel/Equel/SquareEq.h @@ -0,0 +1,30 @@ +#pragma once +#include "Equation.h" +#include "LinearEq.h" +#include + +class SquareEq : public Equation +{ +public: + SquareEq(); + SquareEq(double const, double const, double const); + ~SquareEq(); + + void showX() override; + + int GetN(); + + double* GetX(); + +private: + double a; + double b; + double c; + double D; + + void solve() override; + void computeN() override; + void inputCoef() override; + double computeD(); +}; + diff --git a/Equel/Equel/test.txt b/Equel/Equel/test.txt new file mode 100644 index 0000000..8d660a2 --- /dev/null +++ b/Equel/Equel/test.txt @@ -0,0 +1,6 @@ +5 +1 2 1 0 +0 1 2 1 +1 3 3 1 +3 3 3 3 +1 2 2 1 \ No newline at end of file diff --git a/Equel/Equel/testFs.txt b/Equel/Equel/testFs.txt new file mode 100644 index 0000000..3c83033 --- /dev/null +++ b/Equel/Equel/testFs.txt @@ -0,0 +1,5 @@ +4 +1 2 3 2 1 +0 1 2 2 1 +1 1 1 1 1 +1 3 -9 -23 -12 \ No newline at end of file diff --git a/Equel/Equel/testLin.txt b/Equel/Equel/testLin.txt new file mode 100644 index 0000000..3ee18d0 --- /dev/null +++ b/Equel/Equel/testLin.txt @@ -0,0 +1,4 @@ +3 +1 1 +0 1 +2 0 \ No newline at end of file diff --git a/Equel/Equel/testSq.txt b/Equel/Equel/testSq.txt new file mode 100644 index 0000000..4e7c0e4 --- /dev/null +++ b/Equel/Equel/testSq.txt @@ -0,0 +1,5 @@ +4 +1 2 1 +1 1 1 +0 2 1 +2 2 0 \ No newline at end of file diff --git a/Equel/Equel/x64/Debug/Equel.log b/Equel/Equel/x64/Debug/Equel.log new file mode 100644 index 0000000..c185361 --- /dev/null +++ b/Equel/Equel/x64/Debug/Equel.log @@ -0,0 +1 @@ + Equel.vcxproj -> C:\Users\Gennadiy\C and C++\Equel\x64\Debug\Equel.exe diff --git a/Equel/Equel/x64/Debug/Equel.tlog/CL.command.1.tlog b/Equel/Equel/x64/Debug/Equel.tlog/CL.command.1.tlog new file mode 100644 index 0000000..155a531 Binary files /dev/null and b/Equel/Equel/x64/Debug/Equel.tlog/CL.command.1.tlog differ diff --git a/Equel/Equel/x64/Debug/Equel.tlog/CL.read.1.tlog b/Equel/Equel/x64/Debug/Equel.tlog/CL.read.1.tlog new file mode 100644 index 0000000..f1e17ad Binary files /dev/null and b/Equel/Equel/x64/Debug/Equel.tlog/CL.read.1.tlog differ diff --git a/Equel/Equel/x64/Debug/Equel.tlog/CL.write.1.tlog b/Equel/Equel/x64/Debug/Equel.tlog/CL.write.1.tlog new file mode 100644 index 0000000..c428c3e Binary files /dev/null and b/Equel/Equel/x64/Debug/Equel.tlog/CL.write.1.tlog differ diff --git a/Equel/Equel/x64/Debug/Equel.tlog/Equel.lastbuildstate b/Equel/Equel/x64/Debug/Equel.tlog/Equel.lastbuildstate new file mode 100644 index 0000000..2ad30c6 --- /dev/null +++ b/Equel/Equel/x64/Debug/Equel.tlog/Equel.lastbuildstate @@ -0,0 +1,2 @@ +#TargetFrameworkVersion=v4.0:PlatformToolSet=v142:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=10.0 +Debug|x64|C:\Users\Gennadiy\C and C++\Equel\| diff --git a/Equel/Equel/x64/Debug/Equel.tlog/link.command.1.tlog b/Equel/Equel/x64/Debug/Equel.tlog/link.command.1.tlog new file mode 100644 index 0000000..4f6c67e Binary files /dev/null and b/Equel/Equel/x64/Debug/Equel.tlog/link.command.1.tlog differ diff --git a/Equel/Equel/x64/Debug/Equel.tlog/link.read.1.tlog b/Equel/Equel/x64/Debug/Equel.tlog/link.read.1.tlog new file mode 100644 index 0000000..3073c6c Binary files /dev/null and b/Equel/Equel/x64/Debug/Equel.tlog/link.read.1.tlog differ diff --git a/Equel/Equel/x64/Debug/Equel.tlog/link.write.1.tlog b/Equel/Equel/x64/Debug/Equel.tlog/link.write.1.tlog new file mode 100644 index 0000000..655b000 Binary files /dev/null and b/Equel/Equel/x64/Debug/Equel.tlog/link.write.1.tlog differ diff --git a/Equel/Equel/x64/Debug/vc142.idb b/Equel/Equel/x64/Debug/vc142.idb new file mode 100644 index 0000000..09ad90a Binary files /dev/null and b/Equel/Equel/x64/Debug/vc142.idb differ diff --git a/Equel/Equel/x64/Debug/vc142.pdb b/Equel/Equel/x64/Debug/vc142.pdb new file mode 100644 index 0000000..b22ef71 Binary files /dev/null and b/Equel/Equel/x64/Debug/vc142.pdb differ diff --git a/Equel/x64/Debug/Equel.ilk b/Equel/x64/Debug/Equel.ilk new file mode 100644 index 0000000..bcab2ab Binary files /dev/null and b/Equel/x64/Debug/Equel.ilk differ diff --git a/Equel/x64/Debug/Equel.pdb b/Equel/x64/Debug/Equel.pdb new file mode 100644 index 0000000..1339c9c Binary files /dev/null and b/Equel/x64/Debug/Equel.pdb differ