Giúp mình với

Chả hiểu sao ở hàm kiểm tra tam giác, trường hợp 2 điểm trùng nhau thì ok nhưng 3 điểm thẳng hàng nó lại k chạy
Mình debug thử thì nó cho qua luôn, k nhảy vào hàm dù đã nhập 3 iX bằng nhau, iY cũng vậy
Mấy bạn giúp mình tìm lỗi với, cảm ơn nhiều!

struct Diem
{
	int iX;
	int iY;
};

class TamGiac
{
private:
	Diem DiemA, DiemB, DiemC;
public:
	TamGiac();
	int KiemTra();
	TamGiac TinhTien();
	friend istream& operator>>(istream &is, TamGiac &a);
	friend ostream& operator<<(ostream &os, TamGiac a);
};


TamGiac::TamGiac()
{
	DiemA.iX = DiemA.iY = 0;
	DiemB.iX = DiemB.iY = 0;
	DiemC.iX = DiemC.iY = 0;
}

int TamGiac::KiemTra()
{
	if((DiemA.iX == DiemB.iX && DiemA.iY == DiemB.iY) || (DiemA.iX == DiemC.iX && DiemA.iY == DiemC.iY) || (DiemC.iX == DiemB.iX && DiemC.iY == DiemB.iY))
		return 0;
	if(DiemA.iX == DiemB.iX == DiemC.iX)
		return 0;
	if(DiemA.iY == DiemB.iY == DiemC.iY)
		return 0;
	return 1;
}

istream& operator>>(istream &is, TamGiac &a)
{
	cout << "
Nhap vao toa do diem A: ";
	cin >> a.DiemA.iX >> a.DiemA.iY;
	cout << "
Nhap vao toa do diem B: ";
	cin >> a.DiemB.iX >> a.DiemB.iY;
	cout << "
Nhap vao toa do diem C: ";
	cin >> a.DiemC.iX >> a.DiemC.iY;
	return is;
}



int main()
{
	TamGiac tg;
	int c;
	do
	{
		cin >> tg;
		c = tg.KiemTra();
		if(c == 0) continue;
		else break;
	}while(1);
	cout << tg;
	tg.TinhTien();
	cout << tg;
	return 0;
}

upppppp :sad:

[QUOTE=12520274;273448]upppppp :sad:[/QUOTE]
sai chỗ này nè bạn: if(DiemA.iX == DiemB.iX == DiemC.iX), if(DiemA.iY == DiemB.iY == DiemC.iY)

bạn thử nhập số 1 hết xem nó có vào không?

còn nữa, điểm (1, 1), (2, 2), (3, 3) có thẳng hàng không ta ?

Code không có tí comment nào cả. Hàm kiểm tra tam giác để làm cái gì vậy em?

[QUOTE=09520109;273474]sai chỗ này nè bạn: if(DiemA.iX == DiemB.iX == DiemC.iX), if(DiemA.iY == DiemB.iY == DiemC.iY)

bạn thử nhập số 1 hết xem nó có vào không?

còn nữa, điểm (1, 1), (2, 2), (3, 3) có thẳng hàng không ta ?[/QUOTE]
mình sửa đc code rồi nhưng h mới phát hiện thêm trường hợp của bạn nói, tks bạn

[QUOTE=truonganpn;273478]Code không có tí comment nào cả. Hàm kiểm tra tam giác để làm cái gì vậy em?[/QUOTE]

Em quên cmt code ^^, em kiểm tra xem trong mặt phẳng tọa độ nó có bị trùng điểm hay là 3 điểm thẳng hàng không ấy thầy

[QUOTE=12520274;273557]Em quên cmt code ^^, em kiểm tra xem trong mặt phẳng tọa độ nó có bị trùng điểm hay là 3 điểm thẳng hàng không ấy thầy[/QUOTE]

Kiểm tra mấy cái này làm gì, sao tên nó lại là kiểm tra tam giác mà vô lại kiểm tra điểm thẳng hàng

Chủ topic đọc lại nguyên tắc post bài trong topic này để tránh bị nhận thẻ phạt nhé.
http://forum.uit.edu.vn/threads/26761

[QUOTE=truonganpn;273578]Kiểm tra mấy cái này làm gì, sao tên nó lại là kiểm tra tam giác mà vô lại kiểm tra điểm thẳng hàng[/QUOTE]
Dạ em đã nhận ra không thể kiểm tra hết được, cảm ơn thầy

[QUOTE=hiepnt;273593]Chủ topic đọc lại nguyên tắc post bài trong topic này để tránh bị nhận thẻ phạt nhé.
http://forum.uit.edu.vn/threads/26761[/QUOTE]
em sẽ rút kinh nghiệm, cảm ơn thầy

Không biết còn cách nào hay hơn không nhưng theo mình để kiểm tra 3 điểm có tạo thành tam giác hay không thì mình sẽ làm những bước sau :

  1. Kiểm tra có điểm nào trung nhau hay không
  2. Nếu không, lập phương trình đường thẳng đi qua 2 điểm đầu
  3. Thế tọa độ điểm còn lại nếu phương trình bằng 0 thì 3 điểm nằm trên đường thẳng và ngược lại 3 điểm tạo thành tam giác
    Dưới đây là đoạn code của mình.

int TamGiac::KiemTra()
{
//Kiểm tra 3 điểm có trùng nhau hay không
if((DiemA.iX == DiemB.iX && DiemA.iY == DiemB.iY) || (DiemA.iX == DiemC.iX && DiemA.iY == DiemC.iY) || (DiemC.iX == DiemB.iX && DiemC.iY == DiemB.iY))
return 0;

//Kiểm tra 3 điểm có nằm trên đường thẳng hay không
//Lập phương trình đường thẳng đi qua 2 điểm A, B
Diem vecCP; //vector chỉ phương
vecCP.iX = DiemA.iX - DiemB.iX;
vecCP.iY = DiemA.iY - DiemB.iY;


Diem vecPT; //vector pháp tuyến : vector nhân với vector chỉ phương bằng 0;
vecPT.iX = -vecCP.iY;
vecPT.iY = vecCP.iX; 


//Nếu điểm C thuộc đường thẳng qua AB thì phương trình tổng quát sẽ bằng 0
int kt = vecPT.iX * (DiemC.iX - DiemA.iX) + vecPT.iY * (DiemC.iY - DiemA.iY);


if(kt == 0) return 0;


return 1;

}

Nếu có sai sót mong mọi người bỏ qua

Dùng bất đẳng thức là xong rồi. Các bạn làm gì tùm lum thế :open_mouth:

:shot: ra là bất đẳng thức tam giác, cảm ơn tất cả mọi người.