Добавил:
abhai2013@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
14
Добавлен:
30.06.2018
Размер:
343.29 Кб
Скачать

ЛАБОРАТОРНА РОБОТА 5

ІНТЕРПОЛЮВАННЯ ФУНКЦІЙ

Студента ИТ 14-1 Красовского Абхая

Мета роботи – здобути практичних навичок розроблення алгоритмів і програм, які здійснюють лінійне інтерполювання поліномами Лагранжа.

Вариант №9

Блок-схема метода

Код:

#include<math.h>

double x,x1,Result;

int m,i,j;

double X[50];

double Y[50];

// Задана функція

double f (double x)

{

return 2 + cos(x);

}

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{

if (textBox1->Text!="")

{

m = Convert::ToInt32(textBox1->Text);

//Очищення стовбців компоненту DataGridView1, якщо вони не пусті

dataGridView1->Columns->Clear();

//У компоненті DataGridView1 встановлення m стовбців

dataGridView1->ColumnCount = m;

//У компоненті DataGridView1 встановити 2 рядки

dataGridView1->RowCount = 2;

for (int i = 0; i < m; i++)

//Підпис стовбців «Координати n-ої точки»

dataGridView1->Columns[i]->Name="координати "+Convert::ToString(i+1)+" точки";

}

else

//Якщо не ввели кількість точок, то з’являється окно повідомлення про помилку

MessageBox::Show("Заповніть, будь-ласка,дані","Помилка вве-дення даних",MessageBoxButtons::OK, MessageBoxIcon::Exclamation);

}

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)

{

for (i = 0; i < m; i++)

//зчитування даних з таблиці у масиви

{

X[i] = Convert::ToDouble(this->dataGridView1->Rows[0]->Cells[i]->Value);

Y[i] = f(X[i]);

this->dataGridView1->Rows[1]->Cells[i]->Value = Convert::ToString(Y[i]);

}

}

private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)

{

Series^ plot1 = chart1->Series[0];

Series^ plot2 = chart1->Series[1];

Series^ plot3 = chart1->Series[2];

//Очищення компоненту Chart1

plot1->Points->Clear();

plot2->Points->Clear();

plot3->Points->Clear();

for(int i = 0; i < m; i++)

{

plot1->Points->AddXY(X[i],Y[i]);

plot2->Points->AddXY(X[i],Y[i]);

}

x1 = X[0];

while (x1 <= X[m-1])

{

plot3->Points->AddXY(x1,f(x1));

x1 += 0.01;

}

}

private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e)

{

x = Convert::ToDouble(textBox2->Text);

// лінійна інтерполяція

for(int i = 0; i < m; i++)

if (x >= X[i] && x <= X[i+1]) Result = Y[i]*((x - X[i+1]) / (X[i] - X[i+1])) + Y[i+1] * ((x - X[i]) / (X[i+1] - X[i]));

else if (x > X[m-1]) textBox2->Text = "Невірне значення Х";

else

{

textBox3->Text=Convert::ToString (Result);

textBox4->Text=Convert::ToString ((fabs(Result - f(x)) / f(x) * 100));

}

}

private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e)

{

Application::Exit();

}

Результат:

Соседние файлы в папке Первый триместр