Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.14 Mб
Скачать

3. Код программы

#include <vcl.h>

#include <math.h>

#include <windows.h>

#include <mmsystem.h>

#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

// =============== Объявление переменных и задание их значений

float a1 = 3, b1 = 2, d1 = 2, a2 = 3, b2 = 3, d2 = 3, a = 1.2,

b, tK = 0.5, tKon = 10, t0 = 0, t, E = 0.001, xl, xr, c, d,

el[3], y;

bool began = false;

int i, n;

// ===========================================================

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

// === Отображение и скрытие необходимых компонентов на форме:

RadioGroup1->Visible = false;

RadioGroup2->Visible = false;

Chart1->Visible = false;

Button1->Visible = false;

BitBtn1->Caption = "";

BitBtn2->Caption = "";

BitBtn3->Caption = " Выход";

BitBtn1->Visible = false;

BitBtn2->Visible = false;

BitBtn3->Visible = false;

}

// ====================== Функции:

// ========== Нелинейное уравнение

float f (float x)

{

return 0.25*pow(x,3) + x - 1.2502;

}

// ====== Производная от функции f

float f1 (float x)

{

return 0.75*pow(x,2) + 1;

}

// ====== Функция, эквивалентная f

float fi (float x)

{

return 1.2502 - 0.25*pow(x,3);

}

// ===============================

// ==== Начало выполнения вычислений по нажатию кнопки "Вычислить":

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Series1->Clear(); // ============================= Очистка графика

n = 0;

xl = 0; // ============= Задание интервала поиска корней

xr = 2; // ======================= нелинейного уравнения

Series1->Clear(); // ============== Очистка графика перед запуском

// ===================================== Решение системы уравнений:

float z, p;

p = (((a1+a2)*(d1+d2))-(d1+d2))/(((a1+a2)*(b1+b2))-(b1+b2));// == p

z = (d1 - b1*p) / a1; // ================ z, выраженное с помощью p

if (fabs(z) > fabs(p))

c = z; else c = p;

Label12->Caption = ("p = "+FloatToStrF(p,ffFixed,8,3));

Label3->Caption = ("z = "+FloatToStrF(z,ffFixed,8,3));

// ===============================================================

// =================== Выбор метода решения нелинейного уравнения:

switch (RadioGroup2->ItemIndex)

{

// ================ Решение нелинейного уравнения методом Ньютона:

case 0:

while(fabs(xr - xl) > E)

{

if (n!=0) xl = xr;

xr = xl - f(xl) / f1(xl);

n++;

}

d = xl;

break;

// ======= Решение нелинейного уравнения методом простой итерации:

case 1:

do

{

if (n!=0) xl = xr;

xr = fi(xl);

n++;

}

while ((fabs(fi(xr)-fi(xl))) >= E);

d = xr;

break;

// =============== Решение нелинейного уравнения методом бисекции:

case 2:

float xm, xd;

xd = xr-xl;

xm = xl+xd;

while (xd>=E)

{

n++;

xd = xd/2;

xm = xl+xd;

if (f(xl) * f(xm) < 0)

xr = xm;

else

xl = xm;

}

d = xm;

break;

// =================== Решение нелинейного уравнения методом хорд:

case 3:

float xlh, xrh;

if (f(xl) < 0) xlh = xl; else xlh = xr;

do

{

if (n!= 0) xlh = xrh;

if (f(xl)<0) xrh = xlh - ((f(xlh)*(xr - xlh))/(f(xr) - f(xlh)));

else

xrh = xlh - ((f(xlh)*(xlh - xl))/(f(xlh) - f(xl)));

n++;

}

while (fabs(xrh - xlh) > E);

d = xrh;

break;

}

Label2->Caption=("x = d = "+ FloatToStrF(d,ffFixed,8,3));

Label32->Caption=("Проверка: " + FloatToStrF(f(d),ffFixed,8,5));

Label29->Caption=("Счётчик итераций: "+ IntToStr(n));

// ==============================================================

// =========================== Построение графика, схема Горнера:

b = fabs(d - a); // ============================== Коэффициент b

el[1] = a;

el[2] = b;

el[3] = c+d;

for (float t=t0;t<=tKon;t=t+tK)

{

y=el[1];

for(i=2;i<=3;i++)

{

y=y*t+el[i];

}

if (RadioGroup1->ItemIndex==1) // = Условие для построения

// ============================ графика в реальном времени

{

Series1->AddXY(t,y);

Sleep(tK*1000);

Application->ProcessMessages();

}

else Series1->AddXY(t,y);

}

}

// =======================================================

void __fastcall TForm1::Button2Click(TObject *Sender)

{

began = true;

Image1->Visible = false;

Image2->Visible = false;

Image3->Visible = false;

Label37->Visible = false;

Label38->Visible = false;

Label39->Visible = false;

Label40->Visible = false;

Label41->Visible = false;

Label42->Visible = false;

Label43->Visible = false;

RadioGroup1->Visible = true;

RadioGroup2->Visible = true;

Chart1->Visible = true;

Button1->Visible = true;

BitBtn1->Visible = true;

BitBtn2->Visible = true;

BitBtn3->Visible = true;

}

// ===============================================================

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

if ((Key == 27) && (began == false))

Close();

}

// ===============================================================

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

sndPlaySound("yesterday.wav", SND_ASYNC); // = Проигрывание музыки

}

// ===============================================================

void __fastcall TForm1::BitBtn2Click(TObject *Sender)

{

sndPlaySound(NULL,NULL); // ======== Остановка проигрывания музыки

}

// ===============================================================