📄 劳斯表.cpp
字号:
//劳斯表算法
#include<iostream>
#include<fstream>
using namespace std;
void main(){
cout<<"计算机控制-劳斯表:\n";
double *snn; //定义一个数组存放劳斯表
double *an; //定义一个数组存放系数
int N;
int M;
begin:
ofstream ofile("劳斯表.txt");
cout<<"Input n: ";
cin>>N;
M = ((N+1)%2==1?((N+1)/2+1):((N+1)/2));
snn = new double[M*(N+1)];
for(int i=0;i<M*(N+1);i++)
{
snn[i] = 0;
}
an = new double[N+1];
cout<<"Input an:\n";
for(i = N;i>=0;i--)
{
cout<<"\ta["<<i<<"]=";
cin>>an[i];
if (an[i] == 0) an[i] = 1e-50;
}
for(int j = 0;j<M;j++)
{
snn[0*M+j] = an[N-j*2];
if(N-j*2 -1>=0)
{
snn[1*M+j] = an[N-j*2 -1];
}
}
for(i=2;i<N+1;i++)
{
for(int j=0;j<((N%2==1)?(M-i/2):(M-(i+1)/2));j++)
{
snn[i*M+j] = (snn[(i-1)*M]*snn[(i-2)*M+j+1] - snn[(i-2)*M]*snn[(i-1)*M+j+1])/snn[(i-1)*M];
if((snn[i*M+j]<1e-50)&&(snn[i*M+j]>=0))
{
snn[i*M+j] = 1e-50;
}
if((snn[i*M+j]>-1e-50)&&(snn[i*M+j]<=0))
{
snn[i*M+j] = -1e-50;
}
if(snn[i*M+j] > 1e+50) snn[i*M+j] = 1e+50;
}
bool zf = true;
for(j = 0;j<M;j++)
{
if((snn[i*M+j] > 1e-25)||(snn[i*M+j]<-1e-25)) zf = false;
}
if(zf==true)
{
for(int j=0;j<((N%2==1)?(M-i/2):(M-(i+1)/2));j++)
{
snn[i*M+j] = (N-i+1-2*j)*snn[(i-1)*M+j];
}
}
}
cout<<"\n劳斯表如下:\n"<<endl;
ofile<<"劳斯表如下:\n"<<endl;
for(i=0;i<N+1;i++)
{
cout<<"S"<<N-i<<":\t";
ofile<<"S"<<N-i<<":\t";
for(int j=0;j<((N%2==1)?(M-i/2):(M-(i+1)/2));j++)
{
if((snn[i*M+j]<1e-25)&&(snn[i*M+j]>-1e-25)&&(i>=2))
{
cout<<"ε\t\t";
ofile<<"ε\t\t";
}
else if((snn[i*M+j]<1e-25)&&(snn[i*M+j]>-1e-25)&&(i<2))
{
cout<<"0\t\t";
ofile<<"0\t\t";
}
else if(snn[i*M+j]>1e+25)
{
cout<<"+∞\t\t";
ofile<<"+∞\t\t";
}
else if(snn[i*M+j]<-1e+25)
{
cout<<"-∞\t\t";
ofile<<"-∞\t\t";
}
else
{
cout<<snn[i*M+j]<<"\t\t";
ofile<<snn[i*M+j]<<"\t\t";
}
}
cout<<endl<<endl;
ofile<<endl<<endl;
}
delete []snn;
delete []an;
char cmd;
cout<<"Press \'c\' or \'C\' to continue: ";
cin>>cmd;
if((cmd == 'c')||(cmd == 'C'))
{
goto begin;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -