/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者: 张启立
* 完成日期: 2012 年 3 月 28 日
* 版 本 号:
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述: 设计平面坐标点类,计算两点间的距离,到原点的距离以及关于x轴,y轴,原点对称的点.
* 程序输出:
* 程序头部的注释结束
*/
#include < iostream >
#include < cmath >
using namespace std;
enum SymmetricStyle { axisx, axisy, point };//分别表示按x轴, y轴, 原点对称
class CPoint
{
private:
double x; // 横坐标
double y; // 纵坐标
public:
CPoint ( double xx=0 , double yy=0 ) ;
double Distance ( CPoint p ) const; // 两点之间的距离(一点是当前点,另一点为参数p)
void input ( ); //以x,y 形式输入坐标点
void output ( ); //以(x,y) 形式输出坐标点
};
class CTriangle
{
public:
CTriangle ( CPoint &X, CPoint &Y, CPoint &Z ) : A ( X ), B ( Y ), C ( Z ) {} //给出三点的构造函数
void setTriangle ( CPoint &X, CPoint &Y, CPoint &Z);
double perimeter ( void ) ; //计算三角形的周长
double area ( void ) ; //计算并返回三角形的面积
bool isRightTriangle ( ); //是否为直角三角形
bool isIsoscelesTriangle ( ); //是否为等腰三角形
private:
CPoint A , B , C ; //三顶点
};
CPoint :: CPoint ( double xx, double yy )
{
x = xx;
y = yy;
}
// 两点之间的距离(一点是当前点,另一点为参数p)
double CPoint :: Distance ( CPoint p ) const
{
return sqrt ( ( x - p.x ) * ( x - p.x ) + ( y - p.y ) * ( y - p.y ) );
}
//以x,y 形式输入坐标点
void CPoint :: input ( )
{
char ch ;
while ( 1 )
{
cin >> x >> ch >> y;
if ( ch != ',' )
{
cout << " 你输入的格式错误 " << endl;
}
else
{
break;
}
}
}
void CPoint::output ( )//以(x,y) 形式输出坐标点
{
cout << x <<',' << y << endl;
}
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)
{
A=X;
B=Y;
C=Z;
}
//计算三角形的周长
double CTriangle :: perimeter ( void )
{
double a = A.Distance ( C ),
b = B.Distance ( C ),
c = A.Distance ( B );
return ( a + b + c );
}
//计算并返回三角形的面积
double CTriangle :: area ( void )
{
double a = A . Distance ( C ),
b = B . Distance ( C ) ,
c = A . Distance ( B ) ,
s = ( a + b + c ) / 2 ;
return sqrt ( s * ( s - a ) * ( s - b ) * ( s - c ) );
}
//是否为直角三角形
bool CTriangle :: isRightTriangle ( )
{
double a = A . Distance ( C ),
b = B . Distance ( C ) ,
c = A . Distance ( B ) ;
if ( ( abs ( a * a - b * b - c * c ) < 1e-6 ) || ( abs ( b * b - a * a - c * c ) < 1e-6 ) || ( abs ( c * c -b * b - a * a ) < 1e-6 ) )
{
return true;
}
else
{
return false;
}
}
//是否为等要三角形
bool CTriangle :: isIsoscelesTriangle ( )
{
double a = A . Distance ( C ),
b = B . Distance ( C ),
c = A . Distance ( B );
if ( ( abs ( a * a - b * b - c * c ) < 1e-6 ) || ( abs ( b * b - a * a - c * c ) < 1e-6 ) || ( abs ( c * c -b * b - a * a ) < 1e-6 ) )
{
return true;
}
else
{
return false;
}
}
void main (void )
{
CTriangle Tri1 ( CPoint ( 0 , 0 ) , CPoint ( 0 , 2 ) , CPoint ( 2 , 0 ) );
cout << "该三角形的周长为:" << Tri1 . perimeter ( ) << " ,面积为:" << Tri1 . area ( ) << endl;
cout << "该三角形" << ( Tri1 . isRightTriangle ( ) ? "是" : "不是" ) << "直角三角形" << endl;
cout << "该三角形" << ( Tri1 . isIsoscelesTriangle ( ) ?"是":"不是") << "等腰三角形" << endl;
system ( " pause " );
}
六周任务四
最新推荐文章于 2022-12-12 09:13:35 发布