第六週任務四與五之

頭文件:

shengming.h

class CPoint
{
private:

	double x;  // 橫座標

	double y;  // 縱座標

public:

	CPoint(double xx=0,double yy=0);

	double Distance(CPoint p) const;   // 兩點之間的距離(一點是當前點,另一點爲參數p)

	double Distance0() 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);//

	double perimeter(void);//計算三角形的周長

	double area(void);//計算並返回三角形的面積

	bool isRightTriangle(); //是否爲直角三角形

	bool isIsoscelesTriangle(); //是否爲等腰三角

private:

	CPoint A,B,C; //三頂點
};

成員函數的聲明文件
CPoint.cpp
#include<iostream>

#include<cmath>

#include"shengming.h"

using namespace std;

CPoint::CPoint(double xx,double yy):x(xx),y(yy){}

// 兩點之間的距離(一點是當前點,另一點爲參數p)
double CPoint::Distance(CPoint p) const
{
	return(sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y)));
}




triangle.cpp

#include<iostream>

#include<cmath>

#include"shengming.h"

using namespace std;

void CTriangle::setTriangle(CPoint &X,CPoint &Y,CPoint &Z)//
{
	A = X;

	B = Y;
	 
	C = Z;
}
//計算三角形的周長
double CTriangle::perimeter(void)
{
	double a,b,c;

	a = B.Distance(C);

	b = A.Distance(C);

	c = A.Distance(B);

	return(a + b + c);
}
//計算並返回三角形的面積
double CTriangle::area(void)
{
	double a,b,c,s;

	a = B.Distance(C);

	b = A.Distance(C);

	c = A.Distance(B);

	s = (a + b + c) / 2;

	return(sqrt((s - a) *(s - b) * (s - c) * s));
}
//是否爲直角三角形
bool CTriangle::isRightTriangle() 
{
	double a,b,c;

	a = B.Distance(C);

	b = A.Distance(C);

	c = A.Distance(B);

	if(abs(a * a + b * b - c * c) < 1e-6 || abs(a * a + c * c - b * b) < 1e-6 ||abs(c * c + b * b - a * a) < 1e-6)
	{
		return true;
	}
	else 
	{
		return false;
	}
}

//是否爲等腰三角形
bool CTriangle::isIsoscelesTriangle() 
{
	double a,b,c;

	a = B.Distance(C);

	b = A.Distance(C);

	c = A.Distance(B);

	if(abs(a + b - c) < 1e-6 || abs(a + c - b) < 1e-6 ||abs(c + b - a) < 1e-6)
	{
		return true;
	}
	else 
	{
		return false;
	}
}
主函數main.cpp

/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生 
* All rights reserved.
* 文件名稱: 三角形類                          
* 作    者: 114-3 張宗佳                            
* 完成日期: 2012 年 3  月 28 日
* 版 本 號: vc.n      

* 對任務及求解方法的描述部分
* 輸入描述:設計一個三角形類,能夠輸入三角形的三個頂點,
* 問題描述:(1)這個問題需要用到兩個類,頂點類參照任務3中的CPoint類; 
            (2)三角形類參考下面CTriangle類的聲明;
            (3)充分利用CPoint類中已有的代碼實現;
            (4)關於三條邊的處理,可以增加三個私有屬性,在初始化時求出來備用,也可以在需要時計算得到。
* 程序輸出:求出其面積、周長,並判斷其是否爲直角三角形和等腰三角形。
* 程序頭部的註釋結束
*/
#include<iostream>

#include"shengming.h"

//#include"CPoint.cpp"

//#include"triangle.cpp"

using namespace std;

void main()
{
	CTriangle Tri1(CPoint(0,3),CPoint(3,0),CPoint(0,0));

	cout << "此三角形的周長是:" << Tri1.perimeter() << endl;

	cout << "此三角形的面積是:" << Tri1.area() << endl;

	cout << "此三角形" << (Tri1.isRightTriangle()?"是":"不是") << "直角三角形" << endl;

	cout << "此三角形" << (Tri1.isIsoscelesTriangle()?"是":"不是") << "等腰三角形" << endl;

	system("pause");

	return;
}
實驗結果:

經驗積累:

1.在寫源文件的時候,一定不要忘記將其他要用到的文件包含進去

2.由於double是浮點型,不精確,在判斷直角三角形和等腰三角形時不能用a*a+b*b-c*c==0來計算,而可以用絕對值小於10的-6次方,可以認爲是true

上機感言:

這次任務有點難啊.....有一些看不懂了,主要是不知道怎麼運用...不過老師講過之後明白了,像以對象作爲成員函數的參數等等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章