程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 2013第六周上機任務[項目4 三角形類]

2013第六周上機任務[項目4 三角形類]

編輯:C++入門知識

[cpp] 
/* 
* Copyright (c) 2013, 煙台大學計算機學院                     
* All rights reserved.                     
* 文件名稱:test.cpp                     
* 作者:樊露露                    
* 完成日期:2013 年 4 月 8 日                     
* 版本號:v1.0                   
*                     
* 輸入描述:無                     
* 問題描述:                  
* 程序輸出:
 * 問題分析:                    
* 算法設計:略                     
*/          
#include<iostream>  
#include<Cmath>  
using namespace std; 
 
//點類  
class CPoint   
{   
private:   
    double x;  // 橫坐標     
    double y;  // 縱坐標     
public:   
    CPoint(double xx=0,double yy=0);   
    double distance(CPoint p) const;   // 兩點之間的距離     
    void input();  //以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::CPoint(double xx,double yy){ 
    x=xx; 
    y=yy; 

 
void CPoint::input(){ 
     
    char ch;   
    cout<<"請輸入坐標點(格式x,y ):";   
    while(1)   
    {   
        cin>>x>>ch>>y;   
        if (ch==',') break;   
        cout<<"輸入的數據格式不符合規范,請重新輸入\n";   
    }     

 
double CPoint::distance(CPoint p) const{ 
    return sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y)); 

 
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z){ 
    cout<<"輸入三角形的三點:"; 
    X.input();A=X; 
    Y.input();B=Y; 
    Z.input();C=Z; 

float CTriangle::perimeter(void){ 
    float a,b,c; 
    a=B.distance(C); 
    b=A.distance(C); 
    c=A.distance(B); 
    return a+b+c; 

float CTriangle::area(void){ 
    double a=B.distance(C),b=C.distance(A),c=A.distance(B);   
    double s = (a+b+c/2);   
    return sqrt(s*(s-a)*(s-b)*(s-c));   

 
bool CTriangle::isRightTriangle()//是否為直角三角形  

  double a=B.distance(C),b=C.distance(A),c=A.distance(B); 
  double max=a; 
  if(b>max) max=b; 
  if(c>max) max=c; 
  if(((max==a)&&(abs(a*a-b*b-c*c)<1e-7))||((max==b)&&(abs(b*b-a*a-c*c)<1e-7))||((max==c)&&(abs(c*c-b*b-a*a)<1e-7))) 
    return true; 
  else 
    return false; 

bool CTriangle::isIsoscelesTriangle() //是否為等腰三角形  

  double a=B.distance(C),b=C.distance(A),c=A.distance(B); 
  if((abs(a-b)<1e-7)||(abs(b-c)<1e-7)||(abs(c-a)<1e-7)) 
    return true; 
  else 
    return false; 

 
int main()   
{   
    CPoint X,Y,Z;   
    CTriangle Tri1(X,Y,Z);//定義三角形類的一個實例(對象)  
    Tri1.setTriangle( X, Y, Z); 
    cout<<"該三角形的周長為:"<<Tri1.perimeter()<<",面積為:"<<Tri1.area()<<endl<<endl;   
    cout<<"該三角形"<<(Tri1.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;   
    cout<<"該三角形"<<(Tri1.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;   
    return 0;   
}   

/*
* Copyright (c) 2013, 煙台大學計算機學院                    
* All rights reserved.                    
* 文件名稱:test.cpp                    
* 作者:樊露露                   
* 完成日期:2013 年 4 月 8 日                    
* 版本號:v1.0                  
*                    
* 輸入描述:無                    
* 問題描述:                 
* 程序輸出:
 * 問題分析:                   
* 算法設計:略                    
*/        
#include<iostream>
#include<Cmath>
using namespace std;

//點類
class CPoint 

private: 
 double x;  // 橫坐標  
 double y;  // 縱坐標  
public: 
 CPoint(double xx=0,double yy=0); 
 double distance(CPoint p) const;   // 兩點之間的距離  
 void input();  //以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::CPoint(double xx,double yy){
 x=xx;
 y=yy;
}

void CPoint::input(){
 
 char ch; 
 cout<<"請輸入坐標點(格式x,y ):"; 
 while(1) 
 { 
  cin>>x>>ch>>y; 
  if (ch==',') break; 
  cout<<"輸入的數據格式不符合規范,請重新輸入\n"; 
 }   
}

double CPoint::distance(CPoint p) const{
 return sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
}

void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z){
 cout<<"輸入三角形的三點:";
 X.input();A=X;
 Y.input();B=Y;
 Z.input();C=Z;
}
float CTriangle::perimeter(void){
 float a,b,c;
 a=B.distance(C);
 b=A.distance(C);
 c=A.distance(B);
 return a+b+c;
}
float CTriangle::area(void){
 double a=B.distance(C),b=C.distance(A),c=A.distance(B); 
 double s = (a+b+c/2); 
 return sqrt(s*(s-a)*(s-b)*(s-c)); 
}

bool CTriangle::isRightTriangle()//是否為直角三角形
{
  double a=B.distance(C),b=C.distance(A),c=A.distance(B);
  double max=a;
  if(b>max) max=b;
  if(c>max) max=c;
  if(((max==a)&&(abs(a*a-b*b-c*c)<1e-7))||((max==b)&&(abs(b*b-a*a-c*c)<1e-7))||((max==c)&&(abs(c*c-b*b-a*a)<1e-7)))
    return true;
  else
    return false;
}
bool CTriangle::isIsoscelesTriangle() //是否為等腰三角形
{
  double a=B.distance(C),b=C.distance(A),c=A.distance(B);
  if((abs(a-b)<1e-7)||(abs(b-c)<1e-7)||(abs(c-a)<1e-7))
    return true;
  else
    return false;
}

int main() 

    CPoint X,Y,Z; 
 CTriangle Tri1(X,Y,Z);//定義三角形類的一個實例(對象)
 Tri1.setTriangle( X, Y, Z);
 cout<<"該三角形的周長為:"<<Tri1.perimeter()<<",面積為:"<<Tri1.area()<<endl<<endl; 
    cout<<"該三角形"<<(Tri1.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl; 
    cout<<"該三角形"<<(Tri1.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl; 
    return 0; 

 \

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved