Chatbox

Các bạn vui lòng dùng từ ngữ lịch sự và có văn hóa,sử dụng Tiếng Việt có dấu chuẩn. Chúc các bạn vui vẻ!
30/10/2011 07:10 # 1
galaxin
Cấp độ: 3 - Kỹ năng: 1

Kinh nghiệm: 23/30 (77%)
Kĩ năng: 7/10 (70%)
Ngày gia nhập: 14/09/2011
Bài gởi: 53
Được cảm ơn: 7
điều kiện để một điểm nằm trong một tam giác C++


mấy bạn giúp mình bài này với.
đề là viết chương trình nhập vào toạ độ 4 điểm A,B,C,D, xét ba điểm A,B,C có phải là tam giác hay không, là loại tam giác gì, tính diện tích, chu vi và xét điểm D có nằm trong tam giác A,B,C.
đây là bài mình viết thử: chạy thì không thấy lỗi nhưng nó ra không đúng kết quả. mình đã xem lại thuật toán nhiều lần nhưng vẫn không biết chỗ sai.





#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
   clrscr();
   float xa,xb,xc,xd,ya,yb,yc,yd,a,b,c,P,S,p2,e,f,g;
   char tg;
   cout<<"nhap xa:";
   cin>>xa;
   cout<<"nhap ya:";
   cin>>ya;
   cout<<"nhap xb:";
   cin>>xb;
   cout<<"nhap yb:";
   cin>>yb;
   cout<<"nhap xc:";
   cin>>xc;
   cout<<"nhap yc:";
   cin>>yc;
   cout<<"nhap xd:";
   cin>>xd;
   cout<<"nhap yd:";
   cin>>yd;
   a=sqrt(pow((xb-xa),2)+pow((yb-ya),2));
   b=sqrt(pow((xc-xa),2)+pow((yc-ya),2));
   c=sqrt(pow((xc-xb),2)+pow((yc-yb),2));
   if(a+b>c&&a+c>b&&b+c>a)
   {
      P=a+b+c;
      p2=P/2;
      S=sqrt(p2*(p2-a)*(p2-b)*(p2-c));
      cout<<"chu vi:"<<P<<"(dvcv)";
      cout<<"\ndien tich:"<<S<<"(dvdt)\n";
      if(a==c&&a==b)
     cout<<"tam giac deu";
      else
     if(a==b||a==c||b==c)
        cout<<"tam giac can";
     else
        if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b)
           cout<<"tam giac vuong";
        else
           cout<<"tam giac thuong";
      e=((xd-xa)*(yc-ya)-(xc-xa)*(yd-ya));
      f=((xd-xb)*(yb-ya)-(xb-xa)*(yb-ya));
      g=((xd-xc)*(yb-yc)-(xb-xc)*(yd-yc));
      if((e*f)>0&&(e*g)>0)
     cout<<"\nD nam trong tam giac ABC";
      else
     cout<<"\nD khong nam trong tam giac ABC";
   }
   else
      cout<<"khong phai tam giac";


   getch();
}







Thanks ko?                            

ko àk?                                     

lần cuối cho chú đấy!          

 


 
Các thành viên đã Thank galaxin vì Bài viết có ích:
30/10/2011 08:10 # 2
anh2bmw
Cấp độ: 48 - Kỹ năng: 44

Kinh nghiệm: 255/480 (53%)
Kĩ năng: 408/440 (93%)
Ngày gia nhập: 27/11/2009
Bài gởi: 11535
Được cảm ơn: 9868
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


 Hi

Mình còn lưu 1 bài hồi trước mình học đây, ko biết nó có thể giúp gì cho bạn không? :)


//Bài toán xét 3 điểm có phải là 1 tam giác hay không? Xét vị trí tương đối giữa 1 điểm và tam giác đó

#include <stdio.h>
#include <conio.h>
#include <math.h>
typedef struct
{
    
float x;
    
float y;
toado;
float khoangcach(toado a,toado b)
{
    return (
sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2)));
}
void nhaptoado(toadoa)
{
    
printf("Nhap hoanh do x: ");
    
scanf("%f",&a.x);
    
printf("Nhap tung do y: ");
    
scanf("%f",&a.y);
    
printf("\n\n");
}
          
