Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: Duyệt đệ quy trong Vector như thế nào?

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Mặc định Duyệt đệ quy trong Vector như thế nào?

    Chào mấy anh chị.
    Em hiện đang làm 1 bài tập yêu cầu quản lí gia súc. Nhưng có phần em vẫn chưa có ý tưởng cài đặt gì . Mong anh chị giúp. Ý tưởng trong đầu em hiện cho là thế này:
    1. Vì mỗi con gia súc đều sẽ sinh con, và mỗi con của nó lớn lên sẽ lại sinh con...Tiếp diễn. Nên em muốn làm việc này bằng Vector, em xin lấy ví dụ là loài bò. Như vậy mỗi con bò sinh ra sẽ có theo 1 vector để chứa con của nó (nếu là bò đực thì vector này rỗng).

    C++ Code:
    1. class ConBo
    2.  
    3. class ConBo
    4. {
    5.     //Các dữ liệu cần cài đặt về loài bò....
    6. public:
    7.     vector<ConBo*> BoCon;
    8.         void Keu(); //phát ra tiếng kêu của bò.
    9. };

    Và sau đó em sẽ cài 1 lớp để QuảnLí loài bò...Có 1 method tên là Thống Kê có bao nhiêu còn bò, thông qua việc nghe nó kêu...

    C++ Code:
    1. class QuanLi
    2. {
    3. public:
    4.     vector<ConBo*> TatCaGiaSuc; //vector Tatcagiasuc sẽ chứa số gia súc ban đầu mà ta có, tức là số bò mẹ, bò cha ban đầu thôi, ko chứ mấy con bò đã được sinh ra...
    5.     void ThongKe();
    6. };

    Em giả sử là sau 5 năm, số bò mình có trong nông trại đã lớn lên, sinh con, và số con của nó cũng lớn lên, sinh con...(giả sử mỗi năm sinh 1 con đi). Như vậy em phải cài đặt Method ThongKe như thế nào để có thể duyệt xuống hết để có thể thông kê 1 cách chính xác tất cả số bò trong nông trại...Em nghĩ phải dùng đệ quy ở đây, nhưng đệ quy thì em hơi yếu...nên chưa có ý tưởng gì cả. Mong các anh chị giúp đỡ em với...
    Đã được chỉnh sửa lần cuối bởi zzronn : 14-11-2008 lúc 09:39 PM.

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Có ai biết giúp em với...Em nghĩ đây là 1 vấn đề cũng hay gặp lắm muh T_T.....

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Nói rõ về đề tài của bạn đi ?

    PHP Code:
    Em hiện đang làm 1 bài tập yêu cầu quản lí gia súcNhưng có phần em vẫn chưa có ý tưởng cài đặt gì Mong anh chị giúpÝ tưởng trong đầu em hiện cho là thế này
    1. Vì mỗi con gia súc đều sẽ sinh convà mỗi con của nó lớn lên sẽ lại sinh con...Tiếp diễnNên em muốn làm việc này bằng Vectorem xin lấy ví dụ là loài bòNhư vậy mỗi con bò sinh ra sẽ có theo 1 vector để chứa con của nó (nếu là bò đực thì vector này rỗng). 
    Chắc gì bạn đã suy nghĩ đúng ?
    Bạn cho thêm tí thông tin, mình thấy vẫn còn mơ hồ.

  4. #4
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    Nói rõ về đề tài của bạn đi ?

    PHP Code:
    Em hiện đang làm 1 bài tập yêu cầu quản lí gia súcNhưng có phần em vẫn chưa có ý tưởng cài đặt gì Mong anh chị giúpÝ tưởng trong đầu em hiện cho là thế này
    1. Vì mỗi con gia súc đều sẽ sinh convà mỗi con của nó lớn lên sẽ lại sinh con...Tiếp diễnNên em muốn làm việc này bằng Vectorem xin lấy ví dụ là loài bòNhư vậy mỗi con bò sinh ra sẽ có theo 1 vector để chứa con của nó (nếu là bò đực thì vector này rỗng). 
    Chắc gì bạn đã suy nghĩ đúng ?
    Bạn cho thêm tí thông tin, mình thấy vẫn còn mơ hồ.
    Đề tài của em là yêu cầu làm 1 chương trình quản lí Gia Súc. Và chương trình này có khả năng thống kê số gia súc được sinh ra trong n năm.

    Em xin kể ra những gì em hiện có trong đầu...
    Ý tưởng của em muốn cài đặt là mỗi con bò cái mà sinh ra con con, thì mình vẫn biết được con của con bò cái đó là con bò con nào.

    Lớp Quản Lí thì có 1 vector dùng để chứa số bò ban đầu...Mỗi con bò ban đầu thì phải chứa 1 vector bò con...mỗi con bò con sinh ra thì nó sẽ lớn lên, sinh con...nên cũng chứa 1 vector để chứ con của nó...(dạng như 1 cây phân nhánh)

    Em muốn chương trình quản lý có thể cài đặt sao cho nó duyệt hết trên vector chứa số bò ban đầu, và nếu mỗi con bò trong đó nếu có sinh con thì lại tiếp tục duyệt xuống vector ở dưới....v....v cho đến hết.

    Đúng là cũng có nhiều cách tiếp cận, nhưng hiện tại em chỉ nghĩ ra cách này ...Em viết hơi lủng củng không biết anh có hiểu ý em không ?

  5. #5
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bạn có ý tưởng như thế là tốt rồi đó. Chuyện duyệt vector thì bạn dùng đệ quy, mình ko biết bạn định hiện thực như thế nào nên mình chỉ dùng mã giả thôi :
    C Code:
    1. typedef struct _GiaSuc
    2. {
    3.     GiaSuc *ptr;
    4.     ThuocTinh attr;
    5. } GiaSuc;
    6.  
    7. long Duyet(Vector<T> *v)
    8. {
    9.     long tong = 0;
    10.     for (int i=0;i<v.length;i++)
    11.         if (v[i].ptr != NULL)
    12.             tong += Duyet(v[i].ptr);
    13.         else
    14.             tong += v[i].attr;
    15.  
    16.     return tong;
    17. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  6. #6
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Mặc định Duyệt đệ quy trong Vector như thế nào?

    Vẫn mơ hồ :(

    1. Dữ liệu vào ?
    2. Xác suất sinh con bò là Gái hay Trai ( tỉ lệ này nhập chỗ nào )

    Thật sự kid vẫn ko hiểu ý tưởng " của thầy bạn " khi ra cho bạn cái đề này khi bắt tính ( số bò sinh ra trong n năm ).

    hix !

  7. #7
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Code:
    long Duyet(Vector<T> *v)
    {
        long tong = 0;
        for (int i=0;i<v.length;i++)
            if (v[i].ptr != NULL)
                tong += Duyet(v[i].ptr);
            else
                tong += v[i].attr;
    
        return tong;
    }
    hix ko thấy bài của mèo ? Bữa ni code ẩu thế .

  8. #8
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    hix ko thấy bài của mèo ? Bữa ni code ẩu thế .
    Hic đang bệnh mệt muốn chít. Vả lại mình code mã giả vì ko biết cấu trúc dữ liệu mà tác giả muốn xài là gì.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  9. #9
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Chào 2 anh

    Vậy em đưa code prototype em viết lên đây luôn...Tại em nghĩ cách này thể hiện rõ nhất:

    Thứ nhất là lớp Thú, và lớp con bò
    C++ Code:
    1. class LoaiGiaSuc
    2. {
    3. public:
    4.     LoaiGiaSuc(){};
    5.     virtual void LonLen(int iNam); // Can cai dat
    6.     virtual void ChoSua(int iNam)=0;
    7.     virtual void Keu()=0;
    8.     virtual void SinhCon(int iNam)=0;
    9.     virtual int getGioiTinh(); //Can cai dat
    10.     virtual int getMilk(); //Can cai dat
    11.     virtual int getLoaiID();
    12.     virtual ~LoaiGiaSuc(){};
    13.     vector<LoaiGiaSuc*>  vCon; //Vector chứa những con nó sinh ra...
    14. protected:
    15.     int isFeMale; //Chỉ có 0 và 1 do đó dùng hàm rand()%2 để random
    16.     unsigned int uiAge;
    17.     unsigned int uiMilkGiven;
    18.     int iLoaiID; // ID cua Loai Gia Suc. Bo = 1, De =2, Cuu = 3;
    19.  
    20. };
    C++ Code:
    1. class LoaiBo: public LoaiGiaSuc
    2. {
    3. public:
    4.     LoaiBo(int iTuoi, int bSex);
    5.     virtual void ChoSua(int iNam);
    6.     virtual void Keu();
    7.     virtual void SinhCon(int iNam);
    8.     virtual ~LoaiBo(){};
    9. };

    Em code ở đây là lớp LoaiGiaSuc chứa vector vCon, là 1 vector kiểu con trỏ <LoaiGiaSuc*> để chứa những con nó sinh ra...

    Vẫn mơ hồ :(

    1. Dữ liệu vào ?
    2. Xác suất sinh con bò là Gái hay Trai ( tỉ lệ này nhập chỗ nào )

    Thật sự kid vẫn ko hiểu ý tưởng " của thầy bạn " khi ra cho bạn cái đề này khi bắt tính ( số bò sinh ra trong n năm ).

    hix !
    1: Dữ liệu vào ở đây như em nói là số năm mình muốn thống kê: ví dụ em nhập vào 10 năm. thì sẽ biết trong 10 năm đó số bò ban đầu đã sinh ra bao nhiêu con , và số con lớn lên, sinh ra là bao nhiêu.....Sau 10 năm thì cho biết có tổng cộng bao nhiêu con bò.

    Giả sử là : bò thì 2 tuổi là đẻ con được, và mỗi năm đẻ 1 con.

    2. cái giới tính mà con bò con được sinh ra (new LoaiBo) thì em cho hàm rand()%2
    C++ Code:
    1. void LoaiBo::SinhCon(int iNam=0)
    2. {
    3.     int iCounter=uiAge;
    4.     if (isFeMale==0)
    5.     {
    6.         for(iCounter;iCounter<uiAge+iNam;iCounter++)
    7.         {
    8.             if (iCounter>=2)
    9.             {
    10.                 LoaiGiaSuc* Bo=new LoaiBo(0,rand()%2);
    11.                 vCon.push_back(Bo);
    12.             }
    13.         }
    14.     }
    15. }
    Còn lớp quản lí thì em viết thế này :

    C++ Code:
    1. class QuanLiGiaSuc
    2. {
    3. public:
    4.     QuanLiGiaSuc();
    5.     void ThongKeSoLuongGiaSuc(int iNam);
    6. protected:
    7.     ifstream fFile;
    8.     vector<LoaiGiaSuc*> vSoLuongGiaSuc;
    9. };

    vector vSoLuongGiaSuc là chứa số bò ban đầu mình có (đọc từ 1 file input vào chẳng hạn...)


    Vấn đề ở đây em đang bí lù chính là việc làm sao để duyệt đệ quy xuống hết tất cả các vector vCon có thể có, để lấy được tổng số bò??

    Cấu trúc ở đây em nghĩ là cũng giống dạng cây...mà số nút con thì tăng theo cấp số nhân theo mỗi năm...(giống chuột nó đẻ, rồi con nó lại đẻ ra cháu, cháu đẻ ra chít.....na ná như vậy đó anh )

    em vẽ thêm cái hình trong đầu em mường tượng ra nó giống vậy....hix hix.



    thằng vCon đầu tiên là đực nên duyệt tới đó là ngưng...

    Ý tưởng trong đầu của em là vậy...Nhưng em không biết cách cài đặt thế nào đây ...Code em viết tây ta lẫn lộn, khi nào hoàn chỉnh em sẽ sửa lại. Method thì em viết thế, không biết đã hợp lý chưa nữa ...

  10. #10
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Bạn có ý tưởng như thế là tốt rồi đó. Chuyện duyệt vector thì bạn dùng đệ quy, mình ko biết bạn định hiện thực như thế nào nên mình chỉ dùng mã giả thôi :
    C Code:
    1. typedef struct _GiaSuc
    2. {
    3.     GiaSuc *ptr;
    4.     ThuocTinh attr;
    5. } GiaSuc;
    6.  
    7. long Duyet(Vector<T> *v)
    8. {
    9.     long tong = 0;
    10.     for (int i=0;i<v.length;i++)
    11.         if (v[i].ptr != NULL)
    12.             tong += [B]Duyet(v[i].ptr[/B]);
    13.         else
    14.             tong += v[i].attr;
    15.  
    16.     return tong;
    17. }
    anh meoconlongvang ơi...Cho em hỏi chỗ Duyet(v[i].ptr là như thế nào vậy anh? Vector v trong đó chứa 1 vector v khác, làm sao mình có thể dùng toán tử -> để truy cập đến nó được?

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

  1. lỗi no matching function for call to `vector::vector(vector)'
    Gửi bởi ngonchanloi89 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-11-2013, 11:25 AM
  2. Khởi tạo vector trong C# như thế nào?
    Gửi bởi voicewithin trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 31-03-2011, 04:56 PM
  3. hướng đối tượng: <vector> trong C++ như thế nào?
    Gửi bởi huutaict 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: 01-12-2010, 09:43 PM
  4. Thao tác với vector trong lập trình C++?
    Gửi bởi nguyenxuanson11 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 20-03-2010, 05:49 AM
  5. Duyệt hết các phần tử của Vector
    Gửi bởi nguyenbinh07 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 18-03-2009, 07:54 AM

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