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

📄 functions.h

📁 关于行列式的计算.可以完成矩阵的有关计算
💻 H
📖 第 1 页 / 共 2 页
字号:
	int k;
	float b[20],D=1,Save[20][20];//b[20]用来存放输入的方程右边常数;Temp用于交换
	cout<<"请你输入方程的未知数的个数K:"<<endl;
	cin>>k;
	m=k;
	if(k>=1)
	{
		cout<<"请你建立方程,依次输入各个方程的未知数前的系数,共有"<<k<<"*"<<k<<"="<<k*k
		<<"个数字.(输入数字之间用“空格”格开,输入结束后按“回车键”)"<<endl;
		for(int i=0;i<k;i++)
		{
			for(int j=0;j<k;j++)
			{
				cin>>Rangers[i][j];
				if((i==k)||(j==k))
					break;
			}
		}
		cout<<"请你输入各个方程等号右边的常数,共有"<<k<<"个.(输入数字之间用“空格”格开,输入结束后按“回车键”)"<<endl;
		for(i=0;i<k;i++)
		{
			cin>>b[i];
			if(i==k)
				break;
		}
		for(int i4=0;i4<k;i4++)//save rangers[][];
		{
			for(int j4=0;j4<k;j4++)
			{
				Save[i4][j4]=Rangers[i4][j4];
			}
		}
		Accunt_Rangers();//已经化为了上三角
		D=Sum;
		cout<<"你建立的方程的解的情况如下:"<<"\nD="<<Sum<<endl; 
		for(int i5=0;i5<k;i5++)//get rangers[][].
		{
			for(int j5=0;j5<k;j5++)
			{
				Rangers[i5][j5]=Save[i5][j5];
			}
		}
		for(int j=1;j<=k;j++)//KLM
		{
			for(int i1=0;i1<k;i1++)
			{
				for(int j1=0;j1<k;j1++)
				{
					Save[i1][j1]=Rangers[i1][j1];
				}
			}
			for(int i2=0;i2<k;i2++)
			{
				Rangers[i2][j-1]=b[i2];
			}
			Accunt_Rangers();			
			for(int i3=0;i3<k;i3++)		
			{
				for(int j3=0;j3<k;j3++)
				{
						Rangers[i3][j3]=Save[i3][j3];

				}			
			}
				cout<<"D"<<j<<"="<<Sum<<"\nX"<<j<<"="<<"D"<<j<<"/D="<<Sum/D<<endl;
			}
			cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; 
	}
	else 
	{
		cout<<"友情提示:你的输入非法!"
			<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; 
	}
}


void Output_Rangers()//output Rangers Function为了显示行列格式
{
	int i,j,k=0;
	if(k==0)
	{
		for(i=0;i<=(((int)m/2)-1);i++)
		{
			cout<<"\t\t|";
			for(j=0;j<m;j++)
			{
				if(j==m-1){cout<<Rangers[i][j];}
				else {cout<<Rangers[i][j]<<"\t";}
				if((i==m)&&(j==m))
					break;
			}
			cout<<"|"<<endl;
		}
		k=1;
	}//output (int)1-----m/2-1
	
	if(k==1)
	{
		cout<<"\tD=\t|";
		for(j=0;j<m;j++)
		{
			if(j==m-1){cout<<Rangers[(int)m/2][j];}
			else {cout<<Rangers[(int)m/2][j]<<"\t";}
		}
		cout<<"|\n";
		k=2;
	}//output (int)m/2

	if(k==2)
	{
		for(i=(int)m/2+1;i<m;i++)
		{
			cout<<"\t\t|";
			for(j=0;j<m;j++)
			{
				if(j==m-1){cout<<Rangers[i][j];}
				else {cout<<Rangers[i][j]<<"\t";}
				if((i==m)&&(j==m))
					break;
			}
			cout<<"|"<<endl;
		}//output (int)m/2+1-----m
	}
}			



void Change_RangersRow()///行列式互换行的函数体
{
	int No1,No2;
	cout<<"请输入你要交换的行:(输入数字之间用“空格”格开,输入结束后按“回车键”)"<<endl;
	cin>>No1>>No2;
	if((No1>0)&&(No1<=m)&&(No2>0)&&(No2<=m)&&(No1!=No2))
	{
		float Temp;
		for(int i=0;i<m;i++)
		{
			Temp=Rangers[No1-1][i];
			Rangers[No1-1][i]=-Rangers[No2-1][i];
			Rangers[No2-1][i]=Temp;
		}
		cout<<"行列式互换行后";
		Show_Ranges();
	}
	else
		cout<<"友情提示:你的输入非法!请输入1--"<<m<<"之间两不相等整数\n"
		    <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;  
}

void Change_RangersCol()///行列式互换列的函数体
{
	int No1,No2;
	cout<<"请输入你要交换的列:(输入数字之间用“空格”格开,输入结束后按“回车键”)"<<endl;
	cin>>No1>>No2;
	if((No1>0)&&(No1<=m)&&(No2>0)&&(No2<=m)&&(No1!=No2))
	{
		float Temp;
		for(int i=0;i<m;i++)
		{
			Temp=Rangers[i][No1-1];
			Rangers[i][No1-1]=Rangers[i][No2-1];
			Rangers[i][No2-1]=Temp;
			Rangers[0][i]=-Rangers[0][i];
		}
		cout<<"行列式互换列后";
		Show_Ranges();
	}
	else
		cout<<"友情提示:你的输入非法!请输入1--"<<m<<"之间两不相等整数\n"
		    <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
}
void DateMul_RangersRow()//数乘加行列式的行
{
	int No1,No2;//要乘加的行
	float No3;//要乘的数
	cout<<"请依次输入要乘的行/要加的行/要乘的数:(输入数字之间用“空格”格开,输入结束后按“回车键”)"<<endl;
	cin>>No1>>No2>>No3;
	if((No1>0)&&(No1<=m)&&(No2>0)&&(No2<=m)&&(No1!=No2))
	{
		for(int i=0;i<m;i++)
		{
			Rangers[No2-1][i]=No3*Rangers[No1-1][i]+Rangers[No2-1][i];
		}
		cout<<"数乘加行列式的行后";
		Show_Ranges();
	}
	else
		cout<<"友情提示:你的输入非法!第一、二次输入请输入1--"<<m<<"之间两个整数\n"
		    <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
}

void DateMul_RangersCol()//数乘加行列式的列
{
	int No1,No2;//要乘加的列
	float No3;//要乘的数
	cout<<"请依次输入要乘的列/要加的列/要乘的数:(输入数字之间用“空格”格开,输入结束后按“回车键”)"<<endl;
	cin>>No1>>No2>>No3;
	if((No1>0)&&(No1<=m)&&(No2>0)&&(No2<=m)&&(No1!=No2))
	{
		for(int i=0;i<m;i++)
		{
			Rangers[i][No2-1]=No3*Rangers[i][No1-1]+Rangers[i][No2-1];
		}
		cout<<"数乘加行列式的列后";
		Show_Ranges();
	}
	else
		cout<<"友情提示:你的输入非法!第一、二次输入请输入1--"<<m<<"之间两个整数\n"
		    <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
}

void Multiply_RangersCol()//数乘行列式的列
{
	int No1;//乘的列
	float No2;//乘的数
	cout<<"请依次输入要乘的列/要乘的数(输入数字之间用“空格”格开,输入结束后按“回车键”)"<<endl;
	cin>>No1>>No2;
	if((No1>0)&&(No1<=m))
	{
		for(int i=0;i<m;i++)
		{
			Rangers[i][No1-1]=Rangers[i][No1-1]*No2;
		}
		cout<<"数乘行列式列的后";
		Show_Ranges();
	}
	else
		cout<<"友情提示:你的输入非法!第一次输入请输入1--"<<m<<"之间两个整数\n"
		    <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
}

void Multiply_RangersRow()//数乘行列式的行
{
	int No1;//乘的行
	float No2;//乘的数
	cout<<"请依次输入要乘的行/要乘的数(输入数字之间用“空格”格开,输入结束后按“回车键”)"<<endl;
	cin>>No1>>No2;
	if((No1>0)&&(No1<=m))
	{
		for(int i=0;i<m;i++)
		{
			Rangers[No1-1][i]=Rangers[No1-1][i]*No2;
		}
		cout<<"数乘行列式的行后";
		Show_Ranges();
	}
	else
		cout<<"友情提示:你的输入非法!第一次输入请输入1--"<<m<<"之间两个整数\n"
		    <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
}

