//main.cpp
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: CTriangle.cpp
* 作 者: 计114-3 王兴锋
* 完成日期: 2012年 3 月 26 日
* 版 本 号: V 1.0
* 对任务及求解方法的描述部分
* 输入描述: 输入三角形的三个顶点
* 问题描述:
(1)这个问题需要用到两个类,顶点类参照任务3中的CPoint类;
(2)三角形类参考下面CTriangle类的声明;
(3)充分利用CPoint类中已有的代码实现;
(4)关于三条边的处理,可以增加三个私有属性,在初始化时求出来备用,也可以在需要时计算得到。
* 程序输出: 求出其面积、周长,并判断其是否为直角三角形和等腰三角形。
* 程序头部的注释结束
*/
#include <iostream>
#include <cmath>
#include "class.h"
using namespace std;
int main()
{
CPoint a(0, 0), b(1, 1), c(0, 2);//定义三个点
CTriangle ct(a, b, c);
a.output(), b.output(), c.output();
cout << "构成的三角形:" << endl;
cout << "周长为:" << ct.perimeter() << endl;
cout << "面积为:" << ct.area() << endl;
cout << (ct.isRightTriangle() ? "是" : "不是") << "直角三角形。" << endl;
cout << (ct.isIsoscelesTriangle() ? "是" : "不是") << "等腰三角形。" << endl;
cout << endl;
CPoint a2(0, 0), b2(0, 3), c2(4, 0);//定义三个点
CTriangle ct2(a2, b2, c2);
a2.output(), b2.output(), c2.output();
cout << "构成的三角形:" << endl;
cout << "周长为:" << ct2.perimeter() << endl;
cout << "面积为:" << ct2.area() << endl;
cout << (ct2.isRightTriangle() ? "是" : "不是") << "直角三角形。" << endl;
cout << (ct2.isIsoscelesTriangle() ? "是" : "不是") << "等腰三角形。" << endl;
system("PAUSE");
return 0;
}
//class.h
//点类
class CPoint
{
private:
float x; // 横坐标
float y; // 纵坐标
public:
CPoint(float xx = 0, float yy = 0);
float 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);//
float perimeter(void);//计算三角形的周长
float area(void);//计算并返回三角形的面积
bool isRightTriangle(); //是否为直角三角形
bool isIsoscelesTriangle(); //是否为等腰三角形
private:
CPoint A, B, C; //三顶点
};
//CPoint.cpp
#include <iostream>
#include <cmath>
#include "class.h"
using namespace std;
CPoint::CPoint(float xx, float yy)
{
x = xx, y = yy;
}
float CPoint::Distance(CPoint p) const
{
return sqrt((p.x-x)*(p.x-x) + (p.y-y)*(p.y-y));
}
void CPoint::input()
{
char ch;
do{
cout << "请输入点的坐标(例:x,y):" << endl;
cin >> x >> ch >> y;
}while(ch != ',');
}
void CPoint::output()
{
cout << "(" << x << "," << y << ")";
}
//CTriangle.cpp
#include <iostream>
#include <cmath>
#include "class.h"
using namespace std;
void CTriangle::setTriangle(CPoint &X, CPoint &Y, CPoint &Z)
{
A = X, B = Y, C = Z;
}
float CTriangle::perimeter(void)
{
return (A.Distance(B) + B.Distance(C) + C.Distance(A));
}
float CTriangle::area(void)
{
float AB = A.Distance(B), BC = B.Distance(C), AC = A.Distance(C);
float p = (AB + BC + AC)/2;
return (sqrt(p * (p-AB) * (p-BC) * (p-AC)));
}
bool CTriangle::isRightTriangle()
{
float AB = A.Distance(B), BC = B.Distance(C), AC = A.Distance(C);
return (AB*AB + BC*BC == AC*AC || AB*AB + AC*AC== BC*BC || AC*AC + BC*BC == AB*AB);
}
bool CTriangle::isIsoscelesTriangle()
{
float AB = A.Distance(B), BC = B.Distance(C), AC = A.Distance(C);
return (AB == AC || AB == BC || AC == BC);
}
/*
利用对文件对程序能够进行更好的管理。
*/