⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 劳斯表.cpp

📁 计算机控制--劳斯表实现
💻 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 + -