向量和矩阵(复杂乱)程序

#include <iostream>

#include <iomanip>

using namespace std;

class Vector;

class Matrix

{

private:

int *p;

int len;

public:

Matrix(int n)

{

len = n;

p = new int[n * n]; //创建动态数组

for (int i = 0; i < n * n; i++)

p[i] = 0; //初始化矩阵

};

void Display()

{

cout<<"Matrix is:"<<endl; //显示矩阵

for (int i = 0; i < len * len; i++)

{

if (i % len == len - 1)

cout<<setw(4)<<p[i]<<endl;//矩阵行末换行

else

cout<<setw(4)<<p[i]<<" ";

}

};

void Multiply(Vector&); //定义矩阵与向量乘积函数

void Input()

{

cout<<"输入 "<<len * len<<" 个整数:";

for (int i = 0; i < len * len; i++) //定义矩阵输入函数

cin>>p[i];

};

void operator[](int index) //[]操作符重载(只是显示)

{cout<<p[index]<<endl;};

void add(Matrix& v) //加法

{for (int i=0;i<len*len;i++)

p[i]=p[i]+v.p[i];

cout<<"矩阵的和为:"<<endl;

for ( i = 0; i < len * len; i++)

{

if (i % len == len - 1)

cout<<setw(4)<<p[i]<<endl;

else

cout<<setw(4)<<p[i]<<" ";

}

};

int finddex(int x) //输入序号,查找内容

{int t;

t=p[x];

return t;}

int findnum(int num) //输入内容,查找序号

{for (int i=0;i<len*len;i++)

{if (p[i]==num)

{return i;break;}

else

return -1;}}

void sort() //(升序)排序

{for (int i=0;i<len*len-1;i++)

for (int j=1;j<len*len-i;j++)

{

if(p[i]>p[i+j])

{int temp=p[i];

p[i]=p[i+j];

p[i+j]=temp;}

}}

~Matrix()

{

delete [] p; //析构函数中释放动态创建的空间

};

};

class Vector//结构同矩阵

{

private:

int *p;

int len;

public:

Vector(int n)

{

len = n;

p = new int[n];

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

p[i] = 0;

};

friend void Matrix::Multiply(Vector&);//定义友元函数头

void Input()

{

cout<<"输入"<<len<<" 个整数:";

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

cin>>p[i];

}

void Display()

{

cout<<"Vector is:"<<endl;

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

{

cout<<setw(4)<<p[i]<<" ";

}

cout<<endl;

};

void operator[](int index) //[]操作符重载

{cout<<p[index]<<endl;};

void add(Vector& v) //加法

{

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

{p[i]=p[i]+v.p[i];}

cout<<"向量

的和为:"<<endl;

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

{

cout<<setw(4)<<p[i]<<" ";

}

cout<<endl;

}

int finddex(int x) //查找序号

{int t;

t=p[x];

return t;}

int findnum(int num) //查找内容

{for (int i=0;i<len;i

++)

{if (p[i]==num)

{return i;break;}

else

return -1;}}

void sort() //排序

{for (int i=0;i<len-1;i++)

for (int j=1;j<len-i;j++)

{

if(p[i]>p[i+j])

{int temp=p[i];

p[i]=p[i+j];

p[i+j]=temp;}

}}

~Vector()

{

delete [] p;

};

};

void Matrix::Multiply(Vector &v)

{

int *r = new int[len];

int i, j;

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

{

r[i] = 0;

}

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

{

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

{

r[i] += p[i * len + j] * v.p[j]; //因为在Vector中定义该函数为友元函数所以可以访问v中的私有成员p

}

}

cout<<"乘积为:"<<endl;

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

{

cout<<setw(4)<<r[i]<<" ";

}

cout<<endl;

delete [] r;

};

void main(void)

{

int n;

cout<<"输入维数:";//输入维数

cin>>n;

Matrix m(n),a(n);//根据维数创建矩阵

Vector v(n),b(n);//根据维数创建向量

cout<<"输入第一个矩阵-->";

m.Input();//输入矩阵m

cout<<"输入第二个矩阵-->";

a.Input();//输入矩阵a

cout<<"输入第一个向量->";

v.Input();//输入向量v

cout<<"输入第二个向量->";

b.Input();//输入向量b

cout<<"第一个矩阵";

m.Display();//显示输入矩阵

cout<<"第二个矩阵";

a.Display();

cout<<"第一个向量";

v.Display();//显示输入向量

cout<<"第二个向量";

b.Display();

cout<<"第一个矩阵和第一个向量的积>>";

m.Multiply(v);//计算乘积,并显示结果

m.add(a);

v.add(b);

cout<<"用重载输出第一个矩阵第一个元素>>";

m[0];//测试[]重载

cout<<"用重载输出第一个向量第一个元素>>";

v[0];//测试[]重载

int t=m.finddex(1);//测试查找

cout<<"第一个矩阵序号为1的内容为:"<<t<<endl;

t=m.findnum(2); //测试查找

cout<<"第一个矩阵内容为2的首序号为:"<<t<<endl;

t=v.finddex(0) ; //测试查找

cout<<"第一个向量第一个数内容为:"<<t<<endl;

t=v.findnum(2) ; //测试查找

cout<<"第一个向量内容为2的首序号为:"<<t<<endl;

m.sort();//测试排序

v.sort();//测试排序

cout<<"第一个矩阵升序为->";

m.Display();

cout<<"第

一个向量升序为->";

v.Display();

}

#include <iostream>

#include <iomanip>

using namespace std;

class Vector;

class Matrix

{

private:

int *p;

int len;

public:

Matrix(int n)

{

len = n;

p = new int[n * n]; //创建动态数组

for (int i = 0; i < n * n; i++)

p[i] = 0; //初始化矩阵

};

void Display()

{

cout<<"Matrix is:"<<endl; //显示矩阵

for (int i = 0; i < len * len; i++)

{

if (i % len == len - 1)

cout<<setw(4)<<p[i]<<endl;//矩阵行末换行

else

cout<<setw(4)<<p[i]<<" ";

}

};

void Multiply(Vector&); //定义矩阵与向量乘积函数

void Input()

{

cout<<"输入 "<<len * len<<" 个整数:";

for (int i = 0; i < len * len; i++) //定义矩阵输入函数

cin>>p[i];

};

void operator[](int index) //[]操作符重载(只是显示)

{cout<<p[index]<<endl;};

void add(Matrix& v) //加法

{for (int i=0;i<len*len;i++)

p[i]=p[i]+v.p[i];

cout<<"矩阵的和为:"<<endl;

for ( i = 0; i < len * len; i++)

{

if (i % len == len - 1)

cout<<setw(4)<<p[i]<<endl;

else

cout<<setw(4)<<p[i]<<" ";

}

};

int finddex(int x) //输入序号,查找内容

{int t;

t=p[x];

return t;}

int findnum(int num) //输入内容,查找序号

{for (int i=0;i<len*len;i++)

{if (p[i]==num)

{return i;break;}

else

return -1;}}

void sort() //(升序)排序

{for (int i=0;i<len*len-1;i++)

for (int j=1;j<len*len-i;j++)

{

if(p[i]>p[i+j])

{int temp=p[i];

p[i]=p[i+j];

p[i+j]=temp;}

}}

~Matrix()

{

delete [] p; //析构函数中释放动态创建的空间

};

};

class Vector//结构同矩阵

{

private:

int *p;

int len;

public:

Vector(int n)

{

len = n;

p = new int[n];

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

p[i] = 0;

};

friend void Matrix::Multiply(Vector&);//定义友元函数头

void Input()

{

cout<<"输入"<<len<<" 个整数:";

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

cin>>p[i];

}

void Display()

{

cout<<"Vector is:"<<endl;

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

{

cout<<setw(4)<<p[i]<<" ";

}

cout<<endl;

};

void operator[](int index) //[]操作符重载

{cout<<p[index]<<endl;};

void add(Vector& v) //加法

{

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

{p[i]=p[i]+v.p[i];}

cout<<"向量

的和为:"<<endl;

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

{

cout<<setw(4)<<p[i]<<" ";

}

cout<<endl;

}

int finddex(int x) //查找序号

{int t;

t=p[x];

return t;}

int findnum(int num) //查找内容

{for (int i=0;i<len;i

++)

{if (p[i]==num)

{return i;break;}

else

return -1;}}

void sort() //排序

{for (int i=0;i<len-1;i++)

for (int j=1;j<len-i;j++)

{

if(p[i]>p[i+j])

{int temp=p[i];

p[i]=p[i+j];

p[i+j]=temp;}

}}

~Vector()

{

delete [] p;

};

};

void Matrix::Multiply(Vector &v)

{

int *r = new int[len];

int i, j;

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

{

r[i] = 0;

}

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

{

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

{

r[i] += p[i * len + j] * v.p[j]; //因为在Vector中定义该函数为友元函数所以可以访问v中的私有成员p

}

}

cout<<"乘积为:"<<endl;

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

{

cout<<setw(4)<<r[i]<<" ";

}

cout<<endl;

delete [] r;

};

void main(void)

{

int n;

cout<<"输入维数:";//输入维数

cin>>n;

Matrix m(n),a(n);//根据维数创建矩阵

Vector v(n),b(n);//根据维数创建向量

cout<<"输入第一个矩阵-->";

m.Input();//输入矩阵m

cout<<"输入第二个矩阵-->";

a.Input();//输入矩阵a

cout<<"输入第一个向量->";

v.Input();//输入向量v

cout<<"输入第二个向量->";

b.Input();//输入向量b

cout<<"第一个矩阵";

m.Display();//显示输入矩阵

cout<<"第二个矩阵";

a.Display();

cout<<"第一个向量";

v.Display();//显示输入向量

cout<<"第二个向量";

b.Display();

cout<<"第一个矩阵和第一个向量的积>>";

m.Multiply(v);//计算乘积,并显示结果

m.add(a);

v.add(b);

cout<<"用重载输出第一个矩阵第一个元素>>";

m[0];//测试[]重载

cout<<"用重载输出第一个向量第一个元素>>";

v[0];//测试[]重载

int t=m.finddex(1);//测试查找

cout<<"第一个矩阵序号为1的内容为:"<<t<<endl;

t=m.findnum(2); //测试查找

cout<<"第一个矩阵内容为2的首序号为:"<<t<<endl;

t=v.finddex(0) ; //测试查找

cout<<"第一个向量第一个数内容为:"<<t<<endl;

t=v.findnum(2) ; //测试查找

cout<<"第一个向量内容为2的首序号为:"<<t<<endl;

m.sort();//测试排序

v.sort();//测试排序

cout<<"第一个矩阵升序为->";

m.Display();

cout<<"第

一个向量升序为->";

v.Display();

}


相关文章

  • 线路零序电流保护整定计算方法
  • 线路零序电流保护整定计算方法 摘要: 提出了线路零序电流保护整定计算程序需要解决的几个主要问 题,包括运行方式变化由支路追加修改节点阻抗矩阵的计算方法.线路 零序互感耦合分析计算.线路非全相运行零序电流分析计算和零序电流 保护范围计算等:并 ...查看


  • 运用MATLAB解决复杂化学方程式配平问题
  • 运用MATLAB 解决复杂化学方程式配平问题 [摘要]到生产实际中化学反应复杂.涉及方程个数较多时,即矩阵阶数较高时,可利用 MATLAB 这一数学软件来轻松解决.本文根据化学反应方程式配平的基本原则,通过建立由原子种类.电荷数.配平系数组 ...查看


  • 二维人脸识别实验报告
  • 实 验 报 告 课程名称 人工智能 实验名称 班 级 学 号 姓 名 成 绩 指导教师 实验日期 一.实验目的 (1)通过本次人脸识别实验,进一步加深图像处理和基本算法的掌握,能利用已有的算法和程序去找出和识别人脸. (2)通过本次人脸识别 ...查看


  • MC方法模拟理想气体分子麦克斯韦速率分布律
  • 东北石油大学 课 程 设 计 2014年 3月 14日 东北石油大学课程设计任务书 课程 计算物理和MATLAB 课程设计 题目 MC 方法模拟理想气体分子的麦克斯韦速率分布 专业 应物 姓名 学号主要内容.基本要求.主要参考资料等 主要内 ...查看


  • 房屋测绘专业毕业论文
  • 远程与继续教育学院 本科毕业论文(设计) 题目:<控制测量简易平差程序设计> 学习中心: 浙江分院 学 号: 姓 名: 专 业: 指导教师: 2014 年 3 月 5 日 中国地质大学(武汉)远程与继续教育学院 本科毕业论文(设 ...查看


  • 线性方程组的数值解法
  • <大学数学实验>作业 线性方程组的数值解法 班级: 姓名: 学号: 日期: 目录 目录 ...................................................................... ...查看


  • 机器学习理论篇1:机器学习的数学基础
  • 一.概述 我们知道,机器学习的特点就是:以计算机为工具和平台,以数据为研究对象,以学习方法为中心:是概率论.线性代数.数值计算.信息论.最优化理论和计算机科学等多个领域的交叉学科.所以本文就先介绍一下机器学习涉及到的一些最常用的的数学知识. ...查看


  • 基于ADC模型的通信网络效能评估方法研究
  • 基于ADC 模型的通信网络效能评估方法研究 摘 要: 针对通信网络性能指标多.效能评估困难的问题,提出了基于ADC 模型的效能评估方法,并采用可视化的方法实现.模型选取可用性行向量.可信赖性矩阵和通信保障能力作为关键指标,能够充分体现通信网 ...查看


  • 电力电子变换器主电路拓扑辨识型_马皓
  • DOI:10.13334/j.0258-8013.pcsee.2006.06.010 第26卷 第6期 2006年3月 中 国 电 机 工 程 学 报 Proceedings of the CSEE V ol.26 No.6 Mar. 20 ...查看


热门内容