| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 895 人关注过本帖
标题:[求助]不明白
只看楼主 加入收藏
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
 问题点数:0 回复次数:6 
[求助]不明白

程序没错误 ,但是运行不正确!请大家帮看一下!谢谢啦!
#include <iostream>
#include<cmath>
using namespace std;
#define size 20
class Base
{public: virtual void area()=0;
};

class triangle:public Base
{private: int la,lb,lc;
float s;
public:triangle(int a,int b,int c){la=a;lb=b;lb=c;}

void area(){int n=(la+lb+lc)/2;
cout<<"Èý½ÇÐεÄÃæ»ýÊÇ:"<<endl;
s=sqrt(n*(n-la)*(n-lb)*(n-lc));}


};
class rectangle:public Base
{private: int length,width;
float s;
public:
rectangle(int a,int b){length=a;width=b;}
void area(){;
cout <<"¾ØÐεÄÃæ»ýÊÇ:"<<endl;
s=length*width;
}
};
class circle :public Base
{private: int radius;
float s;
public :
circle(int n){radius=n;}
void area(){
cout <<"Ô²ÐεÄÃæ»ýÊÇ:"<<endl;
s=3.14*radius*radius;
}
};
void main()
{
int a1,a2,a3,a4,a5,a6;
Base *a[size];
for (int i=0;i<size;i++)
{
int c=int(rand()*2+1);

switch(c)
{case 1:
cout<<"ÇëÊäÈëÈý¸ö±ß:"<<endl;
cin>>a1;
cin>>a2;
cin>>a3;
a[i]=new triangle(a1,a2,a3);
break;
case 2:
cout<<"ÇëÊäÈëÁ½¸ö±ß:"<<endl;
cin>>a4;
cin>>a5;
a[i]=new rectangle (a4,a5);
break;
case 3:
cout<<"ÇëÊäÈë°ë¾¶:"<<endl;
cin>>a6;
a[i]=new circle(a6);
break;
}
}

for( i=0;i<size;i++)
a[i]->area();
for( i=0;i<size;i++)
delete a[i];

}

搜索更多相关主题的帖子: triangle private include public 
2006-10-31 13:18
a402730324
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:1233
专家分:0
注 册:2005-12-1
收藏
得分:0 

#include <iostream>
#include<cmath>
using namespace std;
#define size 20
class Base
{public: virtual void area()=0;
};

class triangle:public Base
{private: int la,lb,lc;
float s;
public:triangle(int a,int b,int c){la=a;lb=b;lb=c;}

void area(){int n=(la+lb+lc)/2;
cout<<"Èý½ÇÐεÄÃæ»ýÊÇ:"<<endl;
s=sqrt(n*(n-la)*(n-lb)*(n-lc));}


};
class rectangle:public Base
{private: int length,width;
float s;
public:
rectangle(int a,int b){length=a;width=b;}
void area(){;
cout <<"¾ØÐεÄÃæ»ýÊÇ:"<<endl;
s=length*width;
}
};
class circle :public Base
{private: int radius;
float s;
public :
circle(int n){radius=n;}
void area(){
cout <<"Ô²ÐεÄÃæ»ýÊÇ:"<<endl;
s=3.14*radius*radius;
}
};
void main()
{
int a1,a2,a3,a4,a5,a6;
Base *a[size];
for (int i=0;i<size;i++)
{
int c=int(rand()*2+1);//我觉得问题是出在这个rand()了,这里用随机的不好吧。

switch(c)
{case 1:
cout<<"ÇëÊäÈëÈý¸ö±ß:"<<endl;
cin>>a1;
cin>>a2;
cin>>a3;
a[i]=new triangle(a1,a2,a3);
break;
case 2:
cout<<"ÇëÊäÈëÁ½¸ö±ß:"<<endl;
cin>>a4;
cin>>a5;
a[i]=new rectangle (a4,a5);
break;
case 3:
cout<<"ÇëÊäÈë°ë¾¶:"<<endl;
cin>>a6;
a[i]=new circle(a6);
break;
}
}

for( i=0;i<size;i++)
a[i]->area();
for( i=0;i<size;i++)
delete a[i];

}


