📄 yakebi.cpp
字号:
// yakebi.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
class CYakebi
{
protected:
double ** xishu_juzhen;
double * changshu_juzhen;
double *x_m;
double *x_m_temp;
int num_of_jieshu;
public:
CYakebi(char* file_name);
int bijiao( double * , double *);
void Diedai_qiujie();
void Print_result();
};
CYakebi::CYakebi(char* file_name)
{
srand( (unsigned)time( NULL ) );
ifstream input(file_name); //打开数据文件
if(!input) //如果不能打开就报错
{
cout<<"con't open the file"<<endl;
exit(0);
}
else
{
input>>num_of_jieshu; //读入方程的阶数
xishu_juzhen=new double*[num_of_jieshu]; //开辟系数矩阵内存
changshu_juzhen=new double[num_of_jieshu];//开辟常数矩阵内存
x_m=new double[num_of_jieshu]; //开辟解矩阵内存
x_m_temp=new double[num_of_jieshu];
for(int i=0;i<num_of_jieshu;i++)
{
xishu_juzhen[i]=new double[num_of_jieshu];
for(int j=0;j<num_of_jieshu;j++) //读入系数矩阵
input>>xishu_juzhen[i][j];
input>>changshu_juzhen[i]; //读入常数矩阵
x_m[i]=double( rand() %100 )/100; //用随机数初始化x_m[i]
x_m_temp[i]=0;
}
}
}
int CYakebi::bijiao(double * a ,double * b)
{
double max=0;
double t=0;
for(int i=0;i<num_of_jieshu;i++)
{
t=fabs(b[i] - a[i]);
if(max<t)
max=t;
}
if(max<1e-5)
return 1;
else
return 0;
}
void CYakebi::Diedai_qiujie()
{
int N=100;
double sum;
for(int k=0;k<N;k++)
{
cout<<"第 "<<k+1<<" 次循环"<<endl;
for(int i=0;i<num_of_jieshu;i++)
{
sum=0;
for(int j=0;j<num_of_jieshu;j++)
sum+=xishu_juzhen[i][j]*x_m[j];
x_m_temp[i]=x_m[i]+( changshu_juzhen[i]-sum )/xishu_juzhen[i][i];
cout<<"x_m["<<i<<"]="<<x_m[i]<< "\t x_m_temp["<<i<<"]="<<x_m_temp[i]<<endl;
}
if(bijiao(x_m,x_m_temp) )
break;
else
for(int i=0;i<num_of_jieshu;i++)
x_m[i]=x_m_temp[i];
}
}
void CYakebi::Print_result()
{
cout<<"你要求解的方程为:"<<endl;
for(int i=0;i<num_of_jieshu;i++)
{
for(int j=0;j<num_of_jieshu-1;j++)
cout<<setiosflags(ios::fixed)<<setprecision(4)<<
setw(10)<<xishu_juzhen[i][j]<<"X"<<j<<"+";
cout<<setw(10)<<xishu_juzhen[i][num_of_jieshu-1]<<"X"<<num_of_jieshu-1;
cout<<setw(10)<<"="<<changshu_juzhen[i];
cout<<endl;
}
cout<<"==========================================================================="<<endl;
cout<<"求解过程:"<<endl<<endl;
Diedai_qiujie();
cout<<"==========================================================================="<<endl;
cout<<"得到的解为:"<<endl;
for( i=0;i<num_of_jieshu;i++)
cout<<setiosflags(ios::fixed)<<setw(7)<<setprecision(4)
<<setw(5)<<"X"<<i<<"="<<x_m_temp[i]<<endl;
}
void main()
{
CYakebi yakebi("a.txt");
yakebi.Print_result();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -