C++二次方程求解器 - 不正确的虚解
C++ Quadratic Equation Solver - Incorrect Imaginary Solutions
正如标题所说,每当我在二次方程求解器中输入某些数字导致虚解时,我都无法表达正确的虚解。
我尝试的一些事情包括创建一个新的强制转换变量,它基本上是判别式的绝对值,但作为一个全新的变量。
此外,我尝试使用判别变量本身,包括 abs(( 函数和绝对值的负乘以。
我感谢任何意见。 如果你们需要它,这是我的代码。
编辑:如果您想知道我输入的一些值,我输入了 2、-5 和 4 作为 A、B 和 C。 如果要检查计算器/二次求解器,该值约为 1.25 +- 0.66I,但我得到 3.00*I 和 -0.5*I。
#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
using namespace std;
int main() {
cout << fixed << scientific << setprecision(5);
cout << setfill('*') << setw(61) << '*' << endl;
cout << "5Chan Christina Quadratic Equation Solver" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
cout<< "Welcome to Quadratic Equation Solver, where we will input solutions from your inputs based on the form" << endl;
cout << setw(31) << "Ax^2 + Bx + C = 0" << endl;
cout << "Where A, B, and C are integers, and A is not equal to zero." << endl;
cout << setfill('*') << setw(61) << '*' << endl;
int A, B, C;
// discriminant program
// The following equations represent both
//parts of the quadratic equation, converted to double form
cout << "Enter the input for A. " << endl;
cin >> A;
if (A == 0)
/* Here, when A == 0
The following statements are executed under such subconditions
*/
{
cout << "Warning, any more 0 input will not produce any equation!" << endl;
cout << "Enter the input for B. " << endl;
cin >> B;
if (B == 0)
{
cout << "Invalid! Start over! You do not have an algebraic equation!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
cout << "Thank you for using Quadratic Equation Solver!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
}
// tfw your input results in a linear equation...
else if (B != 0)
{
cout << "Enter the input for C. " << endl;
cin >> C;
double lin_eq = static_cast<double>(-C)/B;
// linear equation form when b is NOT 0
cout << "Solution is " << endl;
cout << setw(50) << lin_eq << endl;
cout << setfill('*') << setw(61) << '*' << endl;
cout << "Thank you for using Quadratic Equation Solver!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
}
}
else //basically, when A is NOT zero
{
cout << "Enter the input for B. " << endl;
cin >> B;
cout << "Enter the input for C. " << endl;
cin >> C;
double disc = static_cast<double>((B*B)-(4*A*C));
double quad_1 = static_cast<double>((-B) + sqrt((B*B) - (4*A*C)))/(2*A);
double quad_2 = static_cast<double>((-B) - sqrt((B*B) - (4*A*C)))/(2*A);
if (disc > 0) // discriminant greater than 0
// 2 solutions are printed
{
cout << "The two real solutions are" << setw(31) << quad_1 << endl;
cout << setw(20) << "and" << setw(51) << quad_2;
cout << setfill('*') << setw(61) << '*' << endl;
cout << "Thank you for using Quadratic Equation Solver!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
}
else if (disc == 0)
{
cout << "Solution is " << endl;
cout << setw(50) << quad_2 << endl;
cout << setfill('*') << setw(61) << '*' << endl;
cout << "Thank you for using 5Chan Christina Quadratic Equation Solver!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
}
else if (disc < 0) // This segment of code
// Prints imaginary values through discriminant abs value
{
double imag_help = static_cast<double>(abs(disc));
double imag_solution_1 = ((-B+imag_help)/(2*A));
double imag_solution_2 = ((-B-imag_help)/(2*A));
cout << "The two imaginary solutions ARE" << setw(31) << "x= " << imag_solution_1 << "*I" << endl;
cout<< setw(15) << " AND " << setw(31) << "x=" << imag_solution_2 << "*I" << endl;
cout << setfill('*') << setw(61) << endl;
cout << "Thank you for using Quadratic Equation Solver." << endl;
cout << setfill('*') << setw(61) << endl;
}
}
}
试试这个。 你的问题在于想象的数学。 您正在添加/减去实部和虚部。 你不能这么做。我在虚构部分重用了你的两个变量。 imag_solution_1现在是真实的部分,imag_solution_2现在是想象的部分。
#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
using namespace std;
int main() {
cout << fixed << scientific << setprecision(5);
cout << setfill('*') << setw(61) << '*' << endl;
cout << "5Chan Christina Quadratic Equation Solver" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
cout << "Welcome to Quadratic Equation Solver, where we will input solutions from your inputs based on the form" << endl;
cout << setw(31) << "Ax^2 + Bx + C = 0" << endl;
cout << "Where A, B, and C are integers, and A is not equal to zero." << endl;
cout << setfill('*') << setw(61) << '*' << endl;
int A, B, C;
// discriminant program
// The following equations represent both
//parts of the quadratic equation, converted to double form
cout << "Enter the input for A. " << endl;
cin >> A;
if (A == 0)
/* Here, when A == 0
The following statements are executed under such subconditions
*/
{
cout << "Warning, any more 0 input will not produce any equation!" << endl;
cout << "Enter the input for B. " << endl;
cin >> B;
if (B == 0)
{
cout << "Invalid! Start over! You do not have an algebraic equation!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
cout << "Thank you for using Quadratic Equation Solver!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
}
// tfw your input results in a linear equation...
else if (B != 0)
{
cout << "Enter the input for C. " << endl;
cin >> C;
double lin_eq = static_cast<double>(-C) / B;
// linear equation form when b is NOT 0
cout << "Solution is " << endl;
cout << setw(50) << lin_eq << endl;
cout << setfill('*') << setw(61) << '*' << endl;
cout << "Thank you for using Quadratic Equation Solver!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
}
}
else //basically, when A is NOT zero
{
cout << "Enter the input for B. " << endl;
cin >> B;
cout << "Enter the input for C. " << endl;
cin >> C;
double disc = static_cast<double>((B*B) - (4.0 * A*C));
double quad_1 = static_cast<double>((-B) + sqrt((B*B) - (4.0 * A*C))) / (2.0 * A);
double quad_2 = static_cast<double>((-B) - sqrt((B*B) - (4.0 * A*C))) / (2.0 * A);
if (disc > 0) // discriminant greater than 0
// 2 solutions are printed
{
cout << "The two real solutions are" << setw(31) << quad_1 << endl;
cout << setw(20) << "and" << setw(51) << quad_2;
cout << setfill('*') << setw(61) << '*' << endl;
cout << "Thank you for using Quadratic Equation Solver!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
}
else if (disc == 0)
{
cout << "Solution is " << endl;
cout << setw(50) << quad_2 << endl;
cout << setfill('*') << setw(61) << '*' << endl;
cout << "Thank you for using 5Chan Christina Quadratic Equation Solver!" << endl;
cout << setfill('*') << setw(61) << '*' << endl;
}
else if (disc < 0) // This segment of code
// Prints imaginary values through discriminant abs value
{
double imag_help = static_cast<double>(abs(disc));
double imag_solution_1 = (-B / (2.0 * A));
double imag_solution_2 = (sqrt(imag_help) / (2.0 * A));
cout << "The two imaginary solutions ARE" << setw(31) << "x= " << imag_solution_1 << " + " << imag_solution_2 << "i" << endl;
cout << setw(15) << " AND " << setw(31) << "x=" << imag_solution_1 << " - " << imag_solution_2 << "i" << endl;
cout << setfill('*') << setw(61) << endl;
cout << "Thank you for using Quadratic Equation Solver." << endl;
cout << setfill('*') << setw(61) << endl;
}
}
}
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 正弦级数方程计算不正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 密码登录程序将永远循环并显示不正确的结果
- 在C++中返回不正确的楼层函数值
- 形状对象的旋转和缩放不正确C++
- C++ 读取文件读取文件不正确
- 关于类的 Python 文档 - 对C++的引用不正确
- 特征 LLT 模块给出不正确的结果?
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 如果语句逻辑不正确
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- 不正确的操作数类型 MSVC
- 数组填充了不正确的值
- 我是否不正确地集中了这些字符数组?
- 为什么除非我使用 cout,否则我的值不正确?
- 计算幂级数的数学结果不正确
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- atoi() 在应用于大型命令行参数时会产生不正确的值
- C++二次方程求解器 - 不正确的虚解