![]() |
#2
一枚废柴2014-06-09 20:53
修改之后为
#include<iostream> #include<cmath> const int k=7; const int l=5; using namespace std; class Distance { private: double D[k][l]; public: Distance(double x[k][l]); void C_distance(double dis[l-1][l]); void getdistance(double dis[l-1][l]); }; class Gdistance:public Distance { private: double D[k][l]; public: Gdistance(double x[k][l]); void C_gdistance(double gdis[l-1][l]); void getgdistance(double gdis[l-1][l]); }; /******************************************* ********功能:给D[k][l]赋值 ********************************************/ Distance::Distance(double x[k][l]) { int i,j; for(i=0;i<k;i++) { for(j=0;j<l;j++) { D[i][j]=x[i][j]; } } } /******************************************* ********功能:d[k][l]的欧式距离的计算 *******************************************/ void Distance::C_distance(double dis[l-1][l]) { int n; int i,j; double s,m; for(j=0;j<l-1;j++) { for(n=j+1;n<l;n++) { s=0; m=0; for(i=0;i<k;i++) { m=D[i][j]-D[i][n]; s+=m*m; } dis[j][n]=sqrt(s); } } } /******************************************* ********功能:欧式距离的输出 *******************************************/ void Distance::getdistance(double dis[l-1][l]) { int i,j; for (i=0;i<l-1;i++) { for(j=0;j<l;j++) { cout<<"第"<<i+1<<"列和第"<<j+1<<"列的欧氏距离:"<<dis[i][j]<<endl; } } } /******************************************* ********功能:给D[k][l]赋值 ********************************************/ Gdistance::Gdistance(double x[k][l]) { int i,j; for(i=0;i<k;i++) { for(j=0;j<l;j++) { D[i][j]=x[i][j]; } } } /******************************************* ********功能: 求最小值m ********参数: 数组d[k][l] ********返回值:最小值m *******************************************/ double getm(double d[k][l]) { double m=-1; double tmp=0; int i,j; int n; for(j=0;j<l-1;j++) { for(n=j+1;n<l;n++) { for(i=0;i<k;i++) { tmp=d[i][j]-d[i][n]; if(tmp<0) { tmp=-tmp; } if(-1 == m) { m=tmp; } else if(tmp<m) { m=tmp; } } } } return m; } /******************************************* ********功能: 求最大值M ********参数: 数组d[k][l] ********返回值:最大值M *******************************************/ double getM(double d[k][l]) { double M=-1; double tmp=0; int i,j; int n; for(j=0;j<l-1;j++) { for(n=j+1;n<l;n++) { for(i=0;i<k;i++) { tmp=d[i][j]-d[i][n]; if(tmp<0) { tmp=-tmp; } if(-1 == M) { M=tmp; } else if(tmp>M) { M=tmp; } } } } return M; } /******************************************* ********功能:计算矩阵的灰色距离 *******************************************/ void Gdistance::C_gdistance(double gdis[l-1][l]) { double getm(double d[k][l]); double getM(double d[k][l]); double m,M,tmp,s; m=getm(D); M=getM(D); double A=m+0.5*M; int i,j; int n; for(j=0;j<l-1;j++) { for(n=j+1;n<l;n++) { s=0; gdis[j][n]=0; for(i=0;i<k;i++) { tmp=D[i][j]-D[i][n]; if(tmp<0) { tmp=-tmp; } s+=A/(tmp+0.5*M); } gdis[j][n]=s/k; } } } /******************************************* ********功能:矩阵灰式距离的输出 *******************************************/ void Gdistance::getgdistance(double gdis[l-1][l]) { int i,j; for (i=0;i<l-1;i++) { for(j=0;j<l;j++) { cout<<"第"<<i+1<<"列和第"<<j+1<<"列的灰氏距离:"<<gdis[i][j]<<endl; } } } /******************************************* ********功能:键盘输入一个矩阵d[k][l] *******************************************/ void getdouble(double d[k][l]) { cout<<"请输入矩阵:"<<endl; int i,j; for (i=0;i<k;i++) //确定为第i行 { for(j=0;j<l;j++) //输入第i行,第j列的元素 { cin>>d[i][j]; } } } int main() { void getdouble(double d[k][l]); double x[k][l]; double dis[l-1][l],gdis[l-1][l]; getdouble(x); Distance a(x); a.C_distance(dis); a.getdistance(dis); cout<<"*********************************************"<<endl; Gdistance b(x); b.getgdistance(gdis); b.C_gdistance(gdis); return 0; } 错误提示为:E:\c++编程练习\distance.cpp(91) : error C2512: 'Distance' : no appropriate default constructor available 怎么破? ![]() |
#include<iostream>
#include<cmath>
const int k=7;
const int l=5;
using namespace std;
class Distance
{
private:
double D[k][l];
public:
Distance(double x[k][l]);
void C_distance(double dis[l-1][l]);
void getdistance(double dis[l-1][l]);
};
class Gdistance:public Distance
{
private:
double D[k][l];
public:
Gdistance(double x[k][l]);
void C_gdistance(double gdis[l-1][l]);
void getgdistance(double gdis[l-1][l]);
};
/*******************************************
********功能:给D[k][l]赋值
********************************************/
Distance::Distance(double x[k][l])
{
int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<l;j++)
{
D[i][j]=x[i][j];
}
}
}
/*******************************************
********功能:d[k][l]的欧式距离的计算
*******************************************/
void Distance::C_distance(double dis[l-1][l])
{
int n;
int i,j;
double s,m;
for(j=0;j<l-1;j++)
{
for(n=j+1;n<l;n++)
{
s=0;
m=0;
for(i=0;i<k;i++)
{
m=D[i][j]-D[i][n];
s+=m*m;
}
dis[j][n]=sqrt(s);
}
}
}
/*******************************************
********功能:欧式距离的输出
*******************************************/
void Distance::getdistance(double dis[l-1][l])
{
int i,j;
for (i=0;i<l-1;i++)
{
for(j=0;j<l;j++)
{
cout<<"第"<<i+1<<"列和第"<<j+1<<"列的欧氏距离:"<<dis[i][j]<<endl;
}
}
}
/*******************************************
********功能:给D[k][l]赋值
********************************************/
Gdistance::Gdistance(double x[k][l])
{
int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<l;j++)
{
D[i][j]=x[i][j];
}
}
}
/*******************************************
********功能: 求最小值m
********参数: 数组d[k][l]
********返回值:最小值m
*******************************************/
double getm(double d[k][l])
{
double m=-1;
double tmp=0;
int i,j;
int n;
for(j=0;j<l-1;j++)
{
for(n=j+1;n<l;n++)
{
for(i=0;i<k;i++)
{
tmp=d[i][j]-d[i][n];
if(tmp<0)
{
tmp=-tmp;
}
if(-1 == m)
{
m=tmp;
}
else if(tmp<m)
{
m=tmp;
}
}
}
}
return m;
}
/*******************************************
********功能: 求最大值M
********参数: 数组d[k][l]
********返回值:最大值M
*******************************************/
double getM(double d[k][l])
{
double M=-1;
double tmp=0;
int i,j;
int n;
for(j=0;j<l-1;j++)
{
for(n=j+1;n<l;n++)
{
for(i=0;i<k;i++)
{
tmp=d[i][j]-d[i][n];
if(tmp<0)
{
tmp=-tmp;
}
if(-1 == M)
{
M=tmp;
}
else if(tmp>M)
{
M=tmp;
}
}
}
}
return M;
}
/*******************************************
********功能:计算矩阵的灰色距离
*******************************************/
void Gdistance::C_gdistance(double gdis[l-1][l])
{
double getm(double d[k][l]);
double getM(double d[k][l]);
double m,M,tmp,s;
m=getm(D);
M=getM(D);
double A=m+0.5*M;
int i,j;
int n;
for(j=0;j<l-1;j++)
{
for(n=j+1;n<l;n++)
{
s=0;
gdis[j][n]=0;
for(i=0;i<k;i++)
{
tmp=D[i][j]-D[i][n];
if(tmp<0)
{
tmp=-tmp;
}
s+=A/(tmp+0.5*M);
}
gdis[j][n]=s/k;
}
}
}
/*******************************************
********功能:矩阵灰式距离的输出
*******************************************/
void Gdistance::getgdistance(double gdis[l-1][l])
{
int i,j;
for (i=0;i<l-1;i++)
{
for(j=0;j<l;j++)
{
cout<<"第"<<i+1<<"列和第"<<j+1<<"列的灰氏距离:"<<gdis[i][j]<<endl;
}
}
}
/*******************************************
********功能:键盘输入一个矩阵d[k][l]
*******************************************/
void getdouble(double d[k][l])
{
cout<<"请输入矩阵:"<<endl;
int i,j;
for (i=0;i<k;i++) //确定为第i行
{
for(j=0;j<l;j++) //输入第i行,第j列的元素
{
cin>>d[i][j];
}
}
}
int main()
{
void getdouble(double d[k][l]);
double x[k][l];
double dis[l-1][l],gdis[l-1][l];
getdouble(x);
Distance a;
a.C_distance(dis);
a.getdistance(dis);
cout<<"*********************************************"<<endl;
Gdistance b;
b.getgdistance(gdis);
b.C_gdistance(gdis);
return 0;
}