Уроки Windows Forms C++/C#
Решение квадратного уравнения в Windovs Forms MVS C++В этом уроке мы с вами напишем программу для решения квадратного уравнения. Причём она сможет решать уравнения с отрицательным дескрименантом и находить комплексные корни. Пользователю нужно будет лишь ввести коэффициенты, а программа в текстовом виде выдаст результат. Как вы уже поняли - это будет вполне полноценная и прикладная программа, которая может оказаться вполне актуальна для школьников средних классов и для начинающих программистов. В разделе, посвящённом урокам C++" описывалось “решение квадратного уравнения”, по этому нам нужно теперь вставить это решение в новое приложение, нужным образом оформив его. И так, приступим. Для этого нам понадобятся: 3 "textBox", 5 "label" и кнопка “button”. Как изменять шрифт "label", вы можете узнать из этого урока, по этому оформить должным образом форму программы для вас не будет сложностью. Вот как она должна выглядеть:

После этого, в коде ещё раз написан текст для каждого "lable". Из предыдущего урока вы могли узнать, как ограничить возможность вводить любые знаки. В данном проекте это так же будет использоваться, что бы пользователь мог вводить только цифры. После того как программа запуститься пользователю нужно будет ввести коэффициенты, после вычислений программа покажет корни, даже, если они будут комплексные, так же будет показан дискриминант, но это всё конечно же нужно сначала описать в коде. Для "textBox"ов выбираем событие "KeyPress". Что бы размер формы был фиксирован – выберите свойство "FormBorderStyles"->"Fixed3D". Ну а теперь собственно сам код программы:
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 = "2"; label3->Text = "+"; label4->Text = "X"; label5->Text = "= 0"; label6->Text = "Введите коэвициенты"; // a b c label7->Text = ""; label8->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 button1_Click(System::Object^ sender, System::EventArgs^ e) { Single a, b, c; Single A = Single::TryParse(textBox1->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, a); Single B = Single::TryParse(textBox2->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, b); Single C = Single::TryParse(textBox3->Text, System::Globalization::NumberStyles::Number, System::Globalization::NumberFormatInfo::CurrentInfo, c); float y, z, f, m, k; float D = 0; if (a==0) { MessageBox::Show("Если а = 0 - нет решений!"); } D=b*b-4*a*c; if (D>=0) { y=(-b+sqrt(D))/(2*a); z=(-b-sqrt(D))/(2*a); label7->Text = String::Format("Корни: x1 = {0:F3} и x2 = {1:F3}", y, z); label8->Text = String::Format("При D = {0:F3}", D); } else{ f = -1*D; k = (sqrt(f))/(2*a); m =(-b)/(2*a); label7->Text = String::Format("Корни: x1 = {0:F1} + {1:F1}* i и x2 = {0:F1} - {1:F1}* i", m, k); label8->Text = String::Format("При D = {0:F3}", D); } } }; }
Результат:
Следующий урок >>