
- •Кафедра «фтос» Курсовая работа по курсу «Информатика (спец. Главы)» «Решение систем линейных уравнений методом Гаусса-Зейделя»
- •Нижний Новгород. 2012 год.
- •Решение систем линейных уравнений методом Гаусса - Зейделя.
- •Описание программы.
- •Б Ввод n, , , ε, m, лок схема.
- •Интерфейс.
- •Принцип работы.
- •Листинг программы.
- •Проверка результатов.
Листинг программы.
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int l,i,j;
double eps,s,h, a[4][4],n,M,k,d,x_old[4],b[4];
// М максимально допустимое число итераций
x=gcnew array <double>(4);
String ^str;
str=this->textBox1->Text;
a[1][1]=Convert::ToDouble(str);
str=this->textBox2->Text;
a[1][2]=Convert::ToDouble(str);
str=this->textBox3->Text;
a[1][3]=Convert::ToDouble(str);
str=this->textBox5->Text;
a[2][1]=Convert::ToDouble(str);
str=this->textBox6->Text;
a[2][2]=Convert::ToDouble(str);
str=this->textBox7->Text;
a[2][3]=Convert::ToDouble(str);
str=this->textBox9->Text;
a[3][1]=Convert::ToDouble(str);
str=this->textBox10->Text;
a[3][2]=Convert::ToDouble(str);
str=this->textBox11->Text;
a[3][3]=Convert::ToDouble(str);
str=this->textBox4->Text;
b[1]=Convert::ToDouble(str);
str=this->textBox8->Text;
b[2]=Convert::ToDouble(str);
str=this->textBox12->Text;
b[3]=Convert::ToDouble(str);
str=this->textBox14->Text;
eps=Convert::ToDouble(str);
str=this->textBox13->Text;
n=Convert::ToDouble(str);
str=this->textBox18->Text;
M=Convert::ToDouble(str);
x[1]=x[2]=x[3]=0; k=1;
l=0;
for( ; ; )
{
h=0;
for(int i=1; i<=n; i++)
{
s=0;
for(int j=1; j<=i-1; j++)
{
s=s+a[i][j]*x[j];
}
for(int j=i+1;j<=n;j++)
{
s=s+a[i][j]*x[j];
}
x_old[i]=(b[i]-s)/a[i][i];
d=fabs(x_old[i]-x[i]);
if(d>h)
{
h=d;
}
else
{}
x[i]=x_old[i];
}
if(h<eps)
{
l=1;
}
else
{
if(k==M)
{
l=2;
}
if(k!=M)
{
k=k+1;
}
}
if(l!=0) break;
}//for ;;
if(l==1)
{
str=Convert::ToString(x[1]);
this->textBox15->Text=str;
str=Convert::ToString(x[2]);
this->textBox16->Text=str;
str=Convert::ToString(x[3]);
this->textBox17->Text=str;
str=Convert::ToString("");
this->textBox19->Text=str;
}
if(l!=1)
{
str=Convert::ToString(x[1]);
this->textBox15->Text=str;
str=Convert::ToString(x[2]);
this->textBox16->Text=str;
str=Convert::ToString(x[3]);
this->textBox17->Text=str;
str=Convert::ToString("Итерация расходится");
this->textBox19->Text=str;
}
} // Конец расчетов
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
FILE *out;
Stream ^myStream;
String ^a;
if(x->Length==0)
{
MessageBox::Show("No count","Rect",MessageBoxButtons::OKCancel,MessageBoxIcon::Asterisk);
this->button2->Enabled=false;
return;
}
if(this->saveFileDialog1->ShowDialog()==System::Windows::Forms::DialogResult::OK)
{
if((myStream=this->saveFileDialog1->OpenFile())!=nullptr)
{
a=this->saveFileDialog1->FileName;
myStream->Close();
}
else
{
MessageBox::Show("Невозможно сохранить файл","Ошибка",MessageBoxButtons::OKCancel,MessageBoxIcon::Asterisk);
goto end;
}
}
else
{
goto end;
}
pin_ptr <const wchar_t> wch=PtrToStringChars(a);
_wfopen_s(&out,wch,L"w");
fprintf(out,"X[1]=%e\t X[2]=%e\t X[3]=%e\n ",x[1],x[2],x[3]);
fclose(out);
end:;
} // Конец сохранения