Lỗi tính diện tích tam giác C++

Khi em nhập 3 cạnh a, b, c vào là 2, 3, 4 thì hàm kiemtra báo là tam giác thường là đúng nhưng khi tính diện tích nó lại tính diện tích tam giác đều ạ.Em không biết vì sao ai có thể giúp em với ạ.

#include <iostream>
#include <math.h>
using namespace std;
class triangle {
private:
	float a, b, c;
public:
	void Input() {
		cout << "Nhap 3 canh cua tam giac" << endl;
		cout << "Canh a :";
		cin >> a;
		cout << "Canh b :";
		cin >> b;
		cout << "Canh c :";
		cin >> c;
	}
	void KiemTra() {
		int flag;
		if ((a == b) && (b == c) && (c == a)) {
			flag = 0;
			cout << "Day la tam giac deu" << endl;
		}	
		else if ((a + b > c) || (a + c > b) || (b + c > a)) {
			flag = 1;
			cout << "Day la tam giac thuong" << endl;
		}
	}
	float TamGiacDeu() {
		float S;
			S = pow(a, 2) * sqrt(3)/4;
		return S;
	}
	float TamGiacThuong() {
		float S, P;
			P = (a + b + c) / 2;
			S = sqrt(P * (P - a) * (P - b) * (P - c));
		return S;
	}
};
int main() {
	int flag = 0;
	triangle T;
	T.Input();
	T.KiemTra();
	if (flag == 0) {
		cout <<"Dien tich tam giac deu :"<< T.TamGiacDeu();
	}
	if (flag == 1) {
		cout << "Dien tich tam giac thuong :" << T.TamGiacThuong();
	}
	return 0;
}

biến flag là local nên không thể thay đổi sau khi check tam giác được

ở hàm kiểm tra nên return biến flag ra. ở main thì sửa lại thành

flag = T.KiemTra();

Mà không nên để flag mặc định là tam giác đều. Lí do 1 tam giác đều là 1 tam giác thường còn 1 tam giác thường chưa chắc là tam giác đều

6 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?