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

Đề tài: học cách viết class !

  1. #1
    Ngày gia nhập
    05 2008
    Nơi ở
    Hà Nội
    Bài viết
    16

    Mặc định học cách viết class !

    mình mới tự học từ C lên c++ nên trình và kinh nghiệm để viết class là chưa có gì ! còn nhiều băn khoăn. mình muốn từ bài tập này để vỡ thêm được nhiều điều :
    sau đây là bài đầu tiên mình viết class : chắc nó còn nhiều chỗ sai : mọng các bác biết nhiều về OOP chỉ giúp :
    đề bài:

    Người ta quan tâm đến việc sắp xếp 1 mảng các số thực n gồm n phần tử a[0],a[1]..., a[n-1] theo các yêu cầu sau:

    -Sắp theo thứ tự tăng dần
    -Sắp theo thứ tự giảm dần
    -Sắp theo trị tuyệt đối tăng dần
    -Sắp xếp để các số không âm về đầu mảng và tăng dần, còn các số âm thì về cuối mảng và giảm dần.

    Bằng cách tận dụng khả năng dùng lại mã nguồn của ngôn ngũ lập trình hướng đối tượng, ta có thể giải quyết ngắn gọn bài toán trên. Hãy:
    Đề nghị giải pháp thiết kế và cài đặt các lớp để giải quyết tất cả các bài toán theo loại nói trên.


    lời giải của mình như sau ! nhưng chưa hoàn thiện mong các bác góp ý sao đúng cú pháp opp nhé !

    Code:
    #include<iostream.h>
    #include<conio.h>
    #include<stdio.h>
    #include<math.h>
    class mang
    {
    private :
    int n;//n phan tu khi ta khoi tao ;
    int a[100];
    public :
    mang (int so)
    {
    n= so;
    }
    void hoanvi(int&b,int&c)
    {
        int tg;
    	  tg = b;
    	  b= c;
    	  c= tg;
    }
    void tang(int*a ,int n);// a sẽ là địa chỉ của mảng còn n là số phần tử trong mảng
    void giam(int*a ,int n);
    void tuyetdoi(int*a ,int n);
    void dieukien(int*a ,int n);
    
    };
    
    //////////////////////////////////////////////////////////////////
    void mang::tang(int*a,int n)
    {
    int i,j,tg;
    i=0;
    for (i=0;i<n;i++)
        {
           for(j=i;j<n;j++)
    	   if(a[j]<a[i]) mang::hoanvi(a[i],a[j]);
    	 }
    }
    void mang::giam(int *a,int n)
    {
    mang::tang(a, n);
    for(int i = 0; i<n/2 ; i++)
    mang::hoanvi(a[i],a[n-i]);
    }
    void mang::tuyetdoi(int *a,int n)
    {
    int i,j;
    i=0;
    for (i=0;i<n;i++)
        {
           for(j=i;j<n;j++)
              if(fabs(a[j])<fabs(a[i]))
              mang::hoanvi(a[i],a[j]);
        }
    }
    void mang::dieukien(int *a,int n)
    {
    int i,j,k=0,h=0;
    int b[100],c[100];
    for(i=0;i<n;i++)
    {
    if(a[i]>=0)
    {
    b[k]= a[i];
    k++;
    }
    c[h]= a[i];
    h++;
    }
    mang::tang(b,k);
    mang::giam(c,h);
    for(i=0;i<=k;i++)
    a[i]=b[i];
    for(i=k;i<=h+k;i++)
    {
    a[i]=c[j];
    j++;
    }
    }
    không biết mình có phải xây dựng hàm truyền giá trị cho các phần tử của mảng không nhỉ ! nêu không thì làm sao mà có thể cập nhật các phần tử vào mảng được !
    Đã được chỉnh sửa lần cuối bởi calme1202 : 31-05-2008 lúc 06:24 PM.

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    444

    Chưa nói gì đến OOP. Bạn hãy chữa lại code để một thuật toán chỉ code một lần thôi. Mình thấy trong code của bạn, cùng một thuật toán sắp xếp mà bạn code đến những 4 lần.

  3. #3
    Ngày gia nhập
    05 2008
    Nơi ở
    Hà Nội
    Bài viết
    16

    mình thấy là nó không hoàn toàn giống nhau ! mình đã sửa những chỗ lặp lại !
    mình muốn hỏi thêm về bài này đã đúng cú pháp OOP chưa nhỉ ! và nếu xây dựng chương trình sử dụng cái class này thì mình có phải thêm phương thức tạo các phần tử của mảng cho nó không vậy
    Đã được chỉnh sửa lần cuối bởi calme1202 : 31-05-2008 lúc 06:36 PM.

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    444

    Trích dẫn Nguyên bản được gửi bởi calme1202 Xem bài viết
    mình thấy là nó không hoàn toàn giống nhau ! mình đã sửa những chỗ lặp lại !
    Bạn vẫn chỉ nghĩ tới 4 kiểu sắp xếp cụ thể của đề bài hiện tại thì chưa được. Mục đích của đề bài là dùng lại mã nguồn (còn OOP chỉ là phương tiện), nên hãy nghĩ tới một đề bài tương lai. Mã nguồn của bạn có thể dùng lại được không, dùng lại ở mức nào nếu trong tương lai, sẽ cần phải sắp xếp theo vài thứ tự khác?

    Bài của bạn chỉ có một thuật toán sắp xếp. Có 4 kiểu sắp xếp vì thuật toán ấy áp dụng lên những thứ tự so sánh khác nhau. Nên việc cần phải giải quyết trước tiên là làm sao tách rời phép so sánh ra khỏi thuật toán.

    Việc tách rời này sẽ còn có ích nếu yêu cầu tương lai đi theo một hướng khác: vẫn chỉ 4 thứ tự so sánh đó, nhưng phải cài đặt một hay vài thuật toán sắp xếp khác có tính năng và hiệu quả cần thiết.

    Trích dẫn Nguyên bản được gửi bởi calme1202 Xem bài viết
    mình muốn hỏi thêm về bài này đã đúng cú pháp OOP chưa nhỉ ! và nếu xây dựng chương trình sử dụng cái class này thì mình có phải thêm phương thức tạo các phần tử của mảng cho nó không vậy
    Cú pháp chỉ là hình thức. Nội dung mới là quan trọng.

  5. #5
    Ngày gia nhập
    05 2008
    Nơi ở
    Hà Nội
    Bài viết
    16

    thực ra mình đang học cái hình thức mà ! hihi có để ý nhiều vào nội dung đâu ! nhưng nếu bạn nói vậy thì mình sẽ sửa code vậy ! mà sửa cũng không dễ nhỉ !

  6. #6
    Ngày gia nhập
    05 2008
    Nơi ở
    Hà Nội
    Bài viết
    16

    Mặc định học cách viết class !

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Bài của bạn chỉ có một thuật toán sắp xếp. Có 4 kiểu sắp xếp vì thuật toán ấy áp dụng lên những thứ tự so sánh khác nhau. Nên việc cần phải giải quyết trước tiên là làm sao tách rời phép so sánh ra khỏi thuật toán.
    mình nghĩ mãi mà chưa ra cách tách phép so sánh ra được ! tăng giảm thì có thể chứ trị tuyệt đối thấy khó thật !
    bạn chắc có nhiều kinh nghiệm trong việc sử lí cái nè ! mác nước cho mình làm sao tách rời phép so sánh ra khỏi thuật toán với

  7. #7
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất nhiều sóng gió
    Bài viết
    444

    Trích dẫn Nguyên bản được gửi bởi calme1202 Xem bài viết
    mình nghĩ mãi mà chưa ra cách tách phép so sánh ra được ! tăng giảm thì có thể chứ trị tuyệt đối thấy khó thật !
    Uh thì cứ cho là chỉ có 2 trường hợp thứ tự tăng và thứ tự giảm mà bạn đã biết cách làm đi. Bạn code như thế nào?

  8. #8
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    mình làm một demo về OOP cho bạn nhé
    cái này là OOP nhưng not well-formed and well-designed
    bạn dựa vào đây để tạo và cải tiến ^^!

    C++ Code:
    1. #define bool int
    2. #define MAX_ELEMENTS 100
    3.  
    4. class ArraySort
    5. {
    6.     private:
    7.         int current_max; // number of elements available in array, smaller than MAX_ELEMENTS
    8.         int array[MAX_ELEMENTS]; // allocate max space to use
    9.         enum SortType {NATURAL, ABSOLUTE}; // type of sorting, indicate whether NATURAL value or ABSOLUTE value
    10.         enum SortOrder {INCREASE, DECREASE}; // order of sorting, indicate whether INCREASE or DECREASE
    11.     public:
    12.         /**
    13.          * CONSTRUCTORS
    14.          */
    15.         ArraySort();
    16.         ArraySort(int max_current);
    17.         ArraySort(int* array_init, int max_current);
    18.         ArraySort(int* array_init, int max_current, SortType type, SortOrder order);
    19.         /**
    20.          * PROPERTIES
    21.          */
    22.         void setMaxElements(int max);
    23.         int getMaxElements();
    24.         void setSortType(SortType sortType);
    25.         void setSortOrder(SortOrder sortOrder);    
    26.         int* getArray();
    27.         /**
    28.          * METHODS
    29.          */
    30.         void init(int max_current);
    31.         void init(int* array_init, int max_current);
    32.         void init(int value);
    33.         void init(int index, int value);
    34.         bool sort();
    35.         bool sort(SortType type);
    36.         bool sort(SortOrder order);
    37.         bool sort(SortType type, SortOrder order); 
    38.         bool isSorted();
    39. }
    None!

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Một số góp ý vì X cố tình viết dối T_T :
    - Các method không có chú thích thì khó mà hiểu được nội dung, overloading dù interface cũng nên có 1 ít instruction.
    - Thiếu tính const rất nhiều cho các phương thức .
    - "Macro is stupid substitution text with no scope and no rule". ( Sorry không phải ám chỉ X ) Nên tránh dùng marco, dùng const static để thay thế các hằng số ). Còn thực sự cần 1 đoạn thay thế nào đó thì viết hẳn lại bằng template.
    - Semicolon at the end of }; T_T !

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

  1. Cách viết class Đa Thức trong C# ( Cộng , Trừ 2 đa thức )?
    Gửi bởi vuonghao77 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 12-08-2013, 08:07 PM
  2. Viết code trên Form và viết code trong class có gì khác nhau.
    Gửi bởi hocCsharp trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 21
    Bài viết cuối: 21-01-2011, 10:37 PM
  3. Cây nhị phân viết bằng C++ sử dụng class không chạy được.
    Gửi bởi banhbeo trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 18-03-2010, 07:17 PM
  4. Viết 1 class xử lý đa thức
    Gửi bởi thangit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 28-09-2008, 01:11 AM
  5. Class Phân số viết bằng C++
    Gửi bởi soda_chanhmuoi trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 23-05-2007, 12:15 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