Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Không hiển thị kết quả tìm kiếm ở phần tìm kiếm nhị phân theo mảng??

  1. #1
    Ngày gia nhập
    11 2011
    Bài viết
    4

    Mặc định Không hiển thị kết quả tìm kiếm ở phần tìm kiếm nhị phân theo mảng??

    Đề bài: Xây dựng mảng thí sinh bao gồm các thuộc tính sau: họ tên, giới tính, số báo danh, điểm toán, điểm lý, điẻm hóa, tổng điểm 3 môn.Yêu cầu của bài là tìm thông tin của thí sinh theo số báo danh bằng thuật toán tìm kiếm nhị phân trên mảng
    Chương trình của em không có lối nhưng khi chạy thì hàm tìm kiếm thí sinh lại không hoạt động(Nói chính xác ra là nó không hiển thị kết quả tìm kiếm)
    Đây là code của em.Mọi người giúp em với nhé
    Code:
    #include<conio.h>
    #include<iostream.h>
    #include<stdlib.h>
    #include<math.h>
    class ts
         {private: int sbd;
    	       char hoten[30];
    	       char gioitinh[5];
    	       float t,l,h,td;
           public: void nhap();
    	       void xuat();
    	       void hoanvi(ts &a,ts &b);
    	       int readsbd();
           };
    class TS:public ts
          {private: int n;
    		ts *A;
           public:  void nhap();
    		void xuat();
    		void sapxepBubble();
    		int timkiem();
          };
    void ts::nhap()
     { cout<<"\nSo bao danh:"; cin>>sbd;
       cout<<"\nHo ten:"     ; cin.ignore(1); cin.getline(hoten,30);
       cout<<"\nGioi tinh:"  ; cin.getline(gioitinh,5);
       cout<<"\nDiem toan:"  ; cin>>t;
       cout<<"\nDiem hoa:"   ; cin>>h;
       cout<<"\nDiem ly:"    ; cin>>l;
      }
    void ts::xuat()
     { td=t+l+h;
       cout<<"\n"<<sbd<<"  "<<hoten<<"  "<<gioitinh<<"  "<<t<<"  "<<l<<"  "<<h<<"  "<<td;
     }
    void ts::hoanvi(ts &a,ts &b)
     { ts tg=a;
          a=b;
          b=tg;
     }
    int ts::readsbd()
     {
       return sbd;
     }
    void TS::nhap()
     { cout<<"\nSo thi sinh can phai nhap thong tin la:";
       cin>>n;
       A=new ts[n+1];
       for(int i=1;i<=n;i++)
        A[i].nhap();
     }
    void TS::xuat()
     { for(int i=1;i<=n;i++)
       A[i].xuat();
     }
    void TS::sapxepBubble()//Sap xep so bao danh cua thi sinh theo kieu noi bot
     { for(int i=1;i<=n;i++)
       for(int j=n;j>i;j--)
        if(A[j].readsbd()<A[j-1].readsbd())
          hoanvi(A[j-1],A[j]);
       for(i=1;i<=n;i++)
        A[i].xuat();
     }
    int TS::timkiem()
     {  int i,j,d,k;
         d=0;//bien de kiem tra xem co thi sinh nao co so bao danh nhu vua nhap khong??
         i=1;
         j=n;
        cout<<"\nNhap so bao danh cua thi sinh can phai tim vao";
        cin>>k;
        while((i<=j)&&(d!=1))
        { int mid=(i+j)/2;
           if(k==A[mid].readsbd())
             d=1;
          else
          { if(k<A[mid].readsbd())
    	  j=mid-1;
    	else  i=mid+1;
          }
       }return d;
       if(d==1)
        A[i].xuat();
       else cout<<"\nKhong tim thay thi sinh can tim!";
       }
    void main()
     { TS a;
       int n,k;
       clrscr();
       a.nhap();
       cout<<"\nDanh sach thi sinh vua  nhap vao nhu sau:";
       a.xuat();
       cout<<"\nDanh sach sau khi sap xep nhu sau";
       a.sapxepBubble();
       a.timkiem();
       getch();
      }

  2. #2
    Ngày gia nhập
    10 2011
    Bài viết
    552

    C++ Code:
    1. }return d;
    2.    if(d==1)
    3.     A[i].xuat();
    4.    else cout<<"\nKhong tim thay thi sinh can tim!";
    5. }
    2 câu lệnh xuất và thông báo này nó nằm sau return cho nên coi như vô dụng rồi
    Xử lý:
    1) Là bạn ra ngoài main, if object.timkiem() == 1 thì xuat ra , else thì thông báo ko có
    2) Là bạn đưa return về cuối hàm thì mới dc
    Um Mani Padme Hum...!!

  3. #3
    Ngày gia nhập
    11 2011
    Bài viết
    4

    Trích dẫn Nguyên bản được gửi bởi clchicken Xem bài viết
    C++ Code:
    1. }return d;
    2.    if(d==1)
    3.     A[i].xuat();
    4.    else cout<<"\nKhong tim thay thi sinh can tim!";
    5. }
    2 câu lệnh xuất và thông báo này nó nằm sau return cho nên coi như vô dụng rồi
    Xử lý:
    1) Là bạn ra ngoài main, if object.timkiem() == 1 thì xuat ra , else thì thông báo ko có
    2) Là bạn đưa return về cuối hàm thì mới dc
    Theo cách 2 mà bạn hướng dẫn mình đã code lại như sau:
    while((i<=j)&&(d!=1))
    { int mid=(i+j)/2;
    if(k==A[mid].readsbd())
    d=1;
    else
    { if(k<A[mid].readsbd())
    j=mid-1;
    else i=mid+1;
    }
    if(d==1)
    { cout<<"\nThong tin cua thi sinh can tim kiem la:";
    A[i].xuat();
    }
    else cout<<"\nKhong tim thay thi sinh co so bao danh can tim!";
    }
    return d;
    Bây giờ thì ok rùi.Thanks bạn nhé

Các đề tài tương tự

  1. Tìm kiếm theo khoảng giá sản phẩm
    Gửi bởi trungpq87 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 27-03-2012, 11:35 AM
  2. Thuật toán C++ Tìm kiếm đồ thị theo chiều sâu - Không xuất được kết quả
    Gửi bởi nhatminh266 trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 5
    Bài viết cuối: 11-03-2012, 07:44 PM
  3. Lỗi dùng tìm kiếm tuần tự để tìm kiếm sinh viên theo tên
    Gửi bởi mrbuides trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 19-05-2011, 07:34 PM
  4. Lập trình C++ Thuật toán tìm kiếm mù(theo độ sâu hoặc rộng) và tìm kiếm leo đồi
    Gửi bởi chickentruong trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 08-04-2010, 08:09 PM
  5. Tìm kiếm sách theo tên trong chương trình quản lý thư viện
    Gửi bởi Sidus trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 11-11-2008, 08:08 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn