矩陣(三)
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:矩陣 |