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

Đề tài: Xây dựng thư viện hàm sắp xếp, mời mọi người vào giúp một tay

  1. #1
    Ngày gia nhập
    10 2007
    Bài viết
    50

    Mặc định Xây dựng thư viện hàm sắp xếp, mời mọi người vào giúp một tay

    mình đang hoàn thiện dần nhưng bị khúc mắt một chỗ chưa thể đi tiếp bạn nào có ý gì thi post lên nha!!!!
    mình muốn xây dựng một hàm có dang sau:(chỗ mình đánh dấu chấm hỏi).hàm này bạn có thể truyền bao nhiêu bộ lọc tùy thích,bộ lọc này gồm lọc ra những số chẳn,lẻ,dương....Mình có ý tưởng sử dụng ham không xác định số tham số truyền vào, nhưng ngặc nỗi,mình chỉ thực hiện nó với những đối tượng, chứ chưa bao giờ thử với con trỏ hàm và cũng chả biết phải làm sao!!!!!!
    C++ Code:
    1. #include<iostream.h>
    2. #include<stdarg.h>
    3. #include<math.h>
    4. int *a;
    5. int na;
    6.  
    7. void Permute(int &x,int &y);
    8. void Permute(int &x,int &y)
    9. {
    10. int t;
    11. t=x;
    12. x=y;
    13. y=t;
    14. }
    15. //************************************************
    16. //          CAC BO LOC
    17. int Positive(int a)//so duong
    18. {
    19.     return (a>0);
    20. }
    21. int Negative(int a)//so am
    22. {
    23.     return (a<0);
    24. }
    25. int Even(int a)//so chan
    26. {
    27.     return (a%2==0);
    28. }
    29. int Odd(int a)//so le
    30. {
    31.     return (a%2!=0);
    32. }
    33. int Prime(int a)//so ngyen to
    34. {
    35.     int b;
    36.     b=a/2;
    37.     for(int i=1;i<=b;i++)
    38.         if(a%i==0)
    39.             return 0;
    40.         else 1;
    41. }
    42.  
    43. //************************************************
    44.  
    45. //************************************************
    46. //              CAC KIEU SAP XEP
    47. int Increase(int x,int y)
    48. {
    49. return x>=y;
    50. }
    51.  
    52. int Decrease(int x,int y)
    53. {
    54. return x<=y;
    55. }
    56. //***********************************************
    57. class Sort
    58. {
    59. public:
    60. void virtual sort(int *b,int &nb,int(*Compare)(int,int))=0;
    61. };
    62.  
    63. class SelectSort:public Sort
    64. {
    65. public:
    66.     void sort(int *b,int &nb,int(*Compare)(int,int))
    67.     {
    68.         int t;
    69.         for(int i=1;i<nb;i++)
    70.         {
    71.             t=i;
    72.             for(int j=i+1;j<=nb;j++)
    73.                 if(Compare(b[i],b[j]))
    74.                     t=j;
    75.             if(t!=i) Permute(b[i],b[t]);
    76.         }
    77.     }
    78. };
    79.  
    80. class InterchangeSort:public Sort
    81. {
    82. public:
    83. void sort(int *b,int &nb,int(*Compare)(int ,int ))
    84. {
    85.     for(int i=1;i<nb;i++)
    86.         for(int j=i+1;j<=nb;j++)
    87.             if(Compare(b[i],b[j]))
    88.                 Permute(b[i],b[j]);
    89. }
    90. };
    91.  
    92. class ToolSort
    93. {
    94. public:
    95.     Sort *t;
    96. public:
    97. ToolSort()
    98. {
    99.     t=NULL;
    100. }
    101. ToolSort(Sort *a)
    102. {
    103.     t=a;
    104. }
    105. void ChangeTool(Sort *b)
    106. {
    107.     t=b;
    108. }
    109. //Su dung ham khong xac dinh so luong tham so truyen vao
    110. void ThucThi(int *b,int &nb,int(*Compare)(int,int),int(*Filter)(int ),...)???????
    111. {
    112.                  //BE TAC //BE TAC //BE TAC
    113. }
    114. void Import()
    115. {
    116.     cout<<"Nhap so phan tu can sap xep: ";
    117.     cin>>na;
    118.     a=new int[na+1];
    119.     for(int i=1;i<=na;i++)
    120.     {
    121.         cout<<"a["<<i<<"]= ";
    122.         cin>>a[i];
    123.     }
    124. }
    125. void Export(int *b,int nb)
    126. {
    127.     cout<<"\nCac phan tu sau khi duoc sap xep: ";
    128.     for(int i=1;i<=nb;i++)
    129.     cout<<b[i]<<" ";
    130. }
    131. };
    132.  
    133. void main()
    134. {
    135.     int *b;
    136.     int nb=0;
    137.     b=new int[na];
    138.     ToolSort *t;
    139.     t=new ToolSort;
    140.     t->Import();
    141.     t=new ToolSort(new InterchangeSort);
    142.     t->ThucThi(b,nb,Decrease,Positive,Prime); ///????????????????
    143.     t->Export(b,nb);
    144. /*  t->ChangeTool(new SelectSort);
    145.     t->ThucThi(,Increase);
    146.     t->Export();*/
    147. }

    Một hàm bắt buộc các thông số phải cụ thể. Tại sao không nghĩ cách khác mà cứ cố làm một cách khó khăn này? (Posted by Dreaminess)

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

    bạn à, vậy là bạn chưa hiểu ý mình rồi, nếu giả sử ta có một dãy các số :gồm nhiều kiểu:chẳn lẻ âm,dương, người sử dụng thư viện có thể sẻ truyền vào rất nhiều bộ lọc để lọc ra những số họ muốn, chẳng hạn như xắp sếp các số chẳn dương,chia hết cho 4, va chia hết cho 5 nói chung là mình không thể xác định số lượng bộ lộc là bao nhiêu thì làm theo cách của bạn là không thể!thanhk

    đại khái protype như vậy là được rồi
    bây giờ cậu cần làm điều gì, cách hiện thực ThucThi()? trước tiên cần đả thông ý tưởng đã
    ví dụ
    dãy 1 2 1 6 7 8 3 4
    sắp xếp số chẵn tăng dần
    thì kết quả cậu mong muốn ra sao?

    ok!!bây giờ giả sử mình 1 2 1 6 7 8 3 4
    thi t->ThucThi(b,nb,Prime,Increase).Mang b la mang chứa các phần tử mảng a đã được lọc, như vậy mảng a sau khi qua bộ lọc số chẳng thi mảng b se nhận các phần tử 2 6 8 4, tiếp đó nó sẻ gọi tiếp con trỏ hàm xắp sếp tăng để sắp tiếp các phần tử đó, rồi in gi mảng b(chắc bạn đã hiểu ý mình)
    cho thêm ví dụ nữa nha: cho các phần tử:
    1 5 2 8 4 10 14 27 33 48 90 48 ......
    sắp sếp giam các phần tử chia hết cho 3 và chia hết cho 5 và la sỗ chẳn và là số dương (có thể thêm yêu cầu).Thì đầu tiên ta phải chuẩn bị tất cả các bộ lọc trước như bộ lọc số chia hết cho 3, bộ lọc sôd chia hết cho 5,....
    thì lúc đó t->ThucThi(b,nb,bolocchiahetcho3,bolocchiahetcho5,bo locsochan,bolocsoduoong,decrease).thì các phần tử mảng a sẻ đi qua từng bộ lọc.Khi đi qua từng bộ lọc những số thỏa yêu cầu sẻ được chuyển qua sang mảng trung gian rồi chép lại vào mảng b,rồi cứ thực hiện vòng lặp đến bộ lọc cuối cùng ,kết quả cuối sẻ được lưu trên mảng b,rồi sắp xếp giảm trên b.Vấn để ở đây là cách viết hàm không xác định số tham số, với đối tượng bình thướng thì mình biết cách viết:
    giả sử ví dụ ta có một lớp hình là lớp cơ sở cho lớp chữ nhật,vuông,tròn...
    thì ta có thể viet hàm không xác định số lượng tham số để tính tổng diện tích các hình truyền vào sao(phương thức tính diện tích là phương thức ảo chắc cái này ai cũng biết)sau:
    C++ Code:
    1. float Sum(Hinh *frst,...)
    2. {
    3. float S=0;
    4. va_list paralist;//khai báo biến kiểu va_list cái này trong thư viện stdarg.h
    5. va_start(paralist,first);
    6. Hinh* ptrHinh=first;
    7. While(ptrHinh!=NULL)
    8. {
    9.     S+=ptrHinh->Area();
    10.     ptrHinh=va_arg(paralist,Hinh*);
    11. }
    12. va_end(paralist);
    13. return S;
    14. }
    15. void main()
    16. {
    17. ChuNhat cn1(1,4),cn2(3,7);
    18. Vuong v1(3),v2(5);
    19. tron t1(8);
    20. float S=Sum(&cn1,&cn2,&v1,&v2,NULL);
    21. cout<<"Ket qua: "<<S;
    22. }

    các bạn có thể dựa trên hàm mình mới viết để áp dụng với con trỏ hàm, cái này mình bí>>>>giúp giùm nha!!!

    ------------
    Yêu cầu bạn chấp hành nội quy.
    ht961711
    Đã được chỉnh sửa lần cuối bởi Forlorn_hope : 27-10-2007 lúc 06:25 PM.

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

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 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: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 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