/*
* Copyright (c) 2011, 煙臺大學計算機學院
* All rights reserved.
* 作 者:王靜
* 完成日期:2013 年 4 月 9 日
* 版 本 號:v1.0
* 輸入描述:
* 問題描述:設計一個三角形類,能夠輸入三角形的三個頂點,求出其面積、周長,
並判斷其是否爲直角三角形和等腰三角形。
* 程序輸出:
* 問題分析:
* 算法設計:略
*/
#include <iostream>
#include <cmath>
using namespace std;
class CPoint
{private:
int x; // 橫座標
int y; // 縱座標
public:
void input(int a=0,int b=0); //以x,y 形式輸入座標點
float Distance(CPoint p);
};
void CPoint::input(int a,int b)
{
x=a;
y=b;
}
float CPoint::Distance(CPoint p)
{
float d;
d=sqrt((x-p.x)*(x-p.x)+(y-p.y)*(y-p.y));
return d;
}
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 isTriangle();
bool isRightTriangle(); //是否爲直角三角形
bool isIsoscelesTriangle(); //是否爲等腰三角形
private:
CPoint A,B,C; //三頂點
};
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)
{
A=X;B=Y;C=Z;
}
float CTriangle::perimeter(void)//計算三角形的周長
{
float aDis,bDis,cDis;
float l;
aDis=A.Distance(B);
bDis=B.Distance(C);
cDis=C.Distance(A);
l=aDis+bDis+cDis;
return l;
}
float CTriangle::area(void)//計算並返回三角形的面積
{
float aDis,bDis,cDis;
float a,l;
aDis=A.Distance(B);
bDis=B.Distance(C);
cDis=C.Distance(A);
l=aDis+bDis+cDis;
a=sqrt(l*(l-aDis)*(l-bDis)*(l-cDis));
return a;
}
bool CTriangle::isTriangle()
{
float aDis,bDis,cDis;
aDis=A.Distance(B);
bDis=B.Distance(C);
cDis=C.Distance(A);
if(aDis<bDis+cDis&&bDis<aDis+cDis&&cDis<aDis+bDis&&
aDis>bDis-cDis&&bDis>aDis-cDis&&cDis>aDis-bDis){
cout<<"可構成三角形"<<endl;
return true;
}else{
cout<<"不能構成三角形"<<endl;
return false;}
}
bool CTriangle::isRightTriangle() //是否爲直角三角形
{
float aDis2,bDis2,cDis2;
aDis2=A.Distance(B)*A.Distance(B);
bDis2=B.Distance(C)*B.Distance(C);
cDis2=C.Distance(A)*C.Distance(A);
if(aDis2==bDis2+cDis2||bDis2==aDis2+cDis2||cDis2==aDis2+bDis2){
cout<<"是直角三角形"<<endl;
return true;
}else{
cout<<"不是直角三角形"<<endl;
return false;}
}
bool CTriangle::isIsoscelesTriangle()//是否爲等腰三角形
{
float aDis,bDis,cDis;
aDis=A.Distance(B);
bDis=B.Distance(C);
cDis=C.Distance(A);
if(aDis==bDis||aDis==cDis||bDis==cDis){
cout<<"是等腰三角形"<<endl;
return true;
}else{
cout<<"不是等腰三角形"<<endl;
return false;}
}
int main()
{
CPoint X,Y,Z;
X.input(2,4);
Y.input(4,7);
Z.input(5,9);
CTriangle s=CTriangle(X,Y,Z);
s.setTriangle(X,Y,Z);
s.isTriangle();
cout<<"三角形的周長爲"<<s.perimeter()<<endl;//計算三角形的周長
cout<<"三角形的面積爲"<<s.area()<<endl;//計算並返回三角形的面積
s.isRightTriangle(); //是否爲直角三角形
s.isIsoscelesTriangle(); //是否爲等腰三角形
return 0;
}
運行結果:
(貼圖)
心得體會: