Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- namespace Project10 {
- using namespace System;
- using namespace System::ComponentModel;
- using namespace System::Collections;
- using namespace System::Windows::Forms;
- using namespace System::Data;
- using namespace System::Drawing;
- /// <summary>
- /// Сводка для MyForm
- /// </summary>
- public ref class MyForm : public System::Windows::Forms::Form
- {
- public:
- MyForm(void)
- {
- InitializeComponent();
- //
- //TODO: добавьте код конструктора
- //
- }
- protected:
- /// <summary>
- /// Освободить все используемые ресурсы.
- /// </summary>
- ~MyForm()
- {
- if (components)
- {
- delete components;
- }
- }
- private: System::Windows::Forms::Label^ label1;
- protected:
- private: System::Windows::Forms::Label^ label2;
- private: System::Windows::Forms::FolderBrowserDialog^ folderBrowserDialog1;
- private: System::Windows::Forms::FolderBrowserDialog^ folderBrowserDialog2;
- private: System::Windows::Forms::FolderBrowserDialog^ folderBrowserDialog3;
- private: System::Windows::Forms::FolderBrowserDialog^ folderBrowserDialog4;
- private: System::Windows::Forms::Label^ label3;
- private: System::Windows::Forms::Label^ label4;
- private: System::Windows::Forms::Label^ label5;
- private: System::Windows::Forms::Label^ label6;
- private: System::Windows::Forms::Label^ label7;
- private: System::Windows::Forms::Label^ label8;
- private: System::Windows::Forms::Label^ label9;
- private: System::Windows::Forms::Label^ label10;
- private: System::Windows::Forms::TextBox^ textBox1;
- private: System::Windows::Forms::TextBox^ textBox2;
- private: System::Windows::Forms::TextBox^ textBox3;
- private: System::Windows::Forms::TextBox^ textBox4;
- private: System::Windows::Forms::TextBox^ textBox5;
- private: System::Windows::Forms::TextBox^ textBox6;
- private: System::Windows::Forms::Button^ button1;
- private: System::Windows::Forms::Button^ button2;
- private: System::Windows::Forms::Button^ button3;
- private: System::Windows::Forms::ComboBox^ comboBox1;
- private: System::Windows::Forms::ComboBox^ comboBox2;
- private:
- /// <summary>
- /// Обязательная переменная конструктора.
- /// </summary>
- System::ComponentModel::Container ^components;
- #pragma region Windows Form Designer generated code
- /// <summary>
- /// Требуемый метод для поддержки конструктора — не изменяйте
- /// содержимое этого метода с помощью редактора кода.
- /// </summary>
- void InitializeComponent(void)
- {
- this->label1 = (gcnew System::Windows::Forms::Label());
- this->label2 = (gcnew System::Windows::Forms::Label());
- this->folderBrowserDialog1 = (gcnew System::Windows::Forms::FolderBrowserDialog());
- this->folderBrowserDialog2 = (gcnew System::Windows::Forms::FolderBrowserDialog());
- this->folderBrowserDialog3 = (gcnew System::Windows::Forms::FolderBrowserDialog());
- this->folderBrowserDialog4 = (gcnew System::Windows::Forms::FolderBrowserDialog());
- this->label3 = (gcnew System::Windows::Forms::Label());
- this->label4 = (gcnew System::Windows::Forms::Label());
- this->label5 = (gcnew System::Windows::Forms::Label());
- this->label6 = (gcnew System::Windows::Forms::Label());
- this->label7 = (gcnew System::Windows::Forms::Label());
- this->label8 = (gcnew System::Windows::Forms::Label());
- this->label9 = (gcnew System::Windows::Forms::Label());
- this->label10 = (gcnew System::Windows::Forms::Label());
- this->textBox1 = (gcnew System::Windows::Forms::TextBox());
- this->textBox2 = (gcnew System::Windows::Forms::TextBox());
- this->textBox3 = (gcnew System::Windows::Forms::TextBox());
- this->textBox4 = (gcnew System::Windows::Forms::TextBox());
- this->textBox5 = (gcnew System::Windows::Forms::TextBox());
- this->textBox6 = (gcnew System::Windows::Forms::TextBox());
- this->button1 = (gcnew System::Windows::Forms::Button());
- this->button2 = (gcnew System::Windows::Forms::Button());
- this->button3 = (gcnew System::Windows::Forms::Button());
- this->comboBox1 = (gcnew System::Windows::Forms::ComboBox());
- this->comboBox2 = (gcnew System::Windows::Forms::ComboBox());
- this->SuspendLayout();
- //
- // label1
- //
- this->label1->AutoSize = true;
- this->label1->Location = System::Drawing::Point(30, 34);
- this->label1->Name = L"label1";
- this->label1->Size = System::Drawing::Size(122, 17);
- this->label1->TabIndex = 0;
- this->label1->Text = L"ОБЕРІТЬ МЕТОД";
- //
- // label2
- //
- this->label2->AutoSize = true;
- this->label2->Location = System::Drawing::Point(21, 167);
- this->label2->Name = L"label2";
- this->label2->Size = System::Drawing::Size(142, 17);
- this->label2->TabIndex = 1;
- this->label2->Text = L"ОБЕРІТЬ РІВНЯННЯ";
- //
- // label3
- //
- this->label3->AutoSize = true;
- this->label3->Location = System::Drawing::Point(295, 34);
- this->label3->Name = L"label3";
- this->label3->Size = System::Drawing::Size(90, 17);
- this->label3->TabIndex = 2;
- this->label3->Text = L"ВХІДНІ ДАНІ";
- //
- // label4
- //
- this->label4->AutoSize = true;
- this->label4->Location = System::Drawing::Point(211, 83);
- this->label4->Name = L"label4";
- this->label4->Size = System::Drawing::Size(24, 17);
- this->label4->TabIndex = 3;
- this->label4->Text = L"а=";
- //
- // label5
- //
- this->label5->AutoSize = true;
- this->label5->Location = System::Drawing::Point(211, 144);
- this->label5->Name = L"label5";
- this->label5->Size = System::Drawing::Size(24, 17);
- this->label5->TabIndex = 4;
- this->label5->Text = L"b=";
- //
- // label6
- //
- this->label6->AutoSize = true;
- this->label6->Location = System::Drawing::Point(211, 206);
- this->label6->Name = L"label6";
- this->label6->Size = System::Drawing::Size(39, 17);
- this->label6->TabIndex = 5;
- this->label6->Text = L"eps=";
- //
- // label7
- //
- this->label7->AutoSize = true;
- this->label7->Location = System::Drawing::Point(211, 286);
- this->label7->Name = L"label7";
- this->label7->Size = System::Drawing::Size(48, 17);
- this->label7->TabIndex = 6;
- this->label7->Text = L"kmax=";
- this->label7->Visible = false;
- //
- // label8
- //
- this->label8->AutoSize = true;
- this->label8->Location = System::Drawing::Point(501, 34);
- this->label8->Name = L"label8";
- this->label8->Size = System::Drawing::Size(100, 17);
- this->label8->TabIndex = 7;
- this->label8->Text = L"РЕЗУЛЬТАТИ";
- //
- // label9
- //
- this->label9->AutoSize = true;
- this->label9->Location = System::Drawing::Point(419, 81);
- this->label9->Name = L"label9";
- this->label9->Size = System::Drawing::Size(51, 17);
- this->label9->TabIndex = 8;
- this->label9->Text = L"Корінь";
- //
- // label10
- //
- this->label10->AutoSize = true;
- this->label10->Location = System::Drawing::Point(419, 144);
- this->label10->Name = L"label10";
- this->label10->Size = System::Drawing::Size(66, 17);
- this->label10->TabIndex = 9;
- this->label10->Text = L"Кількість";
- //
- // textBox1
- //
- this->textBox1->Location = System::Drawing::Point(298, 78);
- this->textBox1->Name = L"textBox1";
- this->textBox1->Size = System::Drawing::Size(100, 22);
- this->textBox1->TabIndex = 10;
- //
- // textBox2
- //
- this->textBox2->Location = System::Drawing::Point(298, 141);
- this->textBox2->Name = L"textBox2";
- this->textBox2->Size = System::Drawing::Size(100, 22);
- this->textBox2->TabIndex = 11;
- //
- // textBox3
- //
- this->textBox3->Location = System::Drawing::Point(298, 206);
- this->textBox3->Name = L"textBox3";
- this->textBox3->Size = System::Drawing::Size(100, 22);
- this->textBox3->TabIndex = 12;
- //
- // textBox4
- //
- this->textBox4->Location = System::Drawing::Point(298, 281);
- this->textBox4->Name = L"textBox4";
- this->textBox4->Size = System::Drawing::Size(100, 22);
- this->textBox4->TabIndex = 13;
- this->textBox4->Visible = false;
- //
- // textBox5
- //
- this->textBox5->Location = System::Drawing::Point(504, 78);
- this->textBox5->Name = L"textBox5";
- this->textBox5->Size = System::Drawing::Size(100, 22);
- this->textBox5->TabIndex = 14;
- //
- // textBox6
- //
- this->textBox6->Location = System::Drawing::Point(504, 141);
- this->textBox6->Name = L"textBox6";
- this->textBox6->Size = System::Drawing::Size(100, 22);
- this->textBox6->TabIndex = 15;
- //
- // button1
- //
- this->button1->Location = System::Drawing::Point(44, 396);
- this->button1->Name = L"button1";
- this->button1->Size = System::Drawing::Size(134, 60);
- this->button1->TabIndex = 16;
- this->button1->Text = L"РОЗВ\'ЯЗАТИ";
- this->button1->UseVisualStyleBackColor = true;
- this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);
- //
- // button2
- //
- this->button2->Location = System::Drawing::Point(298, 396);
- this->button2->Name = L"button2";
- this->button2->Size = System::Drawing::Size(138, 60);
- this->button2->TabIndex = 17;
- this->button2->Text = L"ОЧИСТИТИ";
- this->button2->UseVisualStyleBackColor = true;
- this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);
- //
- // button3
- //
- this->button3->Location = System::Drawing::Point(529, 396);
- this->button3->Name = L"button3";
- this->button3->Size = System::Drawing::Size(141, 60);
- this->button3->TabIndex = 18;
- this->button3->Text = L"ЗАВЕРШИТИ";
- this->button3->UseVisualStyleBackColor = true;
- this->button3->Click += gcnew System::EventHandler(this, &MyForm::button3_Click);
- //
- // comboBox1
- //
- this->comboBox1->FormattingEnabled = true;
- this->comboBox1->Items->AddRange(gcnew cli::array< System::Object^ >(2) { L"Метод половинного ділення", L"Метод Ньютона" });
- this->comboBox1->Location = System::Drawing::Point(23, 64);
- this->comboBox1->Name = L"comboBox1";
- this->comboBox1->Size = System::Drawing::Size(140, 24);
- this->comboBox1->TabIndex = 19;
- this->comboBox1->SelectedIndexChanged += gcnew System::EventHandler(this, &MyForm::comboBox1_SelectedIndexChanged);
- //
- // comboBox2
- //
- this->comboBox2->FormattingEnabled = true;
- this->comboBox2->Items->AddRange(gcnew cli::array< System::Object^ >(2) { L"x*x - 4 = 0", L"3*x - 4 *log(x) - 5 = 0" });
- this->comboBox2->Location = System::Drawing::Point(23, 206);
- this->comboBox2->Name = L"comboBox2";
- this->comboBox2->Size = System::Drawing::Size(140, 24);
- this->comboBox2->TabIndex = 20;
- //
- // MyForm
- //
- this->AutoScaleDimensions = System::Drawing::SizeF(8, 16);
- this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
- this->ClientSize = System::Drawing::Size(682, 543);
- this->Controls->Add(this->comboBox2);
- this->Controls->Add(this->comboBox1);
- this->Controls->Add(this->button3);
- this->Controls->Add(this->button2);
- this->Controls->Add(this->button1);
- this->Controls->Add(this->textBox6);
- this->Controls->Add(this->textBox5);
- this->Controls->Add(this->textBox4);
- this->Controls->Add(this->textBox3);
- this->Controls->Add(this->textBox2);
- this->Controls->Add(this->textBox1);
- this->Controls->Add(this->label10);
- this->Controls->Add(this->label9);
- this->Controls->Add(this->label8);
- this->Controls->Add(this->label7);
- this->Controls->Add(this->label6);
- this->Controls->Add(this->label5);
- this->Controls->Add(this->label4);
- this->Controls->Add(this->label3);
- this->Controls->Add(this->label2);
- this->Controls->Add(this->label1);
- this->Name = L"MyForm";
- this->Text = L"MyForm";
- this->ResumeLayout(false);
- this->PerformLayout();
- }
- #pragma endregion
- double f(double x, char k1) // Ліві частини рівнянь
- {
- switch (k1)
- {
- case 0: return x * x - 4; break;
- case 1: return 3 * x - 4 * Math::Log(x) - 5; break;
- }
- }
- double fp(double x, double d, char k1) // Перша похідна
- {
- return (f(x + d, k1) - f(x, k1)) / d;
- }
- double f2p(double x, double d, char k1) // Друга похідна
- {
- return (f(x + d, k1) + f(x - d, k1) - 2 * f(x, k1)) / (d * d);
- }
- double MDP(double a, double b, double Eps, char k1, int &L)
- {
- double c, Fc;
- while (b - a > Eps)
- {
- c = 0.5 * (b - a) + a;
- L = L + 1; // Лічильник кількості поділів інтервалу [a, b]
- Fc = f(c, k1);
- if (Math::Abs(Fc) < Eps) // Перевірка, чи точка с не є поблизу кореня x*
- return c; // Завершення роботи функції MDP
- if (f(a, k1) * Fc > 0) a = c;
- else b = c;
- }
- return c; // Завершення роботи функції MDP
- }
- double MN(double a, double b, double Eps, char k1, int Kmax, int &L)
- {
- double x, Dx, D;
- int i;
- Dx = 0.0;
- D = Eps / 100.0;
- x = b;
- if (f(x, k1) * f2p(x, D, k1) < 0) x = a;
- if (f(x, k1) * f2p(x, D, k1) < 0)
- MessageBox::Show("Для цього рівняння збіжність ітерацій не гарантована");
- for (i = 1; i <= Kmax; i++)
- {
- Dx = f(x, k1) / fp(x, D, k1);
- x = x - Dx;
- if (Math::Abs(Dx) < Eps)
- {
- L = i;
- return x; // Завершення роботи функції MN
- }
- }
- MessageBox::Show("За задану кількість ітерацій кореня не знайдено");
- return -1000.0; // -1000.0 Це наша ознака цієї нестандартної ситуації
- }
- private: System::Void comboBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
- switch (comboBox1->SelectedIndex)
- {
- case 0:
- {
- label7->Visible = false; // Робимо невидимим вікно для введення Kmax
- textBox4->Visible = false;
- textBox1->Clear();
- textBox2->Clear();
- } break;
- case 1:
- {
- label7->Visible = true; // Робимо видимим вікно для введення Kmax
- textBox4->Visible = true;
- textBox1->Clear();
- textBox2->Clear();
- } break;
- }
- }
- private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
- int L, k = -1, Kmax, m = -1; double D, Eps, a, b;
- L = 0;
- switch (comboBox1->SelectedIndex) // Вибір методу :
- {
- case 0: m = 0; break; // метод ділення навпіл
- case 1: // метод Ньютона
- {
- m = 1;
- D = Eps / 100.0;
- label7->Visible = true; // Робимо видимим вікно для введення Kmax
- textBox4->Visible = true;
- textBox4->Enabled = true;
- } break;
- }
- if (m == -1)
- {
- MessageBox::Show("Оберіть метод !"); comboBox1->Focus();
- return;
- }
- textBox1->Enabled = true; textBox2->Enabled = true;
- switch (comboBox2->SelectedIndex) // Вибір нелінійного рівняння
- {
- case 0: k = 0; break;
- case 1: k = 1; break;
- }
- if (k == -1)
- {
- MessageBox::Show("Оберіть рівняння !"); comboBox2->Focus();
- return;
- }
- // Перевіряємо правильність введення вхідних даних
- if (textBox1->Text == "")
- {
- MessageBox::Show("Введіть число в textBox1"); textBox1->Focus();
- return;
- }
- a = Convert::ToDouble(textBox1->Text); textBox2->Enabled = true;
- if (textBox2->Text == "")
- {
- MessageBox::Show("Введіть число в textBox2"); textBox2->Focus();
- return;
- }
- b = Convert::ToDouble(textBox2->Text); if (a > b)
- {
- D = a;
- a = b;
- b = D; // Міняємо місцями a і b
- textBox1->Text = Convert::ToString(a); textBox2->Text = Convert::ToString(b);
- }
- if (textBox3->Text == "")
- {
- MessageBox::Show("Введіть число в textBox3"); textBox1->Focus();
- return;
- }
- Eps = Convert::ToDouble(textBox3->Text);
- if ((Eps > 1e-1) || (Eps <= 0)) // Похибка Eps не повинна бути більшою за 0.1 або меншою за 0
- {
- Eps = 1e-4; // Задаємо примусово Eps = 0.0001
- textBox3->Text = Convert::ToString(Eps);
- }
- if (m == 0)
- if ((f(a, k))* (f(b, k)) > 0) // чи є корінь на інтервалі [a,b]
- {
- MessageBox::Show("Введіть правильний інтервал [a, b]!"); textBox1->Text = "";
- textBox2->Text = "";
- textBox1->Focus(); return;
- }
- // Перевіряємо, чи межі інтервалу [a,b] не є поблизу кореня
- if (Math::Abs(f(a, k)) < Eps)
- {
- textBox5->Text = Convert::ToString(a);
- textBox6->Text = Convert::ToString(L);
- return;
- }
- if (Math::Abs(f(b, k)) < Eps)
- {
- textBox5->Text = Convert::ToString(b);
- textBox6->Text = Convert::ToString(L);
- return;
- }
- switch (m)
- {
- case 0: // Виклик методу ділення навпіл MDP
- {
- textBox5->Text = Convert::ToString(MDP(a, b, Eps, k, L));
- textBox6->Text = Convert::ToString(L);
- label10->Text = "К-ть поділів =";
- } break;
- case 1: // Виклик методу Ньютона
- {
- if (textBox4->Text == "")
- {
- MessageBox::Show("Введіть число в textBox4");
- textBox4->Focus();
- return;
- }
- Kmax = Convert::ToInt32(textBox4->Text);
- textBox5->Text = Convert::ToString(MN(a, b, Eps, k, Kmax, L));
- textBox6->Text = Convert::ToString(L);
- label10->Text = "К-ть ітерац.=";
- } break;
- }
- }
- private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
- textBox1->Clear(); textBox2->Clear();
- textBox3->Clear(); textBox4->Clear();
- textBox5->Clear(); textBox6->Clear();
- switch (comboBox1->SelectedIndex)
- {
- case 0:
- {
- label7->Visible = false; // Робимо невидимим вікно для введення Kmax
- textBox4->Visible = false;
- } break; case 1:
- {
- label7->Visible = true; // Робимо видимим вікно для введення Kmax
- textBox4->Visible = true;
- } break;
- }
- }
- private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
- Close();
- }
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement