C++实验03(03)组合类:Triangle类与Point类

题目描述
定义一个平面坐标系下的点类Point,有整型数据成员x,y坐标值。成员函数包括:(1)带默认值的构造函数,默认值均为0;(2)拷贝构造函数;(3)置x,y坐标值;(4)取x,y的坐标值,参数为两个整型量的引用,分别用于获取x,y坐标值。(5)输出函数,用于输出x,y坐标值。(6)求两个点之间距离的函数,参数是Point类的对象引用。
定义一个平面坐标系下的三角形类Triangle,数据成员为三个Point类的对象p1、p2、p3。成员函数包括:(1)带参数的构造函数,参数为整型量x1,y1,x2,y2,x3,y3,分别是三角形三个顶点的坐标。(2)带参数的构造函数,参数是三个Point类对象的引用。(3)求三角形周长。(4)求三角形面积。(5)输出三角形的三个顶点坐标、周长和面积。
定义一个普通函数:判断三个顶点坐标能否构成三角形。
main()中,从键盘输入三个点坐标,判断这三个点能否构成三角形,不能,则提示重新输入,并重新输入点坐标;能,则输出三个顶点坐标、周长和面积。
输入描述
三个点的坐标,如果不能构成三角形,再重新输入三个点的坐标
输出描述
三个顶点坐标
三角形周长、三角形面积
输入样例
0 0
1 1
2 2

0 0
5 6
3 0
输出样例
顶点坐标不正确,不能构成三角形!请重新输入坐标!
三角形三个顶点坐标为:
(0,0) (5,6) (3,0)
三角形周长为:17.1348,面积为:9

#include<iostream>
#include<cmath>
using namespace std;
class Point
{
public:
	Point(int a=0,int b=0)
	{
		x=a;
		y=b;
	}
	Point(const Point &a)//拷贝构造函数
	{
		x=a.x;
		y=a.y;
	}
	void input()
	{
		cin>>x>>y;
	}
	int getx(int &x)
	{
		return x;
	}
	int gety(int &y)
	{
		return y;
	}
	void output()
	{
		cout<<"("<<x<<","<<y<<")";
	}
	double distance(Point &a)
	{
		double dx=x-a.x,dy=y-a.y;
		return sqrt(dx*dx+dy*dy);
	}
private:
	int x,y;
};
class Triangle
{
public:
	Triangle(int x1,int y1,int x2,int y2,int x3,int y3)
	{
		A=(x1,y1);
		B=(x2,y2);
		C=(x3,y3);
	}
	Triangle(Point &a,Point &b,Point &c)
	{
		A=a;
		B=b;
		C=c;
	}
	double Len()
	{
		return A.distance(B)+B.distance(C)+C.distance(A);
	}
	double Area()
	{
		double s=Len()/2.0;
		return sqrt(s*(s-A.distance(B))*(s-B.distance(C))*(s-C.distance(A)));
	}
	void output()
	{	
		cout<<endl<<"三角形周长为:"<<Len()<<",面积为:"<<Area();
	}
private:
	Point A,B,C;
};
bool ifTriangle(Point &p1,Point &p2,Point &p3)
{	
	here:
	if((p1.distance(p2)+p2.distance(p3)>p3.distance(p1))&& (p1.distance(p2) + p3.distance(p1) > p2.distance(p3)) && (p2.distance(p3) + p3.distance(p1) > p1.distance(p2)))
	{	
		cout << "三角形三个顶点坐标为:" << endl;
		p1.output();
		p2.output();
		p3.output();
		Triangle T(p1,p2,p3);
		T.output();
	}
	else
	{
		cout << "顶点坐标不正确,不能构成三角形!请重新输入坐标!" << endl;
		return false;
	}
	
}
int main()
{
	Point A,B,C;
	here:
	A.input();
	B.input();
	C.input();
	if (ifTriangle(A, B, C) == false)
	{
		goto here;
	}
	return 0;
}

判断是否是三角形

两边之和大于第三边
或者(两边之差小于第三边)
但是要列出3个
比如
a+b>c&&a+c>b&&b+c>a

if((p1.distance(p2)+p2.distance(p3)>p3.distance(p1))&& (p1.distance(p2) + p3.distance(p1) > p2.distance(p3)) && (p2.distance(p3) + p3.distance(p1) > p1.distance(p2)))
	```
  • 12
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bmNkotc2AECynaY6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值