[cpp]
*
* 程序的版權和版本聲明部分
* Copyright (c)2013, 煙台大學計算機學院學生
* All rightsreserved.
* 文件名稱: object.cpp
.* 作者:楊紹寧
* 完成日期: 2013年 4 月 10 日
* 版本號: v1.0
* 輸入描述:無
* 問題描述:設計三角形類和點類。
* 程序輸出:輸出周長,面積,判斷是否是直角三角形,等腰三角形。
*/
#include <iostream>
#include<Cmath>
using namespace std;
class CPoint
{private:
double x; // 橫坐標
double y; // 縱坐標
public:
CPoint(double xx=0,double yy=0);
void input();
double Distance(CPoint p) const; // 兩點之間的距離(一點是當前點,另一點為參數p)
void output(); //以(x,y) 形式輸出坐標點
};
CPoint::CPoint(double xx,double yy)
{
x=xx;
y=yy;
}
void CPoint::input()
{
char c;
cin>>x>>c>>y;
if(c!=',')
{
cout<<"輸入錯誤,請重新輸入";
exit(0);
}
}
double CPoint::Distance(CPoint p) const // 兩點之間的距離(一點是當前點,另一點為參數p)
{
double s;
s=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
return s;
}
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; //三頂點
};
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)//
{
A=X;
B=Y;
C=Z;
}
float CTriangle::perimeter(void)//計算三角形的周長
{
float a,b,c,l;
a=A.Distance(B);
b=B.Distance(C);
c=C.Distance(A);
l=a+b+c;
return l;
}
float CTriangle::area(void)//計算並返回三角形的面積
{
float a,b,c,p,s;
a=A.Distance(B);
b=B.Distance(C);
c=C.Distance(A);
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
bool CTriangle::isRightTriangle()//是否為直角三角形
{
double a,b,c;
a=A.Distance(B);
b=B.Distance(C);
c=C.Distance(A);
bool prime=false;
if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
{
prime=true;
}
return prime;
}
bool CTriangle::isIsoscelesTriangle() //是否為等腰三角形
{
double a,b,c;
a=A.Distance(B);
b=B.Distance(C);
c=C.Distance(A);
bool prime=false;
if(a==b||a==c||b==c)
{
prime=true;
}
return prime;
}
int main()
{
CPoint x,y,z;
x.input();
y.input();
z.input();
CTriangle tri(x,y,z); //復制構造函數
cout<<"這個三角形的周長為:"<<tri.perimeter()<<",面積為:"<<tri.area()<<endl;
cout<<"這個三角形"<<(tri.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;
cout<<"這個三角形"<<(tri.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;
return 0;
}
/*
* 程序的版權和版本聲明部分
* Copyright (c)2013, 煙台大學計算機學院學生
* All rightsreserved.
* 文件名稱: object.cpp
.* 作者:楊紹寧
* 完成日期: 2013年 4 月 10 日
* 版本號: v1.0
* 輸入描述:無
* 問題描述:設計三角形類和點類。
* 程序輸出:輸出周長,面積,判斷是否是直角三角形,等腰三角形。
*/
#include <iostream>
#include<Cmath>
using namespace std;
class CPoint
{private:
double x; // 橫坐標
double y; // 縱坐標
public:
CPoint(double xx=0,double yy=0);
void input();
double Distance(CPoint p) const; // 兩點之間的距離(一點是當前點,另一點為參數p)
void output(); //以(x,y) 形式輸出坐標點
};
CPoint::CPoint(double xx,double yy)
{
x=xx;
y=yy;
}
void CPoint::input()
{
char c;
cin>>x>>c>>y;
if(c!=',')
{
cout<<"輸入錯誤,請重新輸入";
exit(0);
}
}
double CPoint::Distance(CPoint p) const // 兩點之間的距離(一點是當前點,另一點為參數p)
{
double s;
s=sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
return s;
}
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; //三頂點
};
void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)//
{
A=X;
B=Y;
C=Z;
}
float CTriangle::perimeter(void)//計算三角形的周長
{
float a,b,c,l;
a=A.Distance(B);
b=B.Distance(C);
c=C.Distance(A);
l=a+b+c;
return l;
}
float CTriangle::area(void)//計算並返回三角形的面積
{
float a,b,c,p,s;
a=A.Distance(B);
b=B.Distance(C);
c=C.Distance(A);
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
bool CTriangle::isRightTriangle()//是否為直角三角形
{
double a,b,c;
a=A.Distance(B);
b=B.Distance(C);
c=C.Distance(A);
bool prime=false;
if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
{
prime=true;
}
return prime;
}
bool CTriangle::isIsoscelesTriangle() //是否為等腰三角形
{
double a,b,c;
a=A.Distance(B);
b=B.Distance(C);
c=C.Distance(A);
bool prime=false;
if(a==b||a==c||b==c)
{
prime=true;
}
return prime;
}
int main()
{
CPoint x,y,z;
x.input();
y.input();
z.input();
CTriangle tri(x,y,z); //復制構造函數
cout<<"這個三角形的周長為:"<<tri.perimeter()<<",面積為:"<<tri.area()<<endl;
cout<<"這個三角形"<<(tri.isRightTriangle()?"是":"不是")<<"直角三角形"<<endl;
cout<<"這個三角形"<<(tri.isIsoscelesTriangle()?"是":"不是")<<"等腰三角形"<<endl;
return 0;
}
結果:
感受:定義了兩個類,復制構造函數!!!