敢犯强汉者,虽远必诛!——陈汤 不知吾辈何时方能吐出此豪言壮语?
2006-10-31 14:35
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
那里不正确
说明确点

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-10-31 15:00
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
得分:0 

题目要求要用随机产生对象我就想到用switch()语句模拟!
在运行时出错!

2006-10-31 17:26
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
#include <iostream>
#include <cmath>
#include <time.h>

using namespace std;

class point
{
private:
int _x;
int _y;
public:
point (int a,int b){_x=a;_y=b;}

int x()const{return _x;}
int y()const{return _y;}
};

class Base
{
public:
virtual double area()=0;
};

class triangle:public Base
{
private:
point _p1,_p2,_p3;
double _area;
public:
triangle(const point& a,const point& b,const point& c):_p1(a),_p2(b),_p3(c){}

double area()
{
double m1=sqrt(static_cast<double>((_p1.x()-_p2.x())*(_p1.x()-_p2.x())+(_p1.y()-_p2.y())*(_p1.y()-_p2.y())));
double m2=sqrt(static_cast<double>((_p1.x()-_p3.x())*(_p1.x()-_p3.x())+(_p1.y()-_p3.y())*(_p1.y()-_p3.y())));
double m3=sqrt(static_cast<double>((_p2.x()-_p3.x())*(_p2.x()-_p3.x())+(_p2.y()-_p3.y())*(_p2.y()-_p3.y())));
double n=(m1+m2+m3)/2;
return _area=sqrt(static_cast<double>(n*(n-m1)*(n-m2)*(n-m3)));
}
};

class rectangle:public Base
{
private:
point _p1,_p2;
double _area;
public:
rectangle(const point& a,const point& b):_p1(a),_p2(b){}

double area()
{
int a=_p1.x()-_p2.x();
int b=_p1.y()-_p2.y();
return _area=a*b;
}
};

class circle :public Base
{
private:
int _radius;
double _area;

public :
circle(int n){_radius=n;}

double area()
{
return _area=3.14*_radius*_radius;
}
};

int main()
{
srand( (unsigned)time( NULL ) );//设置随即种子

const int size=20;//调试时可以减小缩短输入时间

Base* a[size];//存储各种形状对象的指针,建议改用vector

for(int i=0;i<size;++i)
{
int x1,x2,x3,y1,y2,y3;
switch(rand()%3+1)
{
case 1:
{
cout<<"请输入三角形的三个顶点横纵坐标,第一个:";
cin>>x1;
cin>>y1;
cout<<"第二个:";
cin>>x2;
cin>>y2;
cout<<"第三个:";
cin>>x3;
cin>>y3;
a[i]=new triangle(point(x1,y1),point(x2,y2),point(x3,y3));
break;
}
case 2:
{
cout<<"请输入矩形的对角顶点横纵坐标,左上角:";
cin>>x1;
cin>>y1;
cout<<"右下角:";
cin>>x2;
cin>>y2;
a[i]=new rectangle(point(x1,y1),point(x2,y2));
break;
}
case 3:
{
cout<<"请输入圆形的半径:";
cin>>x1;
a[i]=new circle(x1);
break;
}
default:
break;
}
}

cout<<"它们的面积分别是:\n";
for(int i=0;i<size;++i)
cout<<a[i]->area()<<endl;

//释放a[]的内存
for(int i=0;i<size;++i)
delete a[i];
}

这是我改的程序

你的随机数产生方式不正确,rand()返回0和RAND_MAX之间的任意整数,要想产生1到3之间的随机整数用rand()%3+1

2006-10-31 17:40
litcatyx
Rank: 1
等 级:新手上路
威 望:1
帖 子:151
专家分:0
注 册:2006-10-27
收藏
得分:0 
RAND_MAX在win32中定义为0x7fff,也就是32767

2006-10-31 17:41
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
得分:0 

经过大家的帮忙 已经能正确运行了。谢谢大家了!

2006-10-31 18:51
快速回复:[求助]不明白
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037288 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved