Giúp sửa lỗi bài tính diện tích tam giác

#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

class Point
{
private:
    float x;
    float y;
public:
    Point();
    Point(float, float);
    void Nhap ();
    float DoDai (Point);
};

class Triangle
{
private:
    Point p1, p2, p3;
public:
    void Nhap();
    void Xuat();
    float DienTich ();
};

Point::Point()
{
    x=0;
    y=0; 
}

Point::Point (float a, float b)
{
    x = a;
    y = b;
}

void Point::Nhap()
{
        cout << "x: ";
        cin >> x;
        cout << "y: ";
        cin >> y;
}

float Point::DoDai (Point p)
{
    return sqrt(pow(x-p.x,2)+pow(y-p.y,2));
}

void Triangle::Nhap()
{
    cout <<"Nhap toa do dinh 1: "<< endl;
    p1.Nhap();
    cout <<"Nhap toa do dinh 2: " << endl;
    p2.Nhap();
    cout <<"Nhap toa do dinh 3: " << endl;
    p3.Nhap();
}

float Triangle::DienTich ()
{
    float a, b, c, p, s;
    a = p1.DoDai(p2);
    b = p2.DoDai(p3);
    c = p3.DoDai(p1);
    p = (a+b+c)/2;
    s = sqrt(p*(p-a)*(p-b)*(p-c));
    return s;
}

void main()
{
    Triangle n,s;
    n.Nhap();
    cout << s.DienTich();
    getch();
}

Tại sao mình in ra DT bằng 0 không ạ?
E muốn tạo hàm tạo cho cho class Triangle thì phải làm sao?

3 Likes

Đã cấp cứu lên FB, không biết có cao nhân nào vào giúp không :frowning:

3 Likes

Bài này mình cũng từng làm qua.

Theo mình là kiểu trả về là Double phần hàm Float dientich bạn sửa lại là Double dientich nhé

3 Likes

, Nhập n, mà tính diện tích s. :smile:

5 Likes

Anh @ltd trông hiền lành thế mà cũng troll thành viên. Thật thất vọng :’(

3 Likes

@ndth: triangle n có DienTich là một phương thức của nó (đúng ra có thể gọi là một thuộc tính). Tức là triangle n đã bao gồm diện tích, chu vi, các cạnh, các tính chất định lí,… Vấn đề của bạn là chưa hiểu bản chất của hướng đối tượng.

3 Likes

Mình đúng là vẫn chưa hiểu rõ phần này lắm. Bạn có thể giải thích kĩ cho mình hơn chút đc k? Vì thật chất bài này là tìm diện tích lớn nhất. Nhưng cái này là mình tự code lại thành bài dễ hơn mà ai dè… :frowning:

2 Likes

Hịc. S a k ra tay giải thích e hiểu với. :smile:

1 Like

Tại e chưa hiểu rõ bản chất của hướng đối tượng là ntn e đã sửa lại và nó ra r số không phải là 0 r :smirk:. Mà e muốn tạo hàm tạo cho cho class Triangle thì phải làm sao?

1 Like
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

class Point
{
private:
    double x;
    double y;
public:
    Point();
    Point(double, double);
    void Nhap ();
    double DoDai (Point);
};

class Triangle
{
private:
    Point p1, p2, p3;
public:
    void Nhap();
    void Xuat();
    double DienTich ();
};

Point::Point()
{
    x=0;
    y=0; 
}

Point::Point (double a, double b)
{
    x = a;
    y = b;
}

void Point::Nhap()
{
        cout << "x: ";
        cin >> x;
        cout << "y: ";
        cin >> y;
}

double Point::DoDai (Point p)
{
    return sqrt(pow(x-p.x,2)+pow(y-p.y,2));
}

void Triangle::Nhap()
{
    cout <<"Nhap toa do dinh 1: "<< endl;
    p1.Nhap();
    cout <<"Nhap toa do dinh 2: " << endl;
    p2.Nhap();
    cout <<"Nhap toa do dinh 3: " << endl;
    p3.Nhap();
}

double Triangle::DienTich ()
{
    double a, b, c, p, s;
    a = p1.DoDai(p2);
    b = p2.DoDai(p3);
    c = p3.DoDai(p1);
    p = (a+b+c)/2;
    s = sqrt(p*(p-a)*(p-b)*(p-c));
    return s;
}

void main()
{
    Triangle s;
    s.Nhap();
    cout << s.DienTich();
    getch();
}

1 Like

Em cứ nhớ hàm khởi tạo có tên trùng với tên claas, không có giá trị trả về, có thể có tham số hoặc k có.

class Triangle
{
private:
	Point p1, p2, p3;
public:
	Triangle();
	void Nhap();
	void Xuat();
	float DienTich();
};

 Triangle:: Triangle()
{
	 p1 = Point(0, 0);
	 p2 = Point(0, 0);
	 p3 = Point(0, 0);
}
1 Like

A có thể ví dụ cho e bài này k? Phần nhóm tạo hủy đó. E chỉ biết Khởi tạo mặc định bằng 0 thôi. Còn phần sau e không hiểu phải làm sao nữa.

1 Like

E thử dùng xem, có j bất ổn khôg :smile:

class PhanSo
{
private:
    int _tu, _mau;
public:

    PhanSo(int tu, int mau);
    PhanSo(int n);
    PhanSo(const PhanSo &x);
};

PhanSo::PhanSo(int tu, int mau)
{
    _tu = tu;
    _mau = mau;
}

PhanSo::PhanSo(int n)
{
    _tu = n;
    _mau = 1;
}

PhanSo::PhanSo(const PhanSo &a)
{
    _tu = a._tu;
    _mau = a._mau;
}
3 Likes

Dạ. Cám ơn a nha :star::star::star:

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