Announcement

Collapse
No announcement yet.

Giúp mình với

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [C++] Giúp mình với

    Chả hiểu sao ở hàm kiểm tra tam giác, trường hợp 2 điểm trùng nhau thì ok nhưng 3 điểm thẳng hàng nó lại k chạy
    Mình debug thử thì nó cho qua luôn, k nhảy vào hàm dù đã nhập 3 iX bằng nhau, iY cũng vậy
    Mấy bạn giúp mình tìm lỗi với, cảm ơn nhiều!

    PHP Code:
    struct Diem
    {
        
    int iX;
        
    int iY;
    };

    class 
    TamGiac
    {
    private:
        
    Diem DiemADiemBDiemC;
    public:
        
    TamGiac();
        
    int KiemTra();
        
    TamGiac TinhTien();
        
    friend istreamoperator>>(istream &isTamGiac &a);
        
    friend ostreamoperator<<(ostream &osTamGiac a);
    };


    TamGiac::TamGiac()
    {
        
    DiemA.iX DiemA.iY 0;
        
    DiemB.iX DiemB.iY 0;
        
    DiemC.iX DiemC.iY 0;
    }

    int TamGiac::KiemTra()
    {
        if((
    DiemA.iX == DiemB.iX && DiemA.iY == DiemB.iY) || (DiemA.iX == DiemC.iX && DiemA.iY == DiemC.iY) || (DiemC.iX == DiemB.iX && DiemC.iY == DiemB.iY))
            return 
    0;
        if(
    DiemA.iX == DiemB.iX == DiemC.iX)
            return 
    0;
        if(
    DiemA.iY == DiemB.iY == DiemC.iY)
            return 
    0;
        return 
    1;
    }

    istreamoperator>>(istream &isTamGiac &a)
    {
        
    cout << "\nNhap vao toa do diem A: ";
        
    cin >> a.DiemA.iX >> a.DiemA.iY;
        
    cout << "\nNhap vao toa do diem B: ";
        
    cin >> a.DiemB.iX >> a.DiemB.iY;
        
    cout << "\nNhap vao toa do diem C: ";
        
    cin >> a.DiemC.iX >> a.DiemC.iY;
        return 
    is;
    }



    int main()
    {
        
    TamGiac tg;
        
    int c;
        do
        {
            
    cin >> tg;
            
    tg.KiemTra();
            if(
    == 0) continue;
            else break;
        }while(
    1);
        
    cout << tg;
        
    tg.TinhTien();
        
    cout << tg;
        return 
    0;

    Last edited by 12520274; 01-04-2014, 20:35.
    Let It Be

  • #2
    upppppp :sad:
    Let It Be

    Comment


    • #3
      Originally posted by 12520274 View Post
      upppppp :sad:
      sai chỗ này nè bạn: if(DiemA.iX == DiemB.iX == DiemC.iX), if(DiemA.iY == DiemB.iY == DiemC.iY)

      bạn thử nhập số 1 hết xem nó có vào không?

      còn nữa, điểm (1, 1), (2, 2), (3, 3) có thẳng hàng không ta ?
      Hãy là chính mình!

      Comment


      • #4
        Code không có tí comment nào cả. Hàm kiểm tra tam giác để làm cái gì vậy em?

        Comment


        • #5
          Originally posted by 09520109 View Post
          sai chỗ này nè bạn: if(DiemA.iX == DiemB.iX == DiemC.iX), if(DiemA.iY == DiemB.iY == DiemC.iY)

          bạn thử nhập số 1 hết xem nó có vào không?

          còn nữa, điểm (1, 1), (2, 2), (3, 3) có thẳng hàng không ta ?
          mình sửa đc code rồi nhưng h mới phát hiện thêm trường hợp của bạn nói, tks bạn
          Let It Be

          Comment


          • #6
            Originally posted by truonganpn View Post
            Code không có tí comment nào cả. Hàm kiểm tra tam giác để làm cái gì vậy em?
            Em quên cmt code ^^, em kiểm tra xem trong mặt phẳng tọa độ nó có bị trùng điểm hay là 3 điểm thẳng hàng không ấy thầy
            Let It Be

            Comment


            • #7
              Originally posted by 12520274 View Post
              Em quên cmt code ^^, em kiểm tra xem trong mặt phẳng tọa độ nó có bị trùng điểm hay là 3 điểm thẳng hàng không ấy thầy
              Kiểm tra mấy cái này làm gì, sao tên nó lại là kiểm tra tam giác mà vô lại kiểm tra điểm thẳng hàng

              Comment


              • #8
                Chủ topic đọc lại nguyên tắc post bài trong topic này để tránh bị nhận thẻ phạt nhé.

                Comment


                • #9
                  Originally posted by truonganpn View Post
                  Kiểm tra mấy cái này làm gì, sao tên nó lại là kiểm tra tam giác mà vô lại kiểm tra điểm thẳng hàng
                  Dạ em đã nhận ra không thể kiểm tra hết được, cảm ơn thầy
                  Let It Be

                  Comment


                  • #10
                    Originally posted by hiepnt View Post
                    Chủ topic đọc lại nguyên tắc post bài trong topic này để tránh bị nhận thẻ phạt nhé.
                    http://forum.uit.edu.vn/threads/26761
                    em sẽ rút kinh nghiệm, cảm ơn thầy
                    Let It Be

                    Comment


                    • #11
                      Không biết còn cách nào hay hơn không nhưng theo mình để kiểm tra 3 điểm có tạo thành tam giác hay không thì mình sẽ làm những bước sau :
                      1. Kiểm tra có điểm nào trung nhau hay không
                      2. Nếu không, lập phương trình đường thẳng đi qua 2 điểm đầu
                      3. Thế tọa độ điểm còn lại nếu phương trình bằng 0 thì 3 điểm nằm trên đường thẳng và ngược lại 3 điểm tạo thành tam giác
                      Dưới đây là đoạn code của mình.

                      int TamGiac::KiemTra()
                      {
                      //Kiểm tra 3 điểm có trùng nhau hay không
                      if((DiemA.iX == DiemB.iX && DiemA.iY == DiemB.iY) || (DiemA.iX == DiemC.iX && DiemA.iY == DiemC.iY) || (DiemC.iX == DiemB.iX && DiemC.iY == DiemB.iY))
                      return 0;

                      //Kiểm tra 3 điểm có nằm trên đường thẳng hay không
                      //Lập phương trình đường thẳng đi qua 2 điểm A, B
                      Diem vecCP; //vector chỉ phương
                      vecCP.iX = DiemA.iX - DiemB.iX;
                      vecCP.iY = DiemA.iY - DiemB.iY;


                      Diem vecPT; //vector pháp tuyến : vector nhân với vector chỉ phương bằng 0;
                      vecPT.iX = -vecCP.iY;
                      vecPT.iY = vecCP.iX;


                      //Nếu điểm C thuộc đường thẳng qua AB thì phương trình tổng quát sẽ bằng 0
                      int kt = vecPT.iX * (DiemC.iX - DiemA.iX) + vecPT.iY * (DiemC.iY - DiemA.iY);


                      if(kt == 0) return 0;


                      return 1;
                      }

                      Nếu có sai sót mong mọi người bỏ qua
                      Software Engineering Faculty
                      University of Information Technology
                      Name: Trần Lê Tuấn
                      Phone: 01222 878 099 :boss:

                      Comment


                      • #12
                        Dùng bất đẳng thức là xong rồi. Các bạn làm gì tùm lum thế :O

                        Comment


                        • #13
                          :shot: ra là bất đẳng thức tam giác, cảm ơn tất cả mọi người.
                          Let It Be

                          Comment

                          LHQC

                          Collapse
                          Working...
                          X