Bài tập tính diện tích n tam giác từ độ dài 3*n cạnh nhập vào

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

bool is_triangle(double a, double b, double c) {
    if (a == b && a > (c / 2) || c == b && c > (a / 2) || a == c && a > (b / 2)) return 1;
    if ((a + b) <= c) return 0;
    if ((a + c) <= b) return 0;
    if ((b + c) <= a) return 0;
    return 1;
}

int main() {
    int n;
    double s[100] , S, e, d, a, b, c;
    cin >> n;
    for (int i = 1; i <= (n * 3); i += 3) {
        cin >> s[i] >> s[i + 1] >> s[i + 2];
    }
    for (int i = 1; i <= (n * 3); i += 3) {
        if (is_triangle(s[i], s[i + 1], s[i + 2])) {
            a = s[i];
            b = s[i + 1];
            c = s[i + 2];
            S = ((a)+b + c) / 2;
            e = S * (S - a) * (S - b) * (S - c);
            d = sqrt(e);
            cout << setprecision(10) << d << endl;
        }
        else
            cout << "NOT TRIANGLE" << endl;
    }
    return 0;
}

Có cái Warning C6001 Using uninitialized memory ‘s’. Thì khi em chạy thì mọi thứ vẫn ổn nhưng khi nạp bài thì nó hiện lỗi RUNTIME ERROR nên em nghĩ nó sai ở đây nhưng vẫn không biết sửa như thế nào. Nhờ mọi người chỉ dùm.

a = b = -1.0 :slight_smile:

Còn biến s thì không có gì lạ, bạn xem lại yêu cầu output.

4 Likes

Em sẽ sửa phần đó, nhưng em vẫn thắc mắc cái ‘s’ đấy, em có xem cái Warning C6001 đấy nhưng nó bảo là chưa khởi tạo giá trị của biến trong khi nó đã được nhập vào ở vòng for trước đó. Em mới làm quen C++ mấy tháng gần đây nên không có kinh nghiệm lắm, nên mấy cái này em không rõ lắm. Nên anh có thể nói rõ hơn được không

runtime error gì mới được :V nếu nó báo mảng s chưa khởi tạo thì em cứ khởi tạo nó cho trình dịch nó vừa lòng mặc dù chả cần :V double s[100] = {0}

có thể lỗi runtime error là lấy căn của số âm sqrt(e), vì hàm ktra is_triangle chưa đúng đó :V

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