矩阵与向量相乘(修改版)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.cpp
**********************************

#include<iostream>
using namespace std;
#include "2.h"

int main() {

int row,col;

cout<<"请输入矩阵的行数与列数:";

cin>>row>>col;

Mat m(row,col);

Vec v(col);

Vec r(row);

cout<<"请输入矩阵的元素 \n";

int i,j;

for(i=0;i<row;i++)

{

for(j=0;j<col;j++)

cin>>m.element(i,j);

}

cout<<"请输入向量的元素 \n";

for(i=0;i<col;i++)

cin>>v.element(i);

Mul(m,v,r);

cout<<"the number of the Mat: "<<m.HowMat()<<endl;

cout<<"the number of the Vec: "<<v.HowVec()<<endl;

cout<<"矩阵: \n";

m.display();

cout<<"与向量: \n";

v.display();

cout<<"的乘积:\n";

r.display();

return 0;

}


2.h
**************************



#include<cstdlib>
using namespace std;

#define string


class Matrix
{
public:
virtual void display()=0;
};


//矩阵类定义
class Mat: public Matrix
{

int *p_data;

int row,col;

static int num_Mats;

public:

Mat(int r,int c);

~Mat();

int &element(int r,int j); //访问矩阵元素

int element(int i,int j) const; //访问矩阵元素(为常量对象提供)

int dim_row()const;

int dim_col()const;

void display();

static int HowMat();





};


//向量类的定义

class Vec: public Matrix

{

int *p_data;

int num;

static int num_Vecs;



public:

Vec(int n);

~Vec();

int &element(int i); //访问向量元素

int element(int i) const;

int dim() const;

void display() ;

static int HowVec();





};



void Mul(const Mat &m,const Vec &v,Vec &r) ;

3.cpp
******************************

#include<iostream>
using namespace std;
#include "2.h"


int Mat::num_Mats = 0;

int Vec::num_Vecs = 0;

int Mat::HowMat()

{

return num_Mats;

}

int Vec::HowVec()

{

return num_Vecs;

}
//矩阵类的实现
Mat::Mat(int r,int c)

{

if(r <=0|| c<=0)

{

cout<<"矩阵尺寸不合法!"<<endl;

exit(-1);

}

row=r;col=c;

p_data =new int[row*col];


num_Mats++;

}

Mat::~Mat()

{

delete []p_data;

num_Mats--;

}

int & Mat::element(int i,int j)

{

if(i<0|| i>=row || j<0 ||j>=col)

{

cout<<"the index is wrong!"<<endl;

exit(-1);

}

return *(p_data+i*col+j);

}


int Mat::elem

ent(int i,int j) const {

if(i<0||i>=row || j<0||j>=col)

{

cout<<"矩阵下标越界! \n"<<endl;

exit(-1);

}

return *(p_data+i*col+j);

}



int Mat::dim_row()const

{

return row;

}

int Mat::dim_col()const

{

return col;

}

void Mat::display()

{

int *p=p_data;

for(int i=0;i<row;i++)

{

for(int j=0;j<col;j++)

{

cout<<*p<<' ';

p++;

}

cout<<endl;

}
}



//向量类的实现
Vec::Vec(int n)

{

if(n<=0)

{

cout<<"向量尺寸不合法!"<<endl;

exit(-1);

}

num =n;

p_data=new int[num];

num_Vecs++;

}

Vec::~Vec()

{

delete []p_data;

num_Vecs--;
}

int &Vec::element(int i)

{

if(i<0||i>= num)

exit(-1);

return p_data[i];

}

int Vec::element(int i) const

{

if(i<0||i>= num)

exit(-1);

return p_data[i];

}

int Vec::dim() const

{

return num;

}

void Vec::display() const

{

int *p=p_data;

for(int i=0;i<num;i++,p++)

cout<<*p<<' ';

cout<<endl;

}


//矩阵与向量相乘
void Mul(const Mat &m,const Vec &v,Vec &r)
{

if(m.dim_col()!=v.dim() ||

m.dim_row()!=r.dim())
{
cerr << "矩阵与向量尺寸不匹配! \n ";
exit(-1);
}


int row=m.dim_row(),col=m.dim_col();

for(int i=0;i<row;i++)

{

r.element(i)=0;

for(int j=0;j<col;j++)

{

r.element(i)+=m.element(i,j)*v.element(j);

}

}



}

相关文档
最新文档