1. 程式人生 > >C++初學初練數學指標與字串之矩陣初練

C++初學初練數學指標與字串之矩陣初練

#include <iostream>
#include <string>
#include <cmath>
using namespace std;
class Matrix
{
public:
	Matrix(int,int);
	~Matrix();
	Matrix(const Matrix &m);
	int getLines(){return lines;}
	int getRows(){return rows;}
	void cinMatrix();
	void coutMatrix();
	friend void plusMatrix(Matrix &a,Matrix &b,Matrix &c);
	friend void subMatrix(Matrix &a,Matrix &b,Matrix &c);
private:
	int lines;
	int rows;
	int *p;
};
Matrix::Matrix(int Lines,int Rows):lines(Lines),rows(Rows)
{
	p=new int[lines*rows];
}
Matrix::Matrix(const Matrix &m)
{
	lines=m.lines;
	rows=m.rows;
	p=new int[lines*rows];
    for(int i=0;i<lines;i++)
	{
		for(int j=0;j<rows;j++)
		{
			p[i*rows+j]=m.p[i*rows+j];
		}
	}
}
Matrix::~Matrix()
{
	delete p;
}
void Matrix::cinMatrix()
{
	for(int i=0;i<lines;i++)
	{
		for(int j=0;j<rows;j++)
		{
			cout<<"請輸入矩陣第"<<i+1<<"行第"<<j+1<<"列元素:";
			cin>>p[i*rows+j];
		}
	}
}
void Matrix::coutMatrix()
{	
	for(int i=0;i<lines;i++)
	{
		for(int j=0;j<rows;j++)
		{
			cout<<p[i*rows+j]<<"	";
		}
		cout<<endl;
	}
}
void plusMatrix(Matrix &a,Matrix &b,Matrix &c)
{
	if(a.getLines()!=b.getLines())
	{
		cout<<"矩陣不相容,不可進行矩陣加法運算"<<endl;
		exit(0);
	}
	else if(a.getRows()!=b.getRows())
		{
		cout<<"矩陣不相容,不可進行矩陣減法運算"<<endl;
		exit(0);
	}else
	{
		
		for(int i=0;i<a.getLines();i++)
	    {
			for(int j=0;j<a.getLines();j++)
			{
				c.p[i*a.getRows()+j]=a.p[i*a.getRows()+j]+b.p[i*a.getRows()+j];
			}
		}
	
	}
}
 void subMatrix(Matrix &a,Matrix &b,Matrix &c)
{
	if(a.getLines()!=b.getLines())
	{
		cout<<"矩陣不相容,不可進行矩陣加法運算"<<endl;
		exit(0);
	}
	else if(a.getRows()!=b.getRows())
		{
		cout<<"矩陣不相容,不可進行矩陣減法運算"<<endl;
		exit(0);
	}else
	{
		//Matrix m(a);
		for(int i=0;i<a.getLines();i++)
	    {
			for(int j=0;j<a.getLines();j++)
			{
				c.p[i*a.getRows()+j]=a.p[i*a.getRows()+j]-b.p[i*a.getRows()+j];
			}
		}
	}

}
int main()
{
	Matrix A1(4,3),A2(4,3),A3(4,3);
	A1.cinMatrix();
	cout<<endl;
	A2.cinMatrix();
	cout<<endl;
	A1.coutMatrix();
	cout<<endl;
	A2.coutMatrix();
	cout<<endl;
	A3.cinMatrix();
	plusMatrix(A1,A2,A3);
	A3.coutMatrix();
	Matrix *m=new Matrix(3,4);
	m[0].cinMatrix();
	m[1].cinMatrix();
	plusMatrix(m[0],m[1],m[2]);
	m[2].coutMatrix();
	delete []m;
	return 0;
}

這是一次上機實驗課內容,題目是:

 用類來實現矩陣,定義一個矩陣的類,屬性包括:

矩陣大小,用 lines, rows(行、列來表示);

存貯矩陣的陣列指標,根據矩陣大小動態申請(new)。

矩陣類的方法包括:

建構函式:引數是矩陣大小,需要動態申請存貯矩陣的陣列;

解構函式:需要釋放矩陣的陣列指標;

拷貝建構函式:需要申請和複製陣列(深複製);

輸入函式:可以從cin 中輸入矩陣元素;

輸出函式:將矩陣格式化輸出到cout;

矩陣相加函式:實現兩個矩陣相加的功能,結果儲存在另一個矩陣裡,但必須矩陣

大小相同;

矩陣相減的函式:實現兩個矩陣相減的功能,結果儲存在另一個矩陣裡,但必須矩

陣大小相同。

主函式功能:

定義三個矩陣:A1、A2、A3;

初始化 A1、A2;

計算並輸出 A3 = A1+A2,A3=A1+A2;

用 new 動態建立三個矩陣類的物件:pA1、pA1、pA3;

初始化 pA1、pA2;

計算並輸出 pA3=pA1+pA2,pA3=pA1+pA2;

釋放 pA1、pA1、pA3。

ps:程式碼初練,錯誤請指出,求賜教,