Разработка программы на языке C++

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

----------");

}

//---------------------------------------------------------------------------__fastcall TForm1::approxClick(TObject *Sender)

{cur=0;i, j, k, p, q;

//Вычисление коэффициентов системы уравнений для вычисления апр. функции

//Согласно методу наименьших квадратов

// a11 a12 a13 | b1

// a21 a22 a23 | b2

// a31 a32 a33 | b3tmp=0;[3][4];

CalcDy->Enabled=true; //Разрешение ранее недоступных органов управления

AppFunc->Enabled=true;(i=0; i<n;i++) tmp+=pow((x0+i*h),4); //a11[0][0]=tmp;=0;(i=0; i<n;i++) tmp+=pow((x0+i*h),3); //a12=a21[0][1]=tmp;[1][0]=tmp;=0;(i=0; i<n;i++) tmp+=pow((x0+i*h),2); //a13=a22=a31[0][2]=tmp;[1][1]=tmp;[2][0]=tmp;=0;(i=0; i<n;i++) tmp+=(x0+i*h); //a23=a32[1][2]=tmp;[2][1]=tmp;=0;[2][2]=n+1; //a33=0;(i=0; i<n;i++) tmp+=solutions[i]*pow((x0+i*h),2); //b1[0][3]=tmp;=0;(i=0; i<n;i++) tmp+=solutions[i]*(x0+i*h); //b2[1][3]=tmp;=0;(i=0; i<n;i++) tmp+=solutions[i]; //b3

//Нахождение коэффициентов параболы

matrix[2][3]=tmp;

tmp=0;

i=0;j=0;

q=3;

p=q+1;

for (j = 0; j<q; j++) //Выбираем ведущий элемент, не равный нулю

if (matrix[j][i] == 0)

{= j;((matrix[k+1][j] == 0) && (k < q))++;(matrix[k+1][j] != 0)(i = 0; i < p; i++)

{= matrix[j][i];[j][i] = matrix[k+1][i];[k+1][i] = cur;

};

}(k = 0; k < q - 1; k++)(j = k + 1; j < q; j++)

{(matrix[k][k] !=0)

{= matrix[j][k] / matrix[k][k]; //Получаем нули в текущей строке(i = 0; i < q + 1; i++)[j][i] = matrix[k][i] * cur - matrix[j][i];

}

elsebreak;

}

//Матрица приведена к треугольному виду, начинаем обратный ход

for (j = q - 1 ; j >= 0; j--)

{= matrix[j][q];(i = j + 1; i < q; i++)= cur - matrix[j][i] * Parab[i];[j] = cur / matrix[j][j]; //Вычисляем коэффициенты

}

//Выводим коэффициенты на экран

Screen->Lines->Add("Коэффициенты апроксимирующей функции");

Screen->Lines->Add("-------------------------------------------------------------------");>Lines->Add("a = " + AnsiString(Parab[0]));>Lines->Add("b = " + AnsiString(Parab[1]));>Lines->Add("c = " + AnsiString(Parab[2]));->Lines->Add("-------------------------------------------------------------------");

//Расчёт через аппроксимирующую функцию с выводом на экран

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

{[i]=ApproxFunc(knots[i]);>Lines->Add("x = " + AnsiString(knots[i]) +

"\t f(x,y) = " + AnsiString(approxim[i]));

}>Lines->Add("-------------------------------------------------------------------");

}

//---------------------------------------------------------------------------__fastcall TForm1::ClearClick(TObject *Sender)

{

//Очистка рабочей областиi=Screen->Lines->Count;_type=NONE;(i>=1)//Очищаем поле вывода

{>Lines->Delete(0);=Screen->Lines->Count;

}

Solution->Enabled=false;//Запрещаем органы управления

AppFunc->Enabled=false;>Enabled=false;>Enabled=false;>Enabled=false;2->Invalidate();//Очищаем окно отображения графика

}

//---------------------------------------------------------------------------__fastcall TForm1::CalcDyClick(TObject *Sender)

{

//Вычисление погрешности методом Рунге-Ромберга

inti;

Mistake->Enabled=true;(i=0; i<n; i++)

{[i]=solutions[i]+(solutions[i]-solutions_half[i*2])/(pow(0.5,4.0)-1);[i]=correct[i]-approxim[i];_correct[i]=approxim[i]+errors[i];

}

//Вывод результатов вычисления погрешности

Screen->Lines->Add("Рассчёт погрешности аппроксимации и корректировка значений");

Screen->Lines->Add("-------------------------------------------------------------------");(i=0; i<n; i++)

{>Lines->Add("x = "+AnsiString(knots[i]) +

":\t Поправка: " + AnsiString(errors[i])+"\t Значение: "+(approxim_correct[i]));

}>Lines->Add("-------------------------------------------------------------------");

}