void Detach_RangersRow()//分拆行函数
{
	int No1,k=0;
	float First[20],Second[20];
	cout<<"请你输入要分拆的行(输入的数字必须是大于0小于行列式的阶数M的整数)"<<endl;
	cin>>No1;
	if((No1>0)&&(No1<=m))
	{
		cout<<"请输入"<<2*m<<"个数,每两个数的和为行列式的第"<<No1<<"行各个元素"<<endl;
		for(int i=0;i<m;i++)//input
		{
			cin>>First[i]>>Second[i];
			if(First[i]+Second[i]==Rangers[No1-1][i]){k=1;}
			else {k=0;}
			if(i==m){break;}
		}
		if(k==1)
		{
			for(i=0;i<m;i++)
			{
				Rangers[No1-1][i]=First[i];													
			}
			cout<<"分拆行操作结束后";
			Show_Ranges();//print the first ranger
			for(i=0;i<m;i++)
			{
				Rangers[No1-1][i]=Second[i];
			}
			cout<<"+";
			for(int i=0;i<m;i++)//print the ranger
			{
				cout<<"\t\t|";
				for(int j=0;j<m;j++)
				{
					if(j==m-1)
						cout<<Rangers[i][j];
					else
						cout<<Rangers[i][j]<<"\t";
				}
				cout<<"|"<<"\n";
			}
			cout<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
		}
		if(k==0)
		{
			cout<<"友情提示:你输入的相邻两数之和不等于行列式这行对应的元素!请重试.\n"
			    <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
		}
	}
	else
	{
		cout<<"友情提示:你的输入非法!请输入1--"<<m<<"之间的一个整数,请重试.\n"
		    <<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	}
}
void Detach_RangersCol()//分拆列函数
{
	int No1,k=0,Temp=0;
	float First[20],Second[20];
	cout<<"请你输入要分拆的列(输入的数字必须是大于0小于行列式的阶数M的整数)"<<endl;
	cin>>No1;
	if((No1>0)&&(No1<=m))
	{
		cout<<"请输入"<<2*m<<"个数,每两个数的和为行列式的第"<<No1<<"列的各个元素"<<endl;
		for(int i=0;i<m;i++)//input
		{
			cin>>First[i]>>Second[i];
			if(First[i]+Second[i]==Rangers[i][No1-1]){k=1;}
			else {k=0;}
			if(i==m){break;}
		}
		if(k==1)
		{
			for(int i=0;i<m;i++)
			{
				Rangers[i][No1-1]=First[i];													
			}
			cout<<"分拆列操作结束后";
			Show_Ranges();//print the first ranger
			for(i=0;i<m;i++)
			{
				Rangers[i][No1-1]=Second[i];
			}
			cout<<"+";
			for(i=0;i<m;i++)//print the ranger
			{
				cout<<"\t\t|";
				for(int j=0;j<m;j++)
				{
					if(j==m-1)
						cout<<Rangers[i][j];
					else
						cout<<Rangers[i][j]<<"\t";
				}
				cout<<"|"<<"\n";
			}
			cout<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
		}
		if(k==0)
		{
			cout<<"友情提示:你输入的相邻两数之和不等于行列式这列对应的元素!请重试.\n"
				<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
		}
	}
	else
	{
		cout<<"友情提示:你的输入非法!请输入1--"<<m<<"之间的一个整数,请重试.\n"
			<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	}
}

void Unwrap_RangersROw()//行列式展开行
{
	int No1;//存放输入的行数
	cout<<"请你输入要展开的行.(输入结束后敲回车键)"<<endl;
	cin>>No1;
	if((No1>=1)&&(No1<=m))
	{
		cout<<"D=";
		for(int i=0;i<m;i++)
		{
			cout<<"a"<<No1<<i+1;
			if(i<m-1)
			{
				cout<<"+";
			}
		}
		Accunt_Rangers();
		cout<<"="<<Sum
			<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	}
	else
	{
		cout<<"友情提示:你的输入非法!请输入1--"<<m<<"之间的一个整数,请重试.\n"
			<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	}
}

void Unwrap_RangersCol()//行列式展开列
{
	int No1;//存放输入的列数
	cout<<"请你输入要展开的列.(输入结束后敲回车键)"<<endl;
	cin>>No1;
	if((No1>=1)&&(No1<=m))
	{
		cout<<"D=";
		for(int i=0;i<m;i++)
		{
			cout<<"a"<<i+1<<No1;
			if(i<m-1)
			{
				cout<<"+";
			}
		}
		Accunt_Rangers();
		cout<<"="<<Sum
			<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	}
	else
	{
		cout<<"友情提示:你的输入非法!请输入1--"<<m<<"之间的一个整数,请重试.\n"
			<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;
	}
}


//////////////////////////////排列和行列式共同有的函数
void FaceCut()//清除屏幕
{
	system("cls");
}

void End()//end 
{
	exit(0);
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -