Code kiểm tra 3 điểm tạo thành tam giác bị sai

Em đang viết 1 chương trình nhập vào tọa độ của 3 điểm , sau do se tu toa do 3 diem se tinh ra cac duong thanh a, b, c tạo thành từ 3 điểm đó
Sau đó sẽ nhận biết xem 3 đoạn thẳng đó có tạo thành tam giác hhay không, nếu đúng thì tính chu vi. Nếu sai sẽ in ra không tính toán được.
Có 1 trường hợp em bị sai không biết lý do nhờ mọi người và anh đạt giúp đỡ

Do em đang học ở Nhật nên chương trình có vài chỗ khi in ra viết bằng tiếng nhật mong người thông cảm!

#include<stdio.h>
#include<math.h>
struct point
{
    double x;
    double y;
};
double tinh_chu_vi(struct point toa_do[3]);
double tinh_chu_vi(struct point toa_do[3])
{
    double a, b, c, z; // canh a , canh b, canh c 

    a = sqrt((toa_do[1].x - toa_do[0].x) * (toa_do[1].x - toa_do[0].x) +
                  (toa_do[1].y - toa_do[0].y) * (toa_do[1].y - toa_do[0].y));   // tu toa do nhap vao tinh thanh canh a

    b = sqrt((toa_do[2].x - toa_do[0].x) *(toa_do[2].x - toa_do[0].x) +
            (toa_do[2].y -toa_do[0].y) *(toa_do[2].y - toa_do[0].y));         // tu toa donhap vao tinh thanh canh a

    c =sqrt((toa_do[2].x - toa_do[1].x) *(toa_do[2].x - toa_do[1].x) +
            (toa_do[2].y -toa_do[1].y) *(toa_do[2].y - toa_do[1].y));       // tu toa do nhap vao tinh thanh canh a
              
                        if((a + b > c) || (a + c > b) || (b + c > a))     // dieu kien de xac nhan 3 diem tao thanh 1 tam giac 
            {

            z=a+b+c; // chu vi cua tam giac tao thanh tu 3 diem 
            return z;
            }

            else 
            {
             
            return  -1;
            }
}
            

 int main(void)
 {


 int  i;
 double chuvi;
 struct point toa_do[3];
 printf("XY座標面上の任意の3点を入力してください\n");
 for(i=0; i<3; i++){   // nhap vao 3 diem 
     printf("%d点目\n", i+1);
     printf("X座標:");
     scanf("%lf", &toa_do[i].x);


     printf("Y座標:");
     scanf("%lf", &toa_do[i].y);

 }
 chuvi=tinh_chu_vi(toa_do);   // ket qua tinh vi tu tam giac tao thanh tu 3 diem 

if(chuvi > 0){
 printf("三角形の周囲は %.6fです\n", chuvi); 
}
else if(chuvi == -1)
{
    printf("計算不能\n"); // khong tinh toan duoc 
}

return 0;





 }

Output đúng ra là:

XY座標面上の任意の3点を入力してください
1点目
X座標:0⏎
Y座標:0⏎
2点目
X座標:1⏎
Y座標:1⏎
3点目
X座標:-2⏎
Y座標:-2⏎
計算不能

trường hợp ở trên chương trình chạy bị sai !
Mong mọi người chỉ giáo ạ!

Nếu cho tọa độ thì nên tính 3 vector sẽ ít lỗi hơn hẳn :sweat:

1 Like

Không hiểu ý của bạn lắm !

Không sai đâu, ba điểm thẳng hàng mà :smiley:
v = (1, 1)
u = (3, 3) = 3v
w = (2, 2) = 2v

2 Likes

Không kết quả của mình không ra được điểm đó mà ra kết quả khác
XY座標面上の任意の3点を入力してください
1点目
X座標:0
Y座標:0
2点目
X座標:1
Y座標:1
3点目
X座標:-2
Y座標:-2
三角形の周囲は 8.485281です

Điều kiện phải là && chứ không phải là || :slight_smile:

vd: a = 1 b = 2 c = 4

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