методом якоби(простой итерации)
Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "slar.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include<math.h>
#include<stdlib.h>
TForm1 *Form1;
int n=0, prov=0, k=0;
const x=100;
float A[x] [x], B[x] [x];
float C[x], Y[x];
float *X;
bool fl1=false;
float e;
float v_sh;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonOkClick(TObject *Sender)
{
Memo1->Lines->Clear();
k=0;
TryStrToInt (Edit1->Text, n);
if (n>1)
{
StringGrid1->RowCount=n;
StringGrid1->ColCount=n+1;
ButtonClear->Enabled=true;
ButtonOk->Enabled=false;
StringGrid1->Color=clWindow;
Button1->Enabled=true;
X=new float[n];
for (int i=0; i<n; i++)
{
for (int j=0; j<n+1; j++)
{
A[i] [j]=NULL;
}
X[i]=NULL;
}
}
else
{
ShowMessage ("Число має бути цілого типу!(1, 2, 3...)");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonClearClick(TObject *Sender)
{
Edit1->Text="";
Edit2->Text="";
StringGrid1->RowCount=0;
StringGrid1->ColCount=0;
ButtonClear->Enabled=false;
ButtonOk->Enabled=true;
StringGrid1->Color=clBtnFace;
Button1->Enabled=false;
Memo1->Lines->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Clear();
e=StrToFloat (Edit2->Text);
for (int i=0; i<n; i++)
{
for (int j=0; j<n+1; j++)
{
TryStrToFloat (StringGrid1->Cells[j] [i], A[i] [j]);
}
}
for (int i=0; i<n; i++)
{
for (int j=0; j<n+1; j++)
{
if (A[i] [j]==NULL)
{
ShowMessage ("Ошибка! Присутні пусті комірки!");
fl1=true;
i=n;
break;
}
}
}
if(! fl1) {
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
if (i!=j) B[i] [j]=(-1)*A[i] [j]/A[i] [i];
else
{
B[i] [j]=0;
C[i]=A[i] [n]/A[i] [i];
}
}
}
for (int i=0; i<n; i++) X[i]=C[i];
float s=0;
k=0;
do
{
prov=0;
for (int i=0; i<n; i++)
{
Y[i]=X[i];
for (int j=0; j<n; j++)
{
s+=B[i] [j]*X[i];
}
X[i]=s+C[i];
s=0;
}
for (int i=0; i<n; i++)
{
if (fabs(X[i] - Y[i])<e) prov++;
}
k++;
}
while (prov!=n);
Memo1->Lines->Add (" МЕТОД ЯКОБІ");
Memo1->Lines->Add("");
String p="";
Memo1->Lines->Add ("Проміжна матриця:");
for (int i=0; i<n; i++)
{
p="";
for (int j=0; j<n+1; j++)
{
p+=FloatToStr (B[i] [j])+"";
}
Memo1->Lines->Add(p);
}
Memo1->Lines->Add("");
Memo1->Lines->Add ("Корені СЛАР дорівнюють:");
for (int i=0; i<n; i++)
{
if (X[i]!=NULL)
{
Memo1->Lines->Add ("x"+IntToStr (i+1)+" = "+FloatToStr (X[i]));
}
else
{
Memo1->Lines->Add ("Нема коренів!");
break;
}
}
Memo1->Lines->Add("");
Memo1->Lines->Add ("Кількість ітерацій = "+FloatToStr(k));
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonExitClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N6Click(TObject *Sender)
{
if (SaveDialog1->Execute() )
Memo1->Lines-> SaveToFile (SaveDialog1->FileName) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N5Click(TObject *Sender)
{
Edit1->Text="";
Edit2->Text="";
StringGrid1->RowCount=0;
StringGrid1->ColCount=0;
ButtonClear->Enabled=false;
ButtonOk->Enabled=true;
StringGrid1->Color=clBtnFace;
Button1->Enabled=false;
Memo1->Lines->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{
Form2->Visible=true;
}
//---------------------------------------------------------------------------