01/10/2018, 12:05
Không tìm được lỗi sai
Mình có 2 bài toán, một là của bạn hai là của mình
Không hiểu là một trong hai bài nó sai ở chỗ nào
Nên mình up lên đây để mọi người tìm lỗi giúp mình với
Bài toán: Nhập tọa độ 4 điểm ABCD, kiểm tra xem D có nằm trong tam giác ABC hay không
Bài thứ nhất
#include<iostream>
#include<conio.h>
#include<cmath>
using namespace std;
int main()
{
float xa,xb,xc,xd,ya,yb,yc,yd,ab,ac,bc,ad,bd,cd,s,s1,s2,s3,p;
cout<<"
Nhap toa do cua 4 diem(xa,ya,xb,yb,xc,yc,xd,yd)
";
cin>>xa>>ya>>xb>>yb>>xc>>yc>>xd>>yd;
ab=sqrt(pow((xa-xb),2)+pow((ya-yb),2));
cout<<"
ab = "<<ab;
ac=sqrt(pow((xa-xc),2)+pow((ya-yc),2));
cout<<"
ac= "<<ac;
bc=sqrt(pow((xb-xc),2)+pow((yb-yc),2));
cout<<"
BC = "<<bc;
ad=sqrt(pow((xa-xd),2)+pow((ya-yd),2));
cout<<"
AD = "<<ad;
bd=sqrt(pow((xb-xd),2)+pow((yb-yd),2));
cout<<"
BD = "<<bd;
cd=sqrt(pow((xc-xd),2)+pow((yc-yd),2));
cout<<"
CD = "<<cd;
p=(ab+ac+bc)/2;
s=sqrt(p*(p-ab)*(p-bc)*(p-ac));
cout<<"
s = " <<s;
p=(ad+ac+cd)/2;
s1=sqrt(p*(p-ad)*(p-ac)*(p-cd));
cout<<"
s1 = "<<s1;
p=(ad+ab+bd)/2;
s2=sqrt(p*(p-ad)*(p-ab)*(p-bd));
cout<<"
s2 = "<<s2;
p=(bd+cd+bc)/2;
s3=sqrt(p*(p-bd)*(p-cd)*(p-bc));
cout<<"
s3 = "<<s3;
if(s==(s1+s2+s3)) cout<<"
D thuoc tam giac ABC";
else cout<<"
D khong thuoc tam giac ABC";
getch();
return 0;
}
Bài thứ hai
#include<iostream>
#include<conio.h>
#include<math.h>
using namespace std;
int xA,xB,xC,yA,yB,yC,xD,yD;
float SS,AB,AC,BC,DA,DB,DC,S,S1,S2,S3;
float chieu_dai_canh(int x1,int y1, int x2, int y2){
return (sqrt((pow((x2-x1),2))+(pow((y2-y1),2))));
}
float tinh_dien_tich(float x,float y, float z){
float p;
p=(x+y+z)/2;
return (sqrt(p*(p-x)*(p-y)*(p-z)));
}
main(){
cout<<"nhap toa do diem A, lan luot x:y ";cin>>xA;cin>>yA;
cout<<"nhap toa do diem B, lan luot x:y ";cin>>xB;cin>>yB;
cout<<"nhap toa do diem C, lan luot x:y ";cin>>xC;cin>>yC;
cout<<"nhap toa do diem D, lan luot x:y ";cin>>xD;cin>>yD;
AB=chieu_dai_canh(xA,yA,xB,yB);cout<<"AB ="<<AB;
AC=chieu_dai_canh(xA,yA,xC,yC);cout<<"
AC ="<<AC;
BC=chieu_dai_canh(xB,yB,xC,yC);cout<<"
BC ="<<BC;
DA=chieu_dai_canh(xD,yD,xA,yA);cout<<"
DA ="<<DA;
DB=chieu_dai_canh(xD,yD,xB,yB);cout<<"
DB ="<<DB;
DC=chieu_dai_canh(xD,yD,xC,yC);cout<<"
DC ="<<DC;
// tinh dien tich cua cac tam giac
S=(int)(tinh_dien_tich(AB,AC,BC));cout<<"
S="<<S;
S1=tinh_dien_tich(AB,DB,DA);cout<<"
S1="<<S1;
S2=tinh_dien_tich(BC,DB,DC);cout<<"
S2="<<S2;
S3=tinh_dien_tich(AC,DA,DC);cout<<"
S3="<<S3;
SS=(int)(S1+S2+S3);
if (S==SS) cout<<"
D thuoc tam giac ABC";
else cout<<"
D khong thuoc tam giac ABC";
getch();
}
Cảm ơn các bác các anh chị em và các cô chú nhiều
Bài liên quan
phép tính số thực ko chính xác 100% được. Ví dụ căn(10) + căn(10) làm sao máy tính nó biết là bằng 2*căn(10)? căn(10) + căn(10) ~ 3.162 + 3.162 = 6.324, trong khi 2căn(10) ~ 6.325, vậy thì làm sao so sánh chính xác S == S1 + S2 được?
đổi qua tính gần đúng, ví dụ nếu S1 + S2 + S3 nằm trong khoảng 99.99% - 100.01% S thì coi như là S == S1 + S2 + S3
chuyển tất cả các kiểu
float
qua tínhdouble
hết cho nó chính xác hơn nữa.cảm ơn bác nhé!! em hiểu rồi bác giải thích có tâm quá <3