Homework #1

Task:

Requirements:

Interfaces:

class CVector
{
private:
int size;
double *pData;
int max;

public:
CVector(); // 构造函数
CVector(int nSize);
CVector(int nSize, double *pSrc);
CVector(int nSize, float *pSrc);
CVector(int nSize, int *pSrc);
CVector(CVector &src);
~CVector(); // 析构函数
 

ReadFile(char *pFilename);    // 从数据文件读取数据


int Init(); // 初始化
int Destroy(); // 释放空间
int ClearValues(); // 向量所有元素置0

int Size(); // 获取向量的维数
double Norm(); //求向量的模长

double *GetData(); // 获取向量的数据串

double GetAt( int k ); // 获取第k个元素
inline double& operator[](int k){return pData[k];} // 重载[]操作符
CMatrix& operator=(CMatrix&);//赋值函数,重载=操作符

int Resize( int nMax ); // 分配空间

...
};


class CMatrix
{
private:
int row, col;
double *pData;

public:
CMatrix();//构造函数
CMatrix(int nRow, int nCol);
CMatrix(CMatrix&);
CMatrix(double* srcdata,int srcmSize,int srcysize);
CMatrix(float* srcdata,int srcmSize,int srcysize);
CMatrix(int* srcdata,int srcmSize,int srcysize);
CMatrix(long* srcdata,int srcmSize,int srcysize);
~CMatrix();//析构函数

ReadFile(char *pFilename);    // 从数据文件读取数据


CMatrix& operator=(CMatrix&);//赋值函数

int GetRowSize(); // 获取行数
int GetColSize(); // 获取列数
int ClearValue();
int Resize( int nRow, int nCol); // 重新分配空间

double GetAt( int i, int j ); // 获取元素
double& operator[](int i){return pdata[i];} // 重载操作符
double operator[](int i)const{return pdata[i];}
double& GetAt(int x,int y);

int SetAt(int i, int j, double value);    // 设置元素的值

int GetColValue(CVector& vecDst,int nColIdx); // 得到列向量
int GetRowValue(CVector& vecDst,int nRowIdx); // 得到行向量

int SetColValue(CVector& vecSrc,int nColIdx); // l利用向量赋值
int SetRowValue(CVector& vecSrc,int nRowIdx);

...
};


//向量之间的运算
int operator==(CVector& v1,CVector& v2);
CVector operator+(CVector& v1,CVector& v2);
CVector operator-(CVector& v1,CVector& v2);
double cross(CVector& v1,CVector& v2);
CVector operator*(CVector& v1,CVector& v2);
CVector operator*(CVector& v1,double value);
CVector operator*(double value,CVector& v1);
double mixed(CVector& v1,CVector& v2,CVector& v3);

//矩阵之间的运算
int operator==(CMatrix& m1,CMatrix& m2);
CMatrix operator+(CMatrix& m1,CMatrix& m2);
CMatrix operator-(CMatrix& m1,CMatrix& m2);
double cross(CMatrix& m1,CMatrix& m2);
CMatrix operator*(CMatrix& m1,CMatrix& m2);
CMatrix operator*(CMatrix& v1,double value);
CMatrix operator*(double value,CMatrix& v1);


//向量与矩阵的运算
CVector operator*(CMatrix& m1,CVector& v1);
CVector operator*(CVector& v1,CMatrix& m1);
 

数据文件格式

Vector:

第一行:第1个字符为'V',然后空格后跟一正整数,表示向量的维数;
第二行:为向量的各元素数据,以空格相间.

如:

V 5
1.0 2.0 3.0 4.0 5.0
 

Matrix:

第一行:第1个字符为'M',然后空格后跟2个正整数,分别表示矩阵的行数和列数;
第二行开始:每一行表示矩阵的行向量各元素.

如:

M 4 5
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
 

Data Samples download

Source Codes Samples download