項目四--三角形類

/* 
* 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;
}


運行結果:
(貼圖)


心得體會:

發佈了119 篇原創文章 · 獲贊 0 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章