用类来解决该c++问题!急急~~~
下面所有程序必须使用类来实现,构造函数、显示函数、修改函数、析构函数是每个程序必须具备的基本函数。函数必须注意输入数据的有效型,如矩阵的下标不能越界等,必须在程序的书写中...
下面所有程序必须使用类来实现,构造函数、显示函数、修改函数、析构函数是每个程序必须具备的基本函数。函数必须注意输入数据的有效型,如矩阵的下标不能越界等,必须在程序的书写中时刻注意 注:源程序(关键代码、函数要添加注释)
7.定义一个矩阵类,要求能存储矩阵的值,矩阵维数,矩阵的行列数(如果是多维的,则存储更多,最高4维),能够实现的功能如下:求取矩阵上以任意点为中心的大小为3*3,4*4的块的中值(即中位数,对于总个数不为奇数的情况,取中间两个数的均值)。
如以下两种情况:
(1)矩阵
0 2 0
4 5 3
0 1 0
中共有9个数字,中位数应该为排序后的第5位数字,排序以后的值为0,0,0,0,1,2,3,4,5,其第五位数字为1,所以其中值为1。
(2)矩阵
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
中共有16个数字,中位数应为排序后的第8、9位数字的均值,排序以后的值为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,其第8、9位数字为分别为8和9,均值为8.5,所以其中值为8.5。
写原代码!! 展开
7.定义一个矩阵类,要求能存储矩阵的值,矩阵维数,矩阵的行列数(如果是多维的,则存储更多,最高4维),能够实现的功能如下:求取矩阵上以任意点为中心的大小为3*3,4*4的块的中值(即中位数,对于总个数不为奇数的情况,取中间两个数的均值)。
如以下两种情况:
(1)矩阵
0 2 0
4 5 3
0 1 0
中共有9个数字,中位数应该为排序后的第5位数字,排序以后的值为0,0,0,0,1,2,3,4,5,其第五位数字为1,所以其中值为1。
(2)矩阵
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
中共有16个数字,中位数应为排序后的第8、9位数字的均值,排序以后的值为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,其第8、9位数字为分别为8和9,均值为8.5,所以其中值为8.5。
写原代码!! 展开
2个回答
展开全部
这个没人结贴???
4*4的模板没有对称的中心元素吧,那给定任意一个元素位置它的4*4块怎么取?
3*3的如下,你当做参考,不合适的话再改改吧~
#include<iostream>
#include <iomanip>
using namespace std;
int y3[]={-1,0,1,-1,0,1,-1,0,1};//中心元素的列偏移
int x3[]={ -1,-1,-1, 0,0,0, 1,1,1};//中心元素的行偏移
class matrix
{
private:
int line;//行数
int row;//列数
int **mat;//存储二维矩阵
public:
matrix(int line,int row);//构造
~matrix();//析构
void inite();//矩阵初始化
void median();//求中值
void show();//输出
};
matrix::matrix(int line,int row)
{
this->line = line;
this->row = row;
}
matrix::~matrix()
{
int i;
for(i=0;i<line;i++)
delete mat[i];
delete [] mat;
}
void matrix:: inite()//初始化矩阵
{
int i,j;
mat = new int * [line];
for(i=0;i<line;i++)
mat[i] = new int [row];
cout<<"请输入矩阵的元素:\n";
for(i=0;i<line;i++)
for(j=0;j<row;j++)
cin>>*(*(mat+i)+j);
}
void matrix::median()//中值
{
int x,y;
int i,j,k;
cout<<"请输入所求中值的中心元素坐标(x,y) 0=<x<line,0=<y<row"<<endl;
cin>>x>>y;
if(x+1>=row||y+1>=line||x-1<0||y-1<0||x+1>=line||y+1>=row)//判断是否存在以此点为中心的3*3模板
{
cout<<"x,y输入错误,不存在以此点为中心的3X3模板"<<endl;
median();
}
else
{
cout<<"输入矩阵的以mat["<<x<<","<<y<<"]="<<mat[x][y]<<"为中心的3x3数据为:\n";
for(i=0;i<9;i++)
{
cout<<setw(4)<<mat[x+x3[i]][y+y3[i]];
if((i+1)%3 == 0)
cout<<endl;
}
for(i=0,j=0;i<5&&j<5;i++,j++)//3*3的模板中值需要五次排序
for(k=i+1;k<9;k++)
if(mat[x+x3[i]][y+y3[j]]>mat[x+x3[k]][y+y3[k]])
{
int tem=mat[x+x3[i]][y+y3[j]];
mat[x+x3[i]][y+y3[j]]=mat[x+x3[k]][y+y3[k]];
mat[x+x3[k]][y+y3[k]]=tem;
}
cout<<"其中值为:"<<mat[x][y]<<endl;
}
}
void matrix::show()//输出
{
int i,j;
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
cout<<setw(4)<<mat[i][j];
cout<<endl;
}
}
int main()
{
int line ,row;
cout<<"请输入矩阵的行数:\n";
cin>>line;
cout<<"请输入矩阵的列数:\n";
cin>>row;
matrix m(line,row);
m.inite();
m.show();
m.median();
return 0;
}
4*4的模板没有对称的中心元素吧,那给定任意一个元素位置它的4*4块怎么取?
3*3的如下,你当做参考,不合适的话再改改吧~
#include<iostream>
#include <iomanip>
using namespace std;
int y3[]={-1,0,1,-1,0,1,-1,0,1};//中心元素的列偏移
int x3[]={ -1,-1,-1, 0,0,0, 1,1,1};//中心元素的行偏移
class matrix
{
private:
int line;//行数
int row;//列数
int **mat;//存储二维矩阵
public:
matrix(int line,int row);//构造
~matrix();//析构
void inite();//矩阵初始化
void median();//求中值
void show();//输出
};
matrix::matrix(int line,int row)
{
this->line = line;
this->row = row;
}
matrix::~matrix()
{
int i;
for(i=0;i<line;i++)
delete mat[i];
delete [] mat;
}
void matrix:: inite()//初始化矩阵
{
int i,j;
mat = new int * [line];
for(i=0;i<line;i++)
mat[i] = new int [row];
cout<<"请输入矩阵的元素:\n";
for(i=0;i<line;i++)
for(j=0;j<row;j++)
cin>>*(*(mat+i)+j);
}
void matrix::median()//中值
{
int x,y;
int i,j,k;
cout<<"请输入所求中值的中心元素坐标(x,y) 0=<x<line,0=<y<row"<<endl;
cin>>x>>y;
if(x+1>=row||y+1>=line||x-1<0||y-1<0||x+1>=line||y+1>=row)//判断是否存在以此点为中心的3*3模板
{
cout<<"x,y输入错误,不存在以此点为中心的3X3模板"<<endl;
median();
}
else
{
cout<<"输入矩阵的以mat["<<x<<","<<y<<"]="<<mat[x][y]<<"为中心的3x3数据为:\n";
for(i=0;i<9;i++)
{
cout<<setw(4)<<mat[x+x3[i]][y+y3[i]];
if((i+1)%3 == 0)
cout<<endl;
}
for(i=0,j=0;i<5&&j<5;i++,j++)//3*3的模板中值需要五次排序
for(k=i+1;k<9;k++)
if(mat[x+x3[i]][y+y3[j]]>mat[x+x3[k]][y+y3[k]])
{
int tem=mat[x+x3[i]][y+y3[j]];
mat[x+x3[i]][y+y3[j]]=mat[x+x3[k]][y+y3[k]];
mat[x+x3[k]][y+y3[k]]=tem;
}
cout<<"其中值为:"<<mat[x][y]<<endl;
}
}
void matrix::show()//输出
{
int i,j;
for(i=0;i<line;i++)
{
for(j=0;j<row;j++)
cout<<setw(4)<<mat[i][j];
cout<<endl;
}
}
int main()
{
int line ,row;
cout<<"请输入矩阵的行数:\n";
cin>>line;
cout<<"请输入矩阵的列数:\n";
cin>>row;
matrix m(line,row);
m.inite();
m.show();
m.median();
return 0;
}
展开全部
7.定义一个矩阵类,要求能存储矩阵的值,矩阵维数,矩阵的行列数(如果是多维的,则存储更多,最高4维),能够实现的功能如下:求取矩阵上以任意点为中心的大小为3*3,4*4的块的中值(即中位数,对于总个数不为奇数的情况,取中间两个数的均值)。
如以下两种情况:
(1)矩阵
0 2 0
4 5 3
0 1 0
中共有9个数字,中位数应该为排序后的第5位数字,排序以后的值为0,0,0,0,1,2,3,4,5,其第五位数字为1,所以其中值为1。
(2)矩阵
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
中共有16个数字,中位数应为排序后的第8、9位数字的均值,排序以后的值为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,其第8、9位数字为分别为8和9,均值为8.5,所以其中值为8.5。
写原代码!!
如以下两种情况:
(1)矩阵
0 2 0
4 5 3
0 1 0
中共有9个数字,中位数应该为排序后的第5位数字,排序以后的值为0,0,0,0,1,2,3,4,5,其第五位数字为1,所以其中值为1。
(2)矩阵
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
中共有16个数字,中位数应为排序后的第8、9位数字的均值,排序以后的值为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,其第8、9位数字为分别为8和9,均值为8.5,所以其中值为8.5。
写原代码!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询