//---------------------------------------------------------------------------__fastcall TForm1::SolutionClick(TObject *Sender)

{

//Выбор графика решения

Form2->Invalidate();

g_type=NONE;(Sender);_type=SOL;

}

//---------------------------------------------------------------------------__fastcall TForm1::AppFuncClick(TObject *Sender)

{

//Выбор графика апроксимации

Form2->Invalidate();

g_type=NONE;(Sender);_type=APR;

}

//---------------------------------------------------------------------------__fastcall TForm1::MistakeClick(TObject *Sender)

{

//Выбор графика погрешности

Form2->Invalidate();

g_type=NONE;(Sender);_type=MIS;

}

//---------------------------------------------------------------------------ApproxFunc(double x)

{

//Значение аппроксимирующей функции в точке x

return (Parab[0]*pow(x,2.0)+Parab[1]*x+Parab[2]);

}

//---------------------------------------------------------------------------My(double x, double y)

{

//значение правой части диф. уравнения в точке (x,y)

return x+sin(y/pow(7.0,0.5));

}

//---------------------------------------------------------------------------__fastcall TForm1::FormShow(TObject *Sender)

{

//Событие на отображение формы

Form2->Width=420; //Устанавливаем размеры формы для вывода графиков

Form2->Height=Height;->Show(); //Отображаем форму->Left=20+Left+Width;->Top=Top;(Sender); //Выводим сетку

}

//---------------------------------------------------------------------------__fastcall TForm1::Timer1Timer(TObject *Sender)

{

//Если положение главного окна изменилось, тянем вслед за ним окно графиков

Form2->Left=20+Left+Width;->Top=Top;

}

//---------------------------------------------------------------------------__fastcall TForm1::DrawClick(TObject *Sender)

{

//Чертим графикi;kx=(double)Form2->Width/n; //коэффициенты сжатия по осямky=(double)Form2->Height/n;->Canvas->MoveTo(x_c,y_c); //Вычерчивание координатных осей->Canvas->LineTo(Width,y_c);->Canvas->MoveTo(x_c,y_c);->Canvas->LineTo(x_c,0);

//Вычерчивание сетки серым цветом->Canvas->Pen->Color=clDkGray;(i=0; i<n; i++)

{->Canvas->MoveTo(x_c+i*kx,Height-35);->Canvas->LineTo(x_c+i*kx,0);->Canvas->TextOutA(x_c+i*kx-5,Height-35,AnsiString(x0+i*h));

}(i=0; i<n; i++)

{->Canvas->MoveTo(x_c-5,y_c-i*ky);->Canvas->LineTo(Width,y_c-i*ky);

/*if ((i%4)==0) */Form2->Canvas->TextOutA(x_c-30,-5+y_c-i*ky,AnsiString(i/4.0));

}

switch (g_type) //В зависимости от выбранного графика, чертим график

{

caseNONE: //Не указан тип

{ //Ничего не делаем

}

break;

caseSOL: //График решения

{

Form2->Canvas->Pen->Color=clRed; //Красным цветом

for(i=0; i<n-1; i++)

{->Canvas->MoveTo(x_c+i*kx,y_c-solutions[i]*ky*4.0);->Canvas->LineTo(x_c+(i+1)*kx,y_c-solutions[i+1]*ky*4.0);

}->Canvas->Pen->Color=clBlack;

}

break;

caseAPR: //График аппроксимирующей функции

{

Form2->Canvas->Pen->Color=clRed; //Красным цветом(i=0; i<n-1; i++)

{->Canvas->MoveTo(x_c+i*kx,y_c-approxim[i]*ky*4.0);->Canvas->LineTo(x_c+(i+1)*kx,y_c-approxim[i+1]*ky*4.0);

}->Canvas->Pen->Color=clBlack;

};MIS: //Погрешность

{->Canvas->Pen->Color=clNavy; //График аппроксимации синим(i=0; i<n-1; i++)

{->Canvas->MoveTo(x_c+i*kx,y_c-approxim[i]*ky*4.0);->Canvas->LineTo(x_c+(i+1)*kx,y_c-approxim[i+1]*ky*4.0);

}

//График аппроксимации с учётом погрешности разовым

Form2->Canvas->Pen->Color=clFuchsia;(i=0; i<n-1; i++)

{->Canvas->MoveTo(x_c+i*kx,y_c-approxim_correct[i]*ky*4.0);->Canvas->LineTo(x_c+(i+1)*kx,y_c-approxim_correct[i+1]*ky*4.0);

}->Canvas->Pen->Color=clBlack;

};

}

}

//-----------------------------------------------------------------