Code
//Matrix.h
//矩阵类(用来做图形学的作业)
//by 卓卓09 3 2
//可进行矩阵的加 和 乘 操作
#pragma once
#include <iostream>
using namespace std;
class Matrix
{
private:
int m_lnum;//矩阵行数
int m_cnum;//矩阵列数
float* m_p;
public:
Matrix();
Matrix(const int& line,const int& column)//line*column矩阵
{
m_lnum=line;
m_cnum=column;
m_p=new float[m_lnum*m_cnum];
}
Matrix(const int& num)//num*num矩阵
{
m_cnum=m_lnum=num;
m_p=new float[num*num];
}
~Matrix()
{
delete[] m_p;
}
void Set(float sor[])//数组初始化矩阵
{
int j=0;
for(;j<m_lnum*m_cnum;j++)
{
m_p[j]=sor[j];
}
}
void Print()//打印矩阵
{
int j=0;
for(;j<m_lnum*m_cnum;j++)
{
if(j!=0&&j%m_cnum==0)
cout<<endl;
cout<<m_p[j]<<" ";
}
cout<<endl;
}
/*
num为第num 行/列
如:第一行/列 num为1
*/
void SetElement(int x,int y,float element)
{
if(x<=0||x>m_lnum||y<=0||y>m_cnum)//判断x,y是否在范围内
return;
m_p[(x-1)*m_cnum+(y-1)]=element;
}
float GetElement(int x,int y)
{
return m_p[(x-1)*m_cnum+(y-1)];
}
bool SetLine(const int& num,float line[])//设置第num行的值
{
if(num<=0||num>m_cnum)
return false;
int i=(num-1)*m_cnum;
int j=0;//
for(;j<m_lnum;j++,i++)
{
m_p[i]=line[j];//拷贝
}
return true;
}
int GetTotalNum() const//返回矩阵所有元素数目
{
int tmp=m_lnum*m_cnum;
return tmp;
}
int GetLineNum() const//返回矩阵行数
{
return m_lnum;
}
int GetColumnNum() const//返回矩阵列数
{
return m_cnum;
}
bool Add(Matrix& source,Matrix& result)//矩阵相加
{
if(source.GetColumnNum()!=m_cnum||source.GetLineNum()!=m_cnum)
return false;
int i=1,j=1;
for(;i<=m_lnum;i++)
{
j=1;
for(;j<=m_cnum;j++)
{
result.SetElement(i,j,this->GetElement(i,j)+source.GetElement(i,j));
}
}
return true;
}
bool Plus(Matrix& source,Matrix& result)//矩阵相乘
{
if(source.GetLineNum()!=m_cnum)//行不等于列的话返回false
return false;
int i=1,j=1,z=1;
float sum=0;
for(;i<=m_lnum;i++)//第i行
{
j=1;
for(;j<=source.GetColumnNum();j++)//第j列
{
z=1;
sum=0;
for(;z<=m_cnum;z++)//计算
{
sum+=this->GetElement(i,z)*source.GetElement(z,j);
}
result.SetElement(i,j,sum);
}
}
}
bool Minus(const Matrix& source,Matrix& result)//to be continue
{
return true;
}
};
//test.cpp
#include "Matrix.h"
void Cal()
{
Matrix a(4,2);
Matrix b(2,1);
Matrix r(4,1);//存结果
float sor[8]={1,2,3,4,5,6,7,8};
float sor2[2]={1,2};
a.Set(sor);
b.Set(sor2);
a.Plus(b,r);//进行乘运算
r.Print();
}
int main()
{
Cal();
system("pause");
return 0;
}
--------------------------
新闻:
Linux基金会CEO:Linux是发展最快的平台导航:
博客园首页 知识库 新闻 招聘 社区 小组 博问 网摘 找找看文章来源:
http://www.cnblogs.com/minimdb/archive/2009/03/26/1422338.html