/*vì vector cũng có dạng tọa độ như điểm nên mình
 dùng luôn struct toado thay cho việc phải khai báo struct 
vector.Hàm này tính  tọa độ các vector dựa trên tọa độ 2 điểm.*/
toado vector(toado a,toado b
{                             
    
toado vector;                  
    
vector.x=b.x-a.x;
    
vector.y=b.y-a.y;
    return 
vector;
}
float dinhthuc(toado a,toado b)
{
    return (
a.x*b.y-b.x*a.y);
}
    
void main()
{
    
toado a,b,c,m,am,ac,bm,ba,cm,cb;
    
printf("Nhap toa do diem thu nhat:\n");
    
nhaptoado(a);
    
printf("Nhap toa do diem thu hai:\n");
    
nhaptoado(b);
    
printf("Nhap toa do diem thu ba:\n");
    
nhaptoado(c);
    if (((
khoangcach(a,b)+khoangcach(a,c))>(khoangcach(b,c)))&&
        ((
khoangcach(a,c)+khoangcach(b,c))>(khoangcach(b,a)))&&
        ((
khoangcach(c,b)+khoangcach(a,b))>(khoangcach(a,c))))
    
printf("3 diem la ba canh tam giac\n\n");
    else 
printf("3 diem khong la ba canh tam giac\n\n");


    
printf("Nhap toa do diem thu tu:\n");
    
nhaptoado(m);
    
printf("\n\n");
    
am=vector(a,m);ac=vector(a,c);
    
bm=vector(b,m);ba=vector(b,a);
    
cm=vector(c,m);cb=vector(c,b);
    if (((
dinhthuc(am,ac)>0)&&(dinhthuc(bm,ba)>0)&&(dinhthuc(cm,cb)>0))||
        ((
dinhthuc(am,ac)<0)&&(dinhthuc(bm,ba)<0)&&(dinhthuc(cm,cb)<0)))
        
printf("Diem M(%f , %f ) thuoc tam giac da cho",m.x,m.y);
    else 
printf("Diem M(%f , %f ) khong thuoc tam giac da cho",m.x,m.y);


    
getch();
}  



Thông tin liên hệ anh2bmw khi có bất kỳ thắc mắc:
skype: trantien281
mail: 
anh2bmw@gmail.com


 

 
Các thành viên đã Thank anh2bmw vì Bài viết có ích:
30/10/2011 18:10 # 3
galaxin
Cấp độ: 3 - Kỹ năng: 1

Kinh nghiệm: 23/30 (77%)
Kĩ năng: 7/10 (70%)
Ngày gia nhập: 14/09/2011
Bài gởi: 53
Được cảm ơn: 7
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


cảm ơn sư huynh nhiều, phần này đệ đã sữa chữa đc, với lại mấy cái hàm huynh ghi đệ chưa học, mới học đến phần swicth thôi. chạy thì ra kết quả đúng nhưng nó báo lỗi sqrt: domain error. không bít nó là lỗi gì. chắc do đệ khai báo kiểu dữ liệu long double, nhưng không sài kiểu dữ liệu này thì cái thuật toán xét có phải tam giác không lại sai.
hjxhjx. bó chiếu



Thanks ko?                            

ko àk?                                     

lần cuối cho chú đấy!          

 


 
30/10/2011 20:10 # 4
anh2bmw
Cấp độ: 48 - Kỹ năng: 44

Kinh nghiệm: 255/480 (53%)
Kĩ năng: 408/440 (93%)
Ngày gia nhập: 27/11/2009
Bài gởi: 11535
Được cảm ơn: 9868
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


Trích:
cảm ơn sư huynh nhiều, phần này đệ đã sữa chữa đc, với lại mấy cái hàm huynh ghi đệ chưa học, mới học đến phần swicth thôi. chạy thì ra kết quả đúng nhưng nó báo lỗi sqrt: domain error. không bít nó là lỗi gì. chắc do đệ khai báo kiểu dữ liệu long double, nhưng không sài kiểu dữ liệu này thì cái thuật toán xét có phải tam giác không lại sai.
hjxhjx. bó chiếu
 Bạn chụp lại thuật toán + Lỗi để mọi người biết mà trợ giúp nhé :D nói chung thế ko hình dung được :)


Thông tin liên hệ anh2bmw khi có bất kỳ thắc mắc:
skype: trantien281
mail: 
anh2bmw@gmail.com


 

 
Các thành viên đã Thank anh2bmw vì Bài viết có ích:
31/10/2011 12:10 # 5
galaxin
Cấp độ: 3 - Kỹ năng: 1

Kinh nghiệm: 23/30 (77%)
Kĩ năng: 7/10 (70%)
Ngày gia nhập: 14/09/2011
Bài gởi: 53
Được cảm ơn: 7
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
   clrscr();
   long double xa,xb,xc,xd,ya,yb,yc,yd,a,b,c,P,S,p2,p3,s1,s2,s3,x,y,z;
   cout<<"nhap xa:";   cin>>xa;
   cout<<"nhap ya:";   cin>>ya;
   cout<<"nhap xb:";   cin>>xb;
   cout<<"nhap yb:";   cin>>yb;
   cout<<"nhap xc:";   cin>>xc;
   cout<<"nhap yc:";   cin>>yc;
   cout<<"nhap xd:";   cin>>xd;
   cout<<"nhap yd:";   cin>>yd;
   a=sqrt(pow((xb-xa),2)+pow((yb-ya),2));
   b=sqrt(pow((xc-xa),2)+pow((yc-ya),2));
   c=sqrt(pow((xc-xb),2)+pow((yc-yb),2));
   if(a+b>c&&a+c>b&&b+c>a)
   {
      P=a+b+c;
      p2=P/2;
      S=sqrt(p2*(p2-a)*(p2-b)*(p2-c));
      cout<<"chu vi:"<<P<<"(dvcv)";
      cout<<"\ndien tich:"<<S<<"(dvdt)\n";
      if(a==c&&a==b)
     cout<<"tam giac deu";
      else
     if(a==b||a==c||b==c)
        cout<<"tam giac can";
     else
        if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b)
           cout<<"tam giac vuong";
        else
           cout<<"tam giac thuong";
      x=sqrt(pow((xd-xa),2)+pow((yd-ya),2));
      y=sqrt(pow((xc-xd),2)+pow((yc-yd),2));
      z=sqrt(pow((xd-xb),2)+pow((yd-yb),2));
      p3=(a+x+z)/2;
      s1=sqrt(p3*(p3-a)*(p3-x)*(p3-z));
      p3=(x+y+b)/2;
      s2=sqrt(p3*(p3-x)*(p3-y)*(p3-b));
      p3=(c+x+z)/2;
      s3=sqrt(p3*(p3-c)*(p3-x)*(p3-z));
      if((s1+s2+s3)==S)
     cout<<"\nD nam trong tam giac ABC";
      else
     cout<<"\nD khong nam trong tam giac ABC";
   }
   else
      cout<<"khong phai tam giac";
   getch();
}



đây là bài làm của em khi chạy với một số trường hợp nó hiện lỗi
ex:
nhap xa:1
nhap ya:3
nhap xb:1
nhap yb:1
nhap xc:4
nhap yc:1
nhap xd:2
nhap yd:2
chu vi:........(dvcv)
dien tich........(dvdt)
tam giac vuongsqrt:DOMAIN error
D nam trong tam giac ABC


Thanks ko?                            

ko àk?                                     

lần cuối cho chú đấy!          

 


 
Các thành viên đã Thank galaxin vì Bài viết có ích:
31/10/2011 13:10 # 6
k15cmu
Cấp độ: 23 - Kỹ năng: 24

Kinh nghiệm: 104/230 (45%)
Kĩ năng: 207/240 (86%)
Ngày gia nhập: 05/01/2010
Bài gởi: 2625
Được cảm ơn: 2967
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


đơn giản là nếu đề yêu cầu bạn là xét D nằm trong hay năm ngoài tam giác ABC, thì bạn chỉ cần tính độ dài đoạn thẳng, xét 3 điểm có phải là tam giác hay không, nếu phải thì bạn tính diện tích của 3 tam giác: ABD + ACD + BCD = ABC ==> D nằm trong, nếu khác thì D nằm ngoài.
Công thức thì bạn dùng cách tính điện tích bằng Hêrong. 
Bạn tự edit lại rồi post lên, có gì mình check lại cho. 



Thông tin liên hệ:
Cần hỗ trợ trực tuyến (skype): Phong.D.NGUYEN
Nick yahoo: conspeed_dark1991
Email: herodark191@gmail.com

 
Các thành viên đã Thank k15cmu vì Bài viết có ích:
31/10/2011 15:10 # 7
hoangquytcd2
Cấp độ: 10 - Kỹ năng: 10

Kinh nghiệm: 87/100 (87%)
Kĩ năng: 89/100 (89%)
Ngày gia nhập: 17/10/2010
Bài gởi: 537
Được cảm ơn: 539
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


Bài toán nhìn vào loạn luôn, a,b,c,x,y,z sao không bỏ cạnh cho dễ nhìn. Thầy cô đọc cũng dễ hiểu.
Code của bạn thì nhìn sơ qua thấy cũng hiểu bài. Có điều bạn nhầm lẫn sau đoạn xét tam giác xong
3 tam giác đó hoàn toàn khác nhau nên không thể đặt cùng 1 biến p3, bạn khai báo thêm biến vào và chạy thử nhé .
Chúc bạn thành công



 Hoàng Quý 
Face book: Hoang Quy
FanPage: Flash Mob Đà Nẵng
Thông tin liên lạc:
Sđt:01262797976
Yh/Skype:hoangquytcd2
Mail:hoangquytcd2@gmail.com

 
Các thành viên đã Thank hoangquytcd2 vì Bài viết có ích:
31/10/2011 16:10 # 8
anh2bmw
Cấp độ: 48 - Kỹ năng: 44

Kinh nghiệm: 255/480 (53%)
Kĩ năng: 408/440 (93%)
Ngày gia nhập: 27/11/2009
Bài gởi: 11535
Được cảm ơn: 9868
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


Sai chỗ này: 

p3=(a+x+z)/2;
      s1=sqrt(p3*(p3-a)*(p3-x)*(p3-z));
      p3=(x+y+b)/2;
      s2=sqrt(p3*(p3-x)*(p3-y)*(p3-b));
      p3=(c+x+z)/2;
      s3=sqrt(p3*(p3-c)*(p3-x)*(p3-z));

:)) Đặt tên các biến lại cho chính xác nha.



Thông tin liên hệ anh2bmw khi có bất kỳ thắc mắc:
skype: trantien281
mail: 
anh2bmw@gmail.com


 

 
Các thành viên đã Thank anh2bmw vì Bài viết có ích:
31/10/2011 17:10 # 9
k15cmu
Cấp độ: 23 - Kỹ năng: 24

Kinh nghiệm: 104/230 (45%)
Kĩ năng: 207/240 (86%)
Ngày gia nhập: 05/01/2010
Bài gởi: 2625
Được cảm ơn: 2967
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


- Cái biến P3 của bạn ấy không sai, sau khi tính s1, p3 được gắn cho tính chu vi của s1, sau đó nó lại được gắn giá trị tiếp của s2 và công thức tính s2 chính xác, còn phần s1 thì giữ nguyên vì nó không có vòng lặp, tiếp tục s3 cũng như vậy nó sẽ tính cho s3 chứ không phải lấy cái p3 ở s2 xuống tính. (Nhưng tốt nhất là nên đặt biến khác nhau).
- Bạn nên để ý đơn giản như thế này, bỏ hết toàn bộ code xét tam giác loại gì đi.
- Nên đặt biến lại cho đơn giản, có thể bạn dùng phương thức để gọi cho nó đơn giản.
- Khai báo: float là được rồi.
- Edit lại code, gọi bằng phương thức để tính cho khoẻ....
- ................




Thông tin liên hệ:
Cần hỗ trợ trực tuyến (skype): Phong.D.NGUYEN
Nick yahoo: conspeed_dark1991
Email: herodark191@gmail.com

 
Các thành viên đã Thank k15cmu vì Bài viết có ích:
31/10/2011 17:10 # 10
hoangquytcd2
Cấp độ: 10 - Kỹ năng: 10

Kinh nghiệm: 87/100 (87%)
Kĩ năng: 89/100 (89%)
Ngày gia nhập: 17/10/2010
Bài gởi: 537
Được cảm ơn: 539
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


Trích:
- Cái biến P3 của bạn ấy không sai, sau khi tính s1, p3 được gắn cho tính chu vi của s1, sau đó nó lại được gắn giá trị tiếp của s2 và công thức tính s2 chính xác, còn phần s1 thì giữ nguyên vì nó không có vòng lặp, tiếp tục s3 cũng như vậy nó sẽ tính cho s3 chứ không phải lấy cái p3 ở s2 xuống tính. (Nhưng tốt nhất là nên đặt biến khác nhau).
- Bạn nên để ý đơn giản như thế này, bỏ hết toàn bộ code xét tam giác loại gì đi.
- Nên đặt biến lại cho đơn giản, có thể bạn dùng phương thức để gọi cho nó đơn giản.
- Khai báo: float là được rồi.
- Edit lại code, gọi bằng phương thức để tính cho khoẻ....
- ................

    Anh nhầm rồi, p3 đầu là cv của axz , giờ tính chu vi của tam giác xyb không thể lấy giá trị chu vi của tam giác axz để tính đc.
   Mình phải tính giá trị mới nên phải khai báo biến mới.
   
     x=sqrt(pow((xd-xa),2)+pow((yd-ya),2));
      y=sqrt(pow((xc-xd),2)+pow((yc-yd),2));
      z=sqrt(pow((xd-xb),2)+pow((yd-yb),2));
      p3=(a+x+z)/2; // đây là chu vi của tam giác axz
      s1=sqrt(p3*(p3-a)*(p3-x)*(p3-z));
      p3=(x+y+b)/2; // đây là chu vi của tam giác xyb mình không thể lấy giá trị p3 cv của tam giác axz để xét được.
      s2=sqrt(p3*(p3-x)*(p3-y)*(p3-b));
      p3=(c+x+z)/2;
      s3=sqrt(p3*(p3-c)*(p3-x)*(p3-z));
      if((s1+s2+s3)==S)

 


 Hoàng Quý 
Face book: Hoang Quy
FanPage: Flash Mob Đà Nẵng
Thông tin liên lạc:
Sđt:01262797976
Yh/Skype:hoangquytcd2
Mail:hoangquytcd2@gmail.com

 
31/10/2011 17:10 # 11
k15cmu
Cấp độ: 23 - Kỹ năng: 24

Kinh nghiệm: 104/230 (45%)
Kĩ năng: 207/240 (86%)
Ngày gia nhập: 05/01/2010
Bài gởi: 2625
Được cảm ơn: 2967
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


 p3=(a+x+z)/2; // đây là chu vi của tam giác axz
      s1=sqrt(p3*(p3-a)*(p3-x)*(p3-z));
 p3=(x+y+b)/2; // đây là chu vi của tam giác xyb mình không thể lấy giá trị p3 cv của tam giác axz để xét được.

2 cái không liên quan à nha cái trên là a,x,z. còn cái dưới là x,y,b mà....
---------------------------------------

Cái này dùng gọi phương thức:

float tinhdodai(float a, float b, float c, float d)
{
      return sqrt( pow(c-a,2) + pow(d-b,2) );
}
float tinhdientich(float a, float b, float c)
{
      float p=(a+b+c)/2;
      return sqrt(p*(p-a)*(p-b)*(p-c));
}
 if(ab+ac>bc && ab+bc>ac && ac+bc>ab)
     {
         float Sabc, Sabd, Sbcd, Sacd;
         Sabc=tinhdientich(ab,ac,bc);
         Sabd=tinhdientich(ab,bd,ad);
         Sbcd=tinhdientich(bc,bd,cd);
         Sacd=tinhdientich(ac,ad,cd);
         if(Sabc==Sabd + Sbcd + Sacd)
            cout<<"\n D nam trong tam giac";
         else
            cout<<"\n D nam ngoai tam giac";
     }
     else
        cout<<"\n Vi ba diem A, B, C khong phai la tam giac nen D khong xet duoc";
 
-----------------
Tải file đính kèm tham khảo ha, mình code bằng DevC
File đính kèm Bạn phải đăng nhập mới thấy link download


Thông tin liên hệ:
Cần hỗ trợ trực tuyến (skype): Phong.D.NGUYEN
Nick yahoo: conspeed_dark1991
Email: herodark191@gmail.com

 
Các thành viên đã Thank k15cmu vì Bài viết có ích:
31/10/2011 18:10 # 12
hoangquytcd2
Cấp độ: 10 - Kỹ năng: 10

Kinh nghiệm: 87/100 (87%)
Kĩ năng: 89/100 (89%)
Ngày gia nhập: 17/10/2010
Bài gởi: 537
Được cảm ơn: 539
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


Trích:
 p3=(a+x+z)/2; // đây là chu vi của tam giác axz
      s1=sqrt(p3*(p3-a)*(p3-x)*(p3-z));
 p3=(x+y+b)/2; // đây là chu vi của tam giác xyb mình không thể lấy giá trị p3 cv của tam giác axz để xét được.

2 cái không liên quan à nha cái trên là a,x,z. còn cái dưới là x,y,b mà....
---------------------------------------

Cái này dùng gọi phương thức:

float tinhdodai(float a, float b, float c, float d)
{
      return sqrt( pow(c-a,2) + pow(d-b,2) );
}
float tinhdientich(float a, float b, float c)
{
      float p=(a+b+c)/2;
      return sqrt(p*(p-a)*(p-b)*(p-c));
}
 if(ab+ac>bc && ab+bc>ac && ac+bc>ab)
     {
         float Sabc, Sabd, Sbcd, Sacd;
         Sabc=tinhdientich(ab,ac,bc);
         Sabd=tinhdientich(ab,bd,ad);
         Sbcd=tinhdientich(bc,bd,cd);
         Sacd=tinhdientich(ac,ad,cd);
         if(Sabc==Sabd + Sbcd + Sacd)
            cout<<"\n D nam trong tam giac";
         else
            cout<<"\n D nam ngoai tam giac";
     }
     else
        cout<<"\n Vi ba diem A, B, C khong phai la tam giac nen D khong xet duoc";
 
-----------------
Tải file đính kèm tham khảo ha, mình code bằng DevC
 Anh viết về mảng lúc cần đến hàm đó chỉ việc gọi và truyền giá trị vào hàm.
Còn e đang nói chương trình của bạn kia không thể viết như thế
Lúc tính p3 xong xuống gọi p3 tiếp máy tính sẽ lấy giá trị p3 vừa tính xong và xét = phép toán đó không.
Như thế thì sai hoàn toàn, máy tính có thể lỗi hoặc tính sai kết quả.


 Hoàng Quý 
Face book: Hoang Quy
FanPage: Flash Mob Đà Nẵng
Thông tin liên lạc:
Sđt:01262797976
Yh/Skype:hoangquytcd2
Mail:hoangquytcd2@gmail.com

 
Các thành viên đã Thank hoangquytcd2 vì Bài viết có ích:
31/10/2011 19:10 # 13
anh2bmw
Cấp độ: 48 - Kỹ năng: 44

Kinh nghiệm: 255/480 (53%)
Kĩ năng: 408/440 (93%)
Ngày gia nhập: 27/11/2009
Bài gởi: 11535
Được cảm ơn: 9868
điều kiện để một điểm nằm trong một tam giác C++


  Giải như k15CMU cho kết quả cũng tương đối chính xác rồi. 
Vấn đề ở chỗ bạn này chưa học mảng, chưa học struct cho nên cách giải quyết vẫn là sử dụng thuật toán trực tiếp trong hàm main(). Trong hàm main thì cách giải của hoangquytcd2 là chính xác, bởi vì nếu sử dụng p3 (Trong p3=(a+x+z)/2) ở vế sau sẽ phát sinh ra lỗi giống như chủ Topic đang hỏi. :)

@Chủ topic: Sau này học thêm thì mình nghĩ chủ topic sẽ giải theo được nhiều cách nêu trên. Giữ nó lại để tham khảo nha :D.



Thông tin liên hệ anh2bmw khi có bất kỳ thắc mắc:
skype: trantien281
mail: 
anh2bmw@gmail.com


 

 
Các thành viên đã Thank anh2bmw vì Bài viết có ích:
31/10/2011 19:10 # 14
k15cmu
Cấp độ: 23 - Kỹ năng: 24

Kinh nghiệm: 104/230 (45%)
Kĩ năng: 207/240 (86%)
Ngày gia nhập: 05/01/2010
Bài gởi: 2625
Được cảm ơn: 2967
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


hix, mình đâu có dùng mảng gì đâu trời...
đối với 1 tam giác thì mình có 1 p khác nhau.
Hix, đơn giản thế này, hoangquy code thử nha:
     a=b; 
     k1=a+1;
     a=c;
     k2=a+1;
     cout<<k1<<","<<k2;
add(1,3,5)
xem thử kết quả là bao nhiêu và có đúng hay không ? 4,6 :D
Còn ở trên bạn ấy viết như thế là không nên vì nếu đề cho còn sử dụng p của tam giác S1 thì sẽ bị sai...
-------------------------------------------
Mình có 1 bài khá đơn giản trước đi học olp thầy có hướng dẫn, cực kì ngắn luôn.... Có công thức cứ áp dụng thôi...>> Cái này mình share code sau, để tìm lại công thức đã


Thông tin liên hệ:
Cần hỗ trợ trực tuyến (skype): Phong.D.NGUYEN
Nick yahoo: conspeed_dark1991
Email: herodark191@gmail.com

 
01/11/2011 09:11 # 15
galaxin
Cấp độ: 3 - Kỹ năng: 1

Kinh nghiệm: 23/30 (77%)
Kĩ năng: 7/10 (70%)
Ngày gia nhập: 14/09/2011
Bài gởi: 53
Được cảm ơn: 7
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


thanks mọi người nhiều.
mình thấy các biến p3 của mình không sai
sau khi gán giá trị cho s1 thì nó mới tiếp tục chuyển sang s2, s3
dù gì cũng thanks. đến hạn nộp bài rồi.




Thanks ko?                            

ko àk?                                     

lần cuối cho chú đấy!          

 


 
02/11/2011 23:11 # 16
vnttqb
Cấp độ: 13 - Kỹ năng: 8

Kinh nghiệm: 5/130 (4%)
Kĩ năng: 39/80 (49%)
Ngày gia nhập: 21/03/2011
Bài gởi: 785
Được cảm ơn: 319
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


Trích:
thanks mọi người nhiều.
mình thấy các biến p3 của mình không sai
sau khi gán giá trị cho s1 thì nó mới tiếp tục chuyển sang s2, s3
dù gì cũng thanks. đến hạn nộp bài rồi.

 Đúng đấy P3 chẳ bị lỗi gì cả. Thực ra thì đối với những bài toán nhỏ như thế này thì dùng lại biết là OK tiết kiệm bộ nhớ nữa. còn khi làm mấy bài lớn tí thì nên đặt tên biến cho GỢI NHỚ. đó là bí quyết của mình làm vậy đỡ nhầm sau này ngồi sửa cũng đỡ vất vả


======================================================================================================

Cuộc đời là một dòng sông. Ai không bơi thì chết. 
 

Name: Tien (Tory) TRAN
Email: TranTien29@gmail.com


 
09/11/2011 10:11 # 17
dieuhb
Cấp độ: 3 - Kỹ năng: 3

Kinh nghiệm: 0/30 (0%)
Kĩ năng: 14/30 (47%)
Ngày gia nhập: 04/02/2010
Bài gởi: 30
Được cảm ơn: 44
điều kiện để một điểm nằm trong một tam giác C++



sqrt:DOMAIN error

Lỗi này do số nằm trong căn là số âm.

Nếu dùng công thức Heron để giải bài này các bạn lưu ý sai số trong phép toán


S= S1 + S2 + S3







 
Các thành viên đã Thank dieuhb vì Bài viết có ích:
09/11/2011 16:11 # 18
Tuan1993
Cấp độ: 2 - Kỹ năng: 1

Kinh nghiệm: 9/20 (45%)
Kĩ năng: 8/10 (80%)
Ngày gia nhập: 26/10/2011
Bài gởi: 19
Được cảm ơn: 8
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


nhưng sau khi sqrt theo hệ thức herong  sai số là rất cao.

Ví dụ như Sabc=25
còn mấy cai sabd+sacd+sbcd=24.99 
thì ham if so sánh cũng báo sai cho nên mình phải dùng thêm hàm floor để làm tròn số

gọi B là số đã làm tròn
N là số chưa làm tròn
x là bao nhiêu chữ số làm tròn đến ví dụ làm tròn 3 chữ số x=3  5,2345~5.235
cấu trúc

B = floor ((N*pow(10,x)+0.5)/pow(10,x))

ví dụ làm tròn 2 chữ số
B = floor ((N*pow(10,2)+0.5)/Pow(10,x))



 
Các thành viên đã Thank Tuan1993 vì Bài viết có ích:
11/11/2011 09:11 # 19
dieuhb
Cấp độ: 3 - Kỹ năng: 3

Kinh nghiệm: 0/30 (0%)
Kĩ năng: 14/30 (47%)
Ngày gia nhập: 04/02/2010
Bài gởi: 30
Được cảm ơn: 44
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


Trích:
 Hi

Mình còn lưu 1 bài hồi trước mình học đây, ko biết nó có thể giúp gì cho bạn không? :)


//Bài toán xét 3 điểm có phải là 1 tam giác hay không? Xét vị trí tương đối giữa 1 điểm và tam giác đó

#include <stdio.h>
#include <conio.h>
#include <math.h>
typedef struct
{
    
float x;
    
float y;
toado;
float khoangcach(toado a,toado b)
{
    return (
sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2)));
}
void nhaptoado(toadoa)
{
    
printf("Nhap hoanh do x: ");
    
scanf("%f",&a.x);
    
printf("Nhap tung do y: ");
    
scanf("%f",&a.y);
    
printf("\n\n");
}
          
/*vì vector cũng có dạng tọa độ như điểm nên mình
 dùng luôn struct toado thay cho việc phải khai báo struct 
vector.Hàm này tính  tọa độ các vector dựa trên tọa độ 2 điểm.*/
toado vector(toado a,toado b
{                             
    
toado vector;                  
    
vector.x=b.x-a.x;
    
vector.y=b.y-a.y;
    return 
vector;
}
float dinhthuc(toado a,toado b)
{
    return (
a.x*b.y-b.x*a.y);
}
    
void main()
{
    
toado a,b,c,m,am,ac,bm,ba,cm,cb;
    
printf("Nhap toa do diem thu nhat:\n");
    
nhaptoado(a);
    
printf("Nhap toa do diem thu hai:\n");
    
nhaptoado(b);
    
printf("Nhap toa do diem thu ba:\n");
    
nhaptoado(c);
    if (((
khoangcach(a,b)+khoangcach(a,c))>(khoangcach(b,c)))&&
        ((
khoangcach(a,c)+khoangcach(b,c))>(khoangcach(b,a)))&&
        ((
khoangcach(c,b)+khoangcach(a,b))>(khoangcach(a,c))))
    
printf("3 diem la ba canh tam giac\n\n");
    else 
printf("3 diem khong la ba canh tam giac\n\n");


    
printf("Nhap toa do diem thu tu:\n");
    
nhaptoado(m);
    
printf("\n\n");
    
am=vector(a,m);ac=vector(a,c);
    
bm=vector(b,m);ba=vector(b,a);
    
cm=vector(c,m);cb=vector(c,b);
    if (((
dinhthuc(am,ac)>0)&&(dinhthuc(bm,ba)>0)&&(dinhthuc(cm,cb)>0))||
        ((
dinhthuc(am,ac)<0)&&(dinhthuc(bm,ba)<0)&&(dinhthuc(cm,cb)<0)))
        
printf("Diem M(%f , %f ) thuoc tam giac da cho",m.x,m.y);
    else 
printf("Diem M(%f , %f ) khong thuoc tam giac da cho",m.x,m.y);


    
getch();
}  

 
 Bạn anh2... cần giải thích thuật toán để các bạn sinh viên hiểu vì sao như vậy....



 
11/11/2011 10:11 # 20
anh2bmw
Cấp độ: 48 - Kỹ năng: 44

Kinh nghiệm: 255/480 (53%)
Kĩ năng: 408/440 (93%)
Ngày gia nhập: 27/11/2009
Bài gởi: 11535
Được cảm ơn: 9868
Phản hồi: điều kiện để một điểm nằm trong một tam giác C++


Trích:
Trích:
 Hi

Mình còn lưu 1 bài hồi trước mình học đây, ko biết nó có thể giúp gì cho bạn không? :)


//Bài toán xét 3 điểm có phải là 1 tam giác hay không? Xét vị trí tương đối giữa 1 điểm và tam giác đó

#include <stdio.h>
#include <conio.h>
#include <math.h>
typedef struct
{
    
float x;
    
float y;
toado;

//Chúng ta sử dụng cấu trúc struck để khai báo tọa độ của một điểm trong tam giác.

float khoangcach(toado a,toado b// Hàm tính khoảng cách giữa 2 điểm.
{
    return (
sqrt(pow((a.x-b.x),2)+pow((a.y-b.y),2)));
}
void nhaptoado(toadoa)  // Hàm nhập tọa độ 1 điểm.
{
    
printf("Nhap hoanh do x: ");
    
scanf("%f",&a.x);
    
printf("Nhap tung do y: ");
    
scanf("%f",&a.y);
    
printf("\n\n");
}
         
 /*vì vector cũng có dạng tọa độ như điểm nên mình
 dùng luôn struct toado thay cho việc phải khai báo struct 
vector.Hàm này tính  tọa độ các vector dựa trên tọa độ 2 điểm.*/


toado vector(toado a,toado b
{                             
    
toado vector;                  
    
vector.x=b.x-a.x;
    
vector.y=b.y-a.y;
    return 
vector;
}
float dinhthuc(toado a,toado b)
{
    return (
a.x*b.y-b.x*a.y);
}
    
void main()
{
    
toado a,b,c,m,am,ac,bm,ba,cm,cb;
    
printf("Nhap toa do diem thu nhat:\n");
    
nhaptoado(a);    /// Gọi hàm nhập tọa độ dành cho 1 điểm
    
printf("Nhap toa do diem thu hai:\n");
    
nhaptoado(b);
    
printf("Nhap toa do diem thu ba:\n");
    
nhaptoado(c);
    if (((
khoangcach(a,b)+khoangcach(a,c))>(khoangcach(b,c)))&&
        ((
khoangcach(a,c)+khoangcach(b,c))>(khoangcach(b,a)))&&
        ((
khoangcach(c,b)+khoangcach(a,b))>(khoangcach(a,c))))    

   /* ĐÂY LÀ ĐIỀU  KIỆN ĐỂ 3 ĐIỂM TRỞ THÀNH MỘT TAM GIÁC */


    
printf("3 diem la ba canh tam giac\n\n");
    else 
printf("3 diem khong la ba canh tam giac\n\n");


    
printf("Nhap toa do diem thu tu:\n");
    
nhaptoado(m); // GỌI ĐIỂM THỨ 4 LÀ ĐIỂM M VÀ TIẾN HÀNH NHẬP TỌA ĐỘ CHO NÓ.
    
printf("\n\n");
// KHAI BÁO CÁC VECTO ĐỂ SO SÁNH.
    
am=vector(a,m);ac=vector(a,c);
    
bm=vector(b,m);ba=vector(b,a);
    
cm=vector(c,m);cb=vector(c,b);

/* ĐIỀU KIỆN ĐỂ ĐIỂM M THUỘC TAM GIÁC ABC là
định thức của các cặp vectow (AM,AC), (BM,BA), (CM,CB) phải cùng dấu.*/



    if (((
dinhthuc(am,ac)>0)&&(dinhthuc(bm,ba)>0)&&(dinhthuc(cm,cb)>0))||
        ((
dinhthuc(am,ac)<0)&&(dinhthuc(bm,ba)<0)&&(dinhthuc(cm,cb)<0)))
        
printf("Diem M(%f , %f ) thuoc tam giac da cho",m.x,m.y);
    else 
printf("Diem M(%f , %f ) khong thuoc tam giac da cho",m.x,m.y);


    
getch();
}  
 
 Bạn anh2... cần giải thích thuật toán để các bạn sinh viên hiểu vì sao như vậy....
 Bài toán có thuật toán và lời giải thích ở phần trích dẫn ( Màu xanh bôi đậm) . Thanks Thầy đã góp ý.
 


Thông tin liên hệ anh2bmw khi có bất kỳ thắc mắc:
skype: trantien281
mail: 
anh2bmw@gmail.com


 

 
Các thành viên đã Thank anh2bmw vì Bài viết có ích:
Copyright© Đại học Duy Tân 2010 - 2024