Hiển thị kết quả từ 1 đến 8 / 8

Chủ đề: học về class

  1. #1
    Tham gia
    26-04-2008
    Location
    Hà Nội
    Bài viết
    154
    Like
    0
    Thanked 1 Time in 1 Post

    học về class

    mình mới bước vào OOP nên còn nhiều bỡ ngỡ ! có đề bài nè mong bạn nào biết cách xây dựng theo đúng opp 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++;
    }
    }
    ah không biết có phải tạo hàm khởi tao và hàm hủy không nhỉ ! bác nào biết thì chỉ giúp

    mình vừa đọc mấy bài về opp của tiền bối trên forom từ mấy năm trước ! tổng hợp thành cái nè ! bạn nào muốn voc nhanh opp thì dùng nhé ! mình mai thi nên đọc cái ngắn nè chắc hữu hiệu !

    của bác wheremylove? đó

    http://www.box.net/shared/xw74xp0ws4
    Được sửa bởi calme1202 lúc 18:36 ngày 31-05-2008 Reason: Bổ sung bài viết
    Quote Quote

  2. #2
    Tham gia
    16-07-2004
    Bài viết
    337
    Like
    0
    Thanked 0 Times in 0 Posts
    Cách viết của bạn không manh tính hướng đối tượng ! Thực chất mấu chốt chỗ này nằm ở cách so sánh 2 phần tử. Cho nên bạn chỉ cần viết hàm so sánh tương ứng cho 3 trường hợp. Vì chỉ cần viết 1 hàm sort rồi "plug" hàm so sánh vào thôi .

  3. #3
    Tham gia
    08-01-2007
    Location
    Krypton Planet
    Bài viết
    44
    Like
    0
    Thanked 0 Times in 0 Posts
    Cách viết của bạn là sai hướng đối tượng hoàn toàn, sai 100% :d

    Không biết bạn để cái private mang[100] để làm gì, có xài đến đâu.

    Hàm xếp tăng hay giảm là của lớp mang, mà tại sao lại đưa đối số đi xếp thằng khác, cái này chả khác gì 1 hàm global cả, ko liên quan gì đến lớp mang hết.

  4. #4
    Tham gia
    26-04-2008
    Location
    Hà Nội
    Bài viết
    154
    Like
    0
    Thanked 1 Time in 1 Post
    mình đã sửa code một ít rùi ? ah chỉ giúp mình những chỗ sai tiếp nhé ! chưa có kinh nghiệm trong gì trong OPP mà

    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 sửa bởi calme1202 lúc 09:29 ngày 31-05-2008

  5. #5
    Tham gia
    16-07-2004
    Bài viết
    337
    Like
    0
    Thanked 0 Times in 0 Posts
    Giờ bạn đọc cuốn Design Partern đi( tham khảo Mẫu Template method ) sẽ hiểu cách giải vấn đề này.
    Cách trên vẫn chưa mang tính hướng đối tượng

  6. #6
    Tham gia
    26-04-2008
    Location
    Hà Nội
    Bài viết
    154
    Like
    0
    Thanked 1 Time in 1 Post
    Quote Được gửi bởi edogawaconan View Post
    Giờ bạn đọc cuốn Design Partern đi( tham khảo Mẫu Template method ) sẽ hiểu cách giải vấn đề này.
    Cách trên vẫn chưa mang tính hướng đối tượng
    hướng giải quyết theo OOP khoa học thật ! mình thấy rất thú vị
    nhưng khi áp vào bài này thì có vướng mắc đó là làm sao xây dựng được hàm sắp xếp tổng quát rồi! sau đó lại tách được điều kiện ra để sử dụng lai phép so sánh này (cái nè là khó nhứt )
    bạn nào có kinh nghiệm trong vấn đề nè thì chỉ mình với ! với trường hợp giảm và tăng thì còn làm được chứ với 2 ý sau mình không biết đưa điều kiện kiểu gì để sử dụng lại hàm sắp xếp !

  7. #7
    Tham gia
    16-07-2004
    Bài viết
    337
    Like
    0
    Thanked 0 Times in 0 Posts
    Bạn tham khảo code dưới nhé :
    Code:
    class compare
    {
    public:
       virtual isbetter(int a,int b)=0;
    
    }
    
    class tang : public compare
    {
     virtual isbetter(int a, int b)
     {
        return b>a;
     }
       
    }
    
    class giam : public compare
    {
     virtual isbetter(int a,int b)
     {
       return a>b;
     }
    }
    
    void main()
    {
    
      int a[100];
      compare* a = new tang();//Neu muon giam thi new giam()
      for(int i = 0;i<99;i++)
         for(int j = i;j<100;j++)
            if(a.isbetter(a[i],a[j])
               hoanvi(a[i],a[j]);
    
    
    }
    Tương tự bạn tạo một lớp abs để cho trường hợp 3.

  8. #8
    Tham gia
    26-04-2008
    Location
    Hà Nội
    Bài viết
    154
    Like
    0
    Thanked 1 Time in 1 Post
    đang bận thi lên lâu mới lên diễn đàn
    thank bạn nhé!

Bookmarks

Quy định

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