- 在线时间
- 428 小时
- 最后登录
- 2017-2-22
- 注册时间
- 2011-9-18
- 听众数
- 8
- 收听数
- 0
- 能力
- 20 分
- 体力
- 6079 点
- 威望
- 110 点
- 阅读权限
- 200
- 积分
- 3684
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 759
- 主题
- 60
- 精华
- 0
- 分享
- 0
- 好友
- 40
TA的每日心情 | 开心 2017-2-22 14:21 |
|---|
签到天数: 271 天 [LV.8]以坛为家I
群组: 2014年美赛冲刺培训 群组: 物联网工程师考试 群组: 2013年电工杯B题讨论群 群组: 物联网工程师培训 群组: 2013电工杯A题讨论群组 |
定义一个Shape抽象类,建立一个point类,表示平面中的一个点;建立一个line类,表示平面中的一条线段,内含两个point类的对象;建立triangle类,表示一个三角形,内含三个line类的对象构成一个三角形,确定派生关系,编制相应程序输出相关信息,设计triangle类的成员函数完成三条边是否能构成三角形的检验和三角型面积计算,输出相关信息。! M% S2 P0 a- r: [2 H$ U A
" W) F) \. s; {! a) z4 r& Z2 e; U
#include<iostream>
) x( _8 H, E- W#include<string>- y1 K3 w' i: E' B# ?
#include<math.h>
: N$ C9 N8 @; b% V; gusing namespace std;0 ?9 R" ?" s+ p W
class Shape
" J- K4 Q2 o: u1 v# _7 Z{public:
9 ? v- u, ]/ D2 w9 @2 v5 x$ W};
$ O9 {: Y9 u" H. }4 ]& S aclass Point:public Shape
" @2 S: `0 E0 s4 C9 @0 U3 J B{public:
% F+ @4 O" f& cPoint(float a,float b)
0 r5 ?+ j/ g" M+ Q{x=a;y=b;}
) h# Y# |9 }% i4 d4 D5 D
* h( ~% t9 n7 N8 T7 ^void setPofloat(float a,float b)+ R0 q. a' A( |
{x=a;y=b;}
+ |( A; Y7 S C/ p float x,y;
" } F; K6 R, g$ S}; i9 E5 k/ |) x
class Line* a( i! c) @+ ~- s
{public:
& \& W' w% m& b: x9 j rLine(float a1,float b1,float a2,float b2):% F* c- l' @, b: ]
p1(a1,b1),p2(a2,b2){};; n* |' i+ D! o7 s5 o
$ I4 P- x2 c& B5 Zdouble length()
" y" L# W; m# L k& B; X( c& U{ return (sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y))); }, M2 F3 O3 z, J! Y8 [- h @
void setline(){
. x0 w- j' N: t+ u' M3 t b cin>>p1.x>>p1.y>>p2.x>>p2.y;
* l. y. k- P! z5 D1 _2 p}1 C7 c& r d3 b2 H4 @' O2 D, g* R& h
protected:
7 V' Y; i( A- Z) E) x* }: O! M2 n Point p1,p2;
( Y( Y" }6 s3 @! y};
+ n4 M9 k6 ]0 L& {( l7 |class Triangle
& ~" R$ ~7 \/ t, n6 w3 C{
3 M, r6 \# }& }' B$ V% Spublic:
: I w5 O$ p& L Triangle(float a1,float b1,float a2,float b2, float a3,float b3,float a4,float b4 ,float a5,float b5,float a6,float b6):
! ^. y; v! G$ ~% ]$ } l1(a1,b1,a2,b2), l2(a3,b3,a4,b4) , l3(a5,b5,a6,b6){};
3 y" U: n" x% S- |: j) K. A% t; ]- {) M8 C
float delta(){% D( G1 W2 U5 q$ K0 ?0 W' C
d1=l1.length();
3 |- M }" u4 Z5 ~: f9 [8 l% N d2=l2.length();
9 E. ` J1 f4 Z- h6 l% n d3=l3.length();
* x3 n5 C: Z5 b2 E% {1 F' O l6 H if((d1+d2>d3)&&(d2+d3>d1)&&(d3+d1>d2)) J6 z$ C: q' Q; }' `- V
return 1;- n- C! T2 Z8 H3 r/ M4 z
else6 I. P& d2 P* I9 h
return 0;
6 v/ t9 ~- U) S2 V1 ^ }
- \% _* h: L1 e% `void sett(){5 p# a5 R% f& `5 G7 _8 {
cout<<"输入3条线的6个点的坐标(12个数字)"<<endl;
; ]2 j9 o8 d1 b! k l1.setline();
! k9 Q# A# D! Z- |$ m l2.setline();! Q8 Z) U$ d1 I# Y
l3.setline();+ T0 b& ], w9 S$ e. \
cout<<"3条线的长度分别为:"<<endl;. G( ]. j* u7 u* N9 X
cout<<l1.length()<<", "<<l2.length()<<", "<<l3.length()<<"."<<endl;* ~+ @1 n% S# U! v" ^
try
7 l1 [& w( Z6 z5 {1 r {
# d+ W' J0 S _' V2 V. }, ^1 o double p=(l1.length()+l2.length()+l3.length())/2;8 c, w: i" E N* g: A; Q2 O
if ( (l1.length()+l2.length()<=l3.length()) || (l2.length()+l3.length()<=l1.length()) || (l3.length()+l1.length()<=l2.length()) ) throw l1.length();
5 F$ {4 D7 R+ p0 ?9 }! x+ A: p 4 k5 S3 E ~' U/ g/ P9 x! [
double s=sqrt( p*(p-l1.length()) * (p-l2.length()) *(p-l3.length()) );
h$ t( f& o( W& [8 L/ v! b* q cout<<"三角形的面积:"<<s<<endl;
5 v3 n2 D6 Q0 `, t }. p# u; f$ a+ o7 G: B
( J6 ]; u; B# Z0 ]3 l catch (double)" G# k# n. h( {8 V1 B1 _& q
{cout<<"经过异常处理,发现您所输入的坐标构成的3条线段长度不满足三角形";5 Q/ ^( I/ {4 ?
}; m) i/ T7 b8 i: h- P' s# V
}//sett(): ]5 w8 K5 g3 v: h* }4 M
protected:
$ C' [& o0 [( t9 @ Line l1,l2,l3;
6 y2 f |* L0 b0 E6 [% d9 C! N* a float d1,d2,d3;
* B" o7 F" P* ~( {};0 h4 X+ q- S% ~& v+ \+ J' u
int main()( \9 k2 ]% @! { L! g9 n: W8 x# T
{+ \+ t/ j+ ?& x# `( R, Q4 b
Triangle t1(0,0,1,1, 1,2,3,4 , 4,5,6,7);
% o$ Q9 w2 K, Y5 ^# [1 I$ ^1 c' J try {
, P: D" \1 p3 k2 X- d float whether=t1.delta();, Q- `( R# u2 u) F
if(!whether) throw whether;. X4 E# z! b6 b. [8 K3 `
t1.sett();; o# X* t' \! l4 ?3 w7 y! Y
}1 Q) ?% U9 u1 P
catch(float)
* L& x" V+ ~% y- r$ a {cout<<"(0,0)(1,1),(1,2),(3,4),(4,5),(6,7)这几个点不可以构成三角形"<<endl;% x0 ^1 D% J6 X) n" X, p
}
. c+ g z' |$ R2 V return 0;
S/ ?, k, k& t/ v4 k0 D5 f}( P4 d0 L6 f) A( y
|
|