第六周实验 报告(四)

06.#include<iostream>  
07.#include<Cmath>  
08.using namespace std;  
09.  
10.class CPoint  
11.{  
12.private:  
13.    double x;      // 横坐标  
14.    double y;      // 纵坐标  
15.public:  
16.    void input();        //以x,y 形式输入坐标点  
17.    float Distance(CPoint p) const;       // 两点之间的距离(一点是当前点,另一点为参数p)  
18.};  
19.  
20.class CTriangle  
21.{  
22.public:  
23.    CTriangle(CPoint &X,CPoint &Y,CPoint &Z):A(X),B(Y),C(Z){} //给出三点的构造函数  
24.    void setTriangle(CPoint &X,CPoint &Y,CPoint &Z);   //输入三角形点的坐标  
25.    float perimeter(void);              //计算三角形的周长  
26.    float area(void);                   //计算并返回三角形的面积  
27.    bool isRightTriangle();             //是否为直角三角形  
28.    bool isIsoscelesTriangle();         //是否为等腰三角形  
29.private:  
30.    CPoint A,B,C; //三顶点  
31.};  
32.  
33.  
34.  
35.void main()  
36.{  
37.    CPoint c1, c2, c3;  
38.  
39.    c1.input();  
40.  
41.    c2.input();  
42.  
43.    c3.input();  
44.  
45.    CTriangle c(c1, c1, c1);  
46.  
47.    c.setTriangle(c1, c2, c3);  
48.  
49.    cout << "三角形的周长是:" << c.perimeter() << endl;  
50.  
51.    cout << "三角形的面积是:" << c.area() << endl;  
52.  
53.    cout << (c.isRightTriangle()?"是":"不是") << "直角三角形" <<endl;    
54.  
55.    cout << (c.isIsoscelesTriangle()?"是":"不是") << "等腰三角形" <<endl;   
56.  
57.    system("pause");  
58.}  
59.  
60.float CPoint::Distance(CPoint p) const  
61.{  
62.    return sqrt((p.x - x) * (p.x - x) + (p.y - y) * (p.y - y));  
63.}  
64.  
65.void CPoint::input()              //以x,y 形式输入坐标点  
66.{  
67.    char comma;  
68.    cout << "请输入点坐标,格式: x,y" << endl;  
69.      
70.    while(1)  
71.    {  
72.        cin >> x >> comma >> y ;  
73.        if(comma != ',')  
74.        {  
75.            cout << "格式不正确,请重新输入:" << endl;  
76.        }  
77.        else  
78.        {  
79.            break;  
80.        }  
81.    }  
82.}  
83.  
84.void CTriangle::setTriangle(CPoint &X, CPoint &Y, CPoint &Z)  
85.{  
86.    float s1 = X.Distance(Y);  
87.  
88.    float s2 = Y.Distance(Z);  
89.  
90.    float s3 = X.Distance(Z);  
91.  
92.    if(s1 + s2 > s3 && s2 + s3 > s1 && s1 + s3 > s2)  
93.    {  
94.        A = X;  
95.  
96.        B = Y;  
97.  
98.        C = Z;  
99.    }  
100.  
101.    else  
102.    {  
103.        cout << "不能构成三角形,退出!" << endl;  
104.        exit(1);  
105.    }  
106.  
107.}  
108.  
109.float CTriangle::perimeter(void)  
110.{  
111.    return (A.Distance(B) + B.Distance(C) + A.Distance(C));  
112.}  
113.  
114.float CTriangle::area(void)  
115.{  
116.    float a = A.Distance(B);  
117.  
118.    float b = B.Distance(C);  
119.  
120.    float c = A.Distance(C);  
121.  
122.    float p = (a + b + c) / 2;    
123.  
124.    return sqrt( p * (p - a) * (p - b) * (p - c) );  
125.}  
126.  
127.bool CTriangle::isRightTriangle()  
128.{  
129.    float a = A.Distance(B);  
130.  
131.    float b = B.Distance(C);  
132.  
133.    float c = A.Distance(C);  
134.  
135.    if(a * a + b * b == c * c || a * a + c * c == b * b || c * c + b * b == a * a)  
136.    {  
137.        return true;  
138.    }  
139.  
140.    else  
141.    {  
142.        return false;  
143.    }  
144.}  
145.  
146.bool CTriangle::isIsoscelesTriangle()  
147.{  
148.    float a = A.Distance(B);  
149.  
150.    float b = B.Distance(C);  
151.  
152.    float c = A.Distance(C);  
153.  
154.    if(a == b || b == c || a == c)  
155.    {  
156.        return true;  
157.    }  
158.  
159.    else  
160.    {  
161.        return false;  
162.    }  
163.}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值