Уроки Windows Forms C++/C#
Решение кубического уравнения в Windovs Forms MVS C++После того, как вы хорошо разобрались с кодом и оформлением программы для решения квадратного уравнения можно приступить к решению кубического уравнения. У него, конечно, так же могут комплексные корни. В "уроках по C++" уже рассматривалось его решение, поэтому теперь нужно только всё аккуратно оформить и поставить на свои места. В это проекте так же будет реализована "защита от дурака" – можно будет вводить только цифры и знак, разделяющий целую и дробную часть числа. Есть и другой вариант защиты, он рассматривается в "этом уроке", но будет полностью обнулять результат ввода. Есть программы, в которых актуально именно это или нечто похожее – например неправильный ввод пароля и т.д. В данном проекте понадобятся: 12 "label", 4 "textBox" и одна кнопка "button". Оформить форму программы нужно по подобию "предыдущей", ” изменяя размер шрифта некоторых "label", если хотите:

template <class Value> int sign(Value Val) { if (Val == 0.) return 0; if (Val > 0.) return 1; else return -1; }

Код программы:
C++
#pragma endregion
String^ TorZ;
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
this->Text = "Решение Кубического Уравнения";
button1->Text = "Решить";
label1->Text = "X";
label2->Text = "3";
label3->Text = "+";
label4->Text = "X";
label5->Text = "2";
label6->Text = "+";
label7->Text = "X +";
label8->Text = "= 0";
label9->Text = "Введите коэфициенты";
label10->Text = "";
label11->Text = "";
label12->Text = "";
TorZ = Globalization::NumberFormatInfo::CurrentInfo->NumberDecimalSeparator;
}
private: System::Void textBox1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {
bool TZFound = false;
if (Char::IsDigit(e->KeyChar) == true) return;
if (e->KeyChar == (char)Keys::Back) return;
if (textBox1->Text->IndexOf(TorZ) != -1)
TZFound = true;
if (TZFound == true) { e->Handled = true; return; }
if (e->KeyChar.ToString() == TorZ) return;
e->Handled = true;
}
private: System::Void textBox2_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {
bool TZFound = false;
if (Char::IsDigit(e->KeyChar) == true) return;
if (e->KeyChar == (char)Keys::Back) return;
if (textBox2->Text->IndexOf(TorZ) != -1)
TZFound = true;
if (TZFound == true) { e->Handled = true; return; }
if (e->KeyChar.ToString() == TorZ) return;
e->Handled = true;
}
private: System::Void textBox3_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {
bool TZFound = false;
if (Char::IsDigit(e->KeyChar) == true) return;
if (e->KeyChar == (char)Keys::Back) return;
if (textBox3->Text->IndexOf(TorZ) != -1)
TZFound = true;
if (TZFound == true) { e->Handled = true; return; }
if (e->KeyChar.ToString() == TorZ) return;
e->Handled = true;
}
private: System::Void textBox4_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {
bool TZFound = false;
if (Char::IsDigit(e->KeyChar) == true) return;
if (e->KeyChar == (char)Keys::Back) return;
if (textBox4->Text->IndexOf(TorZ) != -1)
TZFound = true;
if (TZFound == true) { e->Handled = true; return; }
if (e->KeyChar.ToString() == TorZ) return;
e->Handled = true;
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Single d, h, g, f;
Single D = Single::TryParse(textBox1->Text,
System::Globalization::NumberStyles::Number,
System::Globalization::NumberFormatInfo::CurrentInfo, d);
Single H = Single::TryParse(textBox2->Text,
System::Globalization::NumberStyles::Number,
System::Globalization::NumberFormatInfo::CurrentInfo, h);
Single G = Single::TryParse(textBox3->Text,
System::Globalization::NumberStyles::Number,
System::Globalization::NumberFormatInfo::CurrentInfo, g);
Single F = Single::TryParse(textBox4->Text,
System::Globalization::NumberStyles::Number,
System::Globalization::NumberFormatInfo::CurrentInfo, f);
long double Q, R, A, B, x1, x2, x3, t, a, b, c, m, k, k1;
a=h/d; b=g/d; c=f/d;
const float pi = 3.14;
Q=(pow(a, 2)-3*b)/9;
R=(2*pow(a, 3)-9*a*b+27*c)/54;
if(pow(R, 2)
Результат:
Следующий урок >>