標籤:

矩陣(三)

6、 矩陣(三)

編寫C++程序完成以下功能:

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

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

l 存貯矩陣的數組指針,根據矩陣大小動態申請(new)。

(2) 矩陣類的方法包括:

l 構造函數,參數是矩陣大小,需要動態申請存貯矩陣的數組;

l 析構函數,需要釋放矩陣的數組指針;

l 拷貝構造函數,需要申請和複製數組;

l 輸入,可以從cin中輸入矩陣元素;

l 輸出,將矩陣格式化輸出到cout;

l 矩陣相加的函數,實現兩個矩陣相加的功能,結果保存在另一個矩陣類,但必須矩陣大小相同;

l 矩陣相減的函數,實現兩個矩陣相減的功能,結果保存在另一個矩陣類,但必須矩陣大小相同。

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

(4) 初始化A1、A2;

(5) 計算並輸出A3 = A1加A2,A3=A1減A2;

(6) 用new動態創建三個矩陣類的對象:pA1、pA1、pA3;

(7) 初始化pA1、pA2;

(8) 計算並輸出pA3=pA1加pA2,pA3=pA1減pA2;

(9) 釋放pA1、pA1、pA3。

#include<iostream>

#include <iomanip>

using namespace std;

class Matrix

{

private:

int lines;

int rows;

public:

int **Array;

Matrix(int Nlines=3,int Nrows=3)

{

int i;

lines=Nlines;

rows=Nrows;

Array=new int *[lines];

for(i=1;i<=lines;i++)

{

Array[i]=new int(rows);

}

}

void Setmatrix(int Nlines,int Nrows);

Matrix(Matrix &p);

int Getlines() {return lines;}

int Getrows() {return rows;}

int*GetArray() {return Array[lines];}

void putin();

void putin(int x,int y,int a);

void putout();

friend void Matrixplus(Matrix* a,Matrix* b,Matrix* c);

friend void Matrixsub(Matrix* a,Matrix* b,Matrix* c);

~Matrix()

{

int i;

for(i=1;i<=lines;i++)

{

delete [] Array[i];

}

delete [] Array;

}

};

Matrix::Matrix(Matrix &p)

{

lines=p.lines;

rows=p.rows;

Array[lines]=p.Array[p.lines];

}

void Matrix::Setmatrix(int Nlines,int Nrows)

{

int i;

lines=Nlines;

rows=Nrows;

Array=new int *[lines];

for(i=1;i<=lines;i++)

{

Array[i]=new int(rows);

}

}

void Matrix::putin()

{

int i,j;

cout<<"請輸入一個"<<lines<<"*"<<rows<<"矩陣:"<<endl;

for(i=1;i<=lines;i++)

{

for(j=1;j<=rows;j++)

{

cin>>Array[i][j];

}

getchar();

}

}

void Matrix::putin(int x,int y,int a)

{

int i,j;

for(i=1;i<=x;i++)

{

for(j=1;j<=y;j++)

{

Array[i][j]=a;

}

}

}

void Matrix::putout()

{

int i,j;

for(i=1;i<=lines;i++)

{

for(j=1;j<=rows;j++)

{

cout<<setw(5)<<Array[i][j];

}

cout<<endl;

}

}

void Matrixplus(Matrix* a,Matrix* b,Matrix* c,int l,int r)

{

int i,j;

for(i=1;i<=l;i++)

{

for(j=1;j<=r;j++)

{

c->Array[i][j]=a->Array[i][j]+b->Array[i][j];

}

}

}

void Matrixsub(Matrix* a,Matrix* b,Matrix* c,int l,int r)

{

int i,j;

for(i=1;i<=l;i++)

{

for(j=1;j<=r;j++)

{

c->Array[i][j]=a->Array[i][j]-b->Array[i][j];

}

}

}

int main()

{

Matrix PA1(3,4),PA2(3,4),PA3(3,4),PA4(3,4);

int l,r;

char z;

cout<<"採用默認值(y)/手動輸入(非y)?"<<endl;

cin>>z;

if(z=="y")

{

PA1.Setmatrix(3,4);

PA1.putin(3,4,3);

PA2.Setmatrix(3,4);

PA2.putin(3,4,3);

}

else

{

cout<<"請輸入矩陣的行和列(用空格隔開):"<<endl;

cin>>l>>r;

PA3.Setmatrix(l,r);

PA4.Setmatrix(l,r);

PA1.Setmatrix(l,r);

PA1.putin();

PA2.Setmatrix(l,r);

PA2.putin();

}

cout<<endl<<"矩陣PA1為:"<<endl;

PA1.putout();

cout<<endl<<"矩陣PA2為:"<<endl;

PA2.putout();

if(z=="y")

{

Matrixplus(&PA1,&PA2,&PA3,3,4);

Matrixsub(&PA1,&PA2,&PA4,3,4);

}

else

{

Matrixplus(&PA1,&PA2,&PA3,l,r);

Matrixsub(&PA1,&PA2,&PA4,l,r);

}

cout<<endl<<"PA1+PA2="<<endl;

PA3.putout();

cout<<endl<<"PA1-PA2="<<endl;

PA4.putout();

system("pause");

return 0;

}


推薦閱讀:

C++矩陣處理庫
gal2mat:將gal權重文件轉成n-by-n矩陣
吉薩太空矩陣——關於吉薩的最近消息
矩陣類的模板實現(C++)

TAG:矩陣 |