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ố 16 kết quả

Đề tài: Template trong bài toán ma trận - Help me !!!

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

    Mặc định Template trong bài toán ma trận - Help me !!!

    Đề bài:
    Xây dựng hàm tải bội(đa năng) và hàm mẫu(template) thực hiện các công việc sau:
    -Nhận vào một ma trận số int hoặc long hoặc float. Trả ra ma trận đã được sắp xếp tăng dần theo giá trị của các phần tử trong ma trận.
    -Nhận vào một ma trạn số int hoặc long hoặc float. Trả ra giá trị của phần tử max trong ma trận
    -Đa năng hóa toán tử nhập(>>) và xuất(<<) để có thể nhập và xuất trực tiếp ma trận với đối tượng cin và cout.
    Vấn đề ở đây là tôi muốn làm trên ma trận động(cấp phát bộ nhớ đủ với kích thước ma trận nhập vào) và ko sử dụng class trong bài
    Mọi người giúp tôi làm gấp bài này với. Sắp phải nộp rồi

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

    đây là một phần trong đồ án của mình.
    mình làm.

    đây là phần danh sách liên kết bạn tham khảo nhé.
    PHP Code:

    //Lop List
    template<class T>class CList
    {
    public:
        
    CNode<T> *pHead;
        
    CNode<T> *pTail;
    public:
        
    CList(){return;};
        
    void Init()
        {
            
    pHead pTail NULL;
        }
        
        
    void Insert(CNode<T> *node)
        {
            if(
    pHead==NULL)
            {
                
    pHead node;
                
    pTail pHead;
                
    //pTail->pNext = NULL;
            
    }
            else
            {
                
    pTail->pNext node;
                
    pTail node;
                
    //pTail->pNext = NULL;
            
    }
        }
        
    void AddTail(CNode<Tnode)
        {
            
    pTail->pNext node;
            
    pTail node;
            
    pTail->pNext NULL;
        }
        
    void Insert(T data)
        {
            
    CNode<T> *tmp;
            
    tmp = new CNode<T>;
            
    tmp->Init(data);

            
    Insert(tmp);
        }
        
    int IsEmpty()
        {
            if(
    pHead == NULL)
                return 
    1;
            return 
    0;
        }
        ~
    CList(){
        
    //    delete pTail;
        //    delete pHead;
        
    };
        
    void Detach()
        {
            
    delete pTail;
            
    delete pHead;
        }

        
    void QSort(CList<T> &lSource)
        {
            
    CNode<T> *p,*X;
            
    CList<Tl1,l2;

            if(
    lSource.pHead == lSource.pTail)
                return;
            
    l1.pHead l1.pTail NULL;
            
    l2.pHead l2.pTail NULL;

            
    lSource.pHead;
            
    lSource.pHead X->pNext;
            
            while(
    lSource.pHead != NULL)
            {
                
    lSource.pHead;
                
    lSource.pHead p->pNext;
                
    p->pNext NULL;
                if(
    p->data X->data)
                    
    l1.Insert(p);
                else
                    
    l2.Insert(p);
            }

            
    QSort(l1);
            
    QSort(l2);

            if(
    l1.pHead != NULL)
            {
                
    lSource.pHead l1.pHead;
                
    l1.pTail->pNext X;
            }
            else
                
    lSource.pHead X;

            
    X->pNext l2.pHead;

            if(
    l2.pHead != NULL)
                
    lSource.pTail l2.pTail;
            else
                
    lSource.pTail X;
        }

        
    CList operator=(CList l)
        {
            
    this->pHead l.pHead;
            
    this->pTail l.pTail;
            return *
    this;
        }
        
    }; 
    chúc bạn thành công.

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

    Đây là bài tui mới làm. Vẫn bị lỗi. Mọi người tìm giúp với
    PHP Code:
    #include<iostream.h>
    #include<conio.h>
    #include<iomanip.h>
    #include<process.h>
    template <class T>
    struct matran
    {
     
    int h,c;
     
    *v;
    };
    //-----------------------------
    template <class T>
    istreamoperator>>(istreamis,matran<T>& mt)
    {

     
    cout<<"Nhap so hang ma tran:"is>>mt.h;
     
    cout<<"Nhap so cot ma tran:"is>>mt.c;
     
    cout<<"Nhap ma tran:";
     for(
    int i=0;i<mt.h;i++)
     for(
    int j=0;j<mt.c;j++)
      {
       
    cout<<"a["<<i<<"]"<<"["<<j<<"]=";
       
    is>>mt.v[i*mt.c+j];
      }
      return 
    is;
    }
    //--------------------------
    template <class T>
    ostreamoperator<<(ostreamosmatran<T> &mt)
    {
     
    os<<"Ma tran da nhap:"
       
    <<endl;
     for(
    int i=0;i<mt.h;i++)
      {
       for(
    int j=0;j<mt.c;j++)
       
    os<<setw(6)<<mt.v[i*mt.c+j];
       
    os<<"\n\n";
      }
      return 
    os;
    }
    //--------------------------------------
    template <class T>
    void sapxep(matran<T> &mt)
    {
      
    T tg;
       for(
    int i=0;i<mt.h*mt.c;i++)
         for(
    int j=i+1;j<mt.h*mt.c;j++)
          if(
    mt.v[i]>mt.v[j])
        {
          
    tg=mt.v[i];
          
    mt.v[i]=mt.v[j];
          
    mt.v[j]=tg;
        }
      
    cout<<"Ma tran da sap xep"<<endl<<mt;
      
    getch();

    }
    //-------------------------------------
    template <class T>
    T max(matran<T> &mt)
    {
      
    T max;
      
    max=mt.v[0];
      for(
    int i=0;i<mt.h*mt.c;i++)
         if(
    mt.v[i]>maxmax=mt.v[i];
      return 
    max;
    }
    //-------------------------------------
    template <class T>
    void run(matran<T> &mt)
    {
     
    clrscr();
     
    cin>>mt;
     
    cout<<"Ma tran la :"<<endl<<mt;
     
    sapxep(mt);
     
    T imax=max(mt); cout<<endl<<"Phan tu max trong ma tran la: "<<imax;
    }
    //-------------------------------------

    void main()
    {
     
    clrscr();
     
    matran<inta;
     
    matran<longb;
     
    matran<floatc;
     
    char chon;
     while(
    1)
     {
       
    cout<<endl<<"1. Ma tran kieu int";
       
    cout<<endl<<"2. Ma tran kieu long";
       
    cout<<endl<<"3. Ma tran kieu float";
       
    cout<<endl<<"4. Thoat";
       
    chon=getch();
       switch(
    chon)
        {
          case 
    '1'run(a);
          case 
    '2'run(b);
          case 
    '3'run(c);
          case 
    '4': exit(1);
          default : 
    cout<<endl<<"Ban chon sai roi!";
        }
     }


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

    mình sửa lỗi to nhất thôi nhé
    Code:
    template <class T> 
    struct matran 
    { 
     int h,c; 
     T *v;
     friend istream& operator>>(istream&,matran<T>&);
     friend ostream& operator<<(ostream&,matran<T>&);
    };
    bạn thiếu 2 dòng đó kìa
    code ra gió bão

  5. #5
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Pó hand với cu này. nếu đã kỳ công code như vậy rùi sao không viết hẵn một class luôn đi cho đỡ mệt chứ viết struct như này vừa khó quản lý lại vừa mất công lại khó dùng nữa chứ.

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

    Mặc định Template trong bài toán ma trận - Help me !!!

    Mình mới học cơ bản về C++ thôi có biết đâu trong struct bắt buộc phải có friend. Bạn có thể chỉ rõ hơn được ko
    Còn về vấn đề class thì trong bài này ko được dùng

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

    tại vì overload toán tử chỉ có trong C++ thôi bạn à nên trong đây bạn nên hiểu struct là 1 class với tất cả là public
    code ra gió bão

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

    - Trong C++ struct và class là như nhau, chỉ khác default access specifier thôi, là cái public và private đó.
    - Bài trên của cậu có 1 lỗi sai nghiêm trọng, con trỏ của cậu chưa cấp phát mà dùng tỉnh bơ như không có chuyện gì xảy ra cả ?
    - Trong C++ không có cái kiểu .h cho header file của thư viện.
    - Tui đoán cậu dùng TC++ hoặc borland C++, và cậu cũng không dùng namespace std:: hay để cái suffix std:: trước các hàm trong thư viện C++ tức là sai ! Cậu nên nhớ cậu học C++ chứ không phải chỉ học TC++ hay Borland C++, viết code phải theo standard, chạy được trên compiler này cũng phải chạy được trên compiler khác.
    - ostream và istream không nhất thiết phải là friend function.
    - Cậu thiếu 1 số chỗ cần phải bỏ vào từ khóa "const". Ví dụ hàm max và hàm xuất ra của cậu không hề có modify data vậy tại sao không gán cho dữ liệu "const" ?
    - Không bao giờ để input và output trực tiếp vào hàm vì giả nếu tui muốn xài lại code của cậu và muốn chuyển output sang tiếng Anh chẳng hạn không lẽ tui đi edit từ đầu tới cuối tất cả các chuỗi cậu in ra ? Nên tập thói quen bỏ output và input ra riêng biệt.
    - Còn về thuộc tính thì nếu là tui, tui sẽ gán private cho m_hang và m_cot, vì nhỡ nếu client sử dụng phép gán đâu đó trong main() mà sữa giá 2 giá trị này thì hậu quả sẽ...
    - void main() is outdated, dùng int main() cho quen đi cậu à !
    - Tui sữa lại những cái cơ bản và cần thiết, cậu coi mà implement các hàm còn lại như sort và max. Sort thì lại dùng bubble -> tập viết quicksort hay merge sort cho nó quen !
    C++ Code:
    1. #include <iostream>
    2. #include <iomanip>
    3. #include <string>
    4.  
    5. using namespace std;
    6.  
    7. const int    LON_NHAT = 8;
    8. const string thong_diep[ LON_NHAT ] =
    9. {
    10.     "\nNhap hang : "
    11.     ,
    12.     "\nNhat cot  : "
    13.     ,
    14.     " + Hang thu ["
    15.     ,
    16.     " + Cot thu  ["
    17.     ,
    18.     " -> nhap : "
    19.     ,
    20.     "\n Nhap cac phan tu \n"
    21.     ,
    22.     "\n Xuat cac phan tu cua ma tran \n"
    23.     ,
    24.     "\n Chao tam biet, hen gap lai !\n"
    25. };
    26.  
    27.  
    28. void inThongDiepToiNguoiDung( ostream& out, const string& td )
    29. {
    30.     out << td;
    31. }
    32.  
    33.  
    34. template< typename T >
    35. struct Matran
    36. {
    37.     unsigned m_hang, m_cot;
    38.     T*       ptr;
    39.  
    40.     Matran( unsigned gia_tri_hang = 0, unsigned gia_tri_cot = 0 )
    41.         :m_hang( gia_tri_hang ), m_cot( gia_tri_cot )
    42.     {
    43.         ptr = new T[ m_hang * m_cot ];
    44.     }
    45.  
    46.     ~Matran()
    47.     {
    48.         delete[] ptr;
    49.     }
    50.  
    51.     void inSoHangSoCot( int x, int y ) const
    52.     {
    53.         inThongDiepToiNguoiDung( cout, thong_diep[ 2 ] );
    54.         cout << x;
    55.         inThongDiepToiNguoiDung( cout, thong_diep[ 3 ] );
    56.         cout << y;
    57.         inThongDiepToiNguoiDung( cout, thong_diep[ 4 ] );
    58.     }
    59. };
    60.  
    61.  
    62. template< typename T >
    63. istream& operator >>( istream& input, Matran< T >& mt )
    64. {
    65.     inThongDiepToiNguoiDung( cout, thong_diep[ 0 ] );
    66.     input >> mt.m_hang;
    67.  
    68.     inThongDiepToiNguoiDung( cout, thong_diep[ 1 ] );
    69.     input >> mt.m_cot;
    70.  
    71.     inThongDiepToiNguoiDung( cout, thong_diep[ 5 ] );
    72.     for( int x = 0; x < mt.m_hang; ++x )
    73.     {
    74.         for( int y = 0; y < mt.m_cot; ++y )
    75.         {
    76.             mt.inSoHangSoCot( x, y );
    77.             input >> mt.ptr[ x * mt.m_cot + y ];
    78.         }
    79.     }
    80.  
    81.     return input;
    82. }
    83.  
    84.  
    85. template< typename T >
    86. ostream& operator <<( ostream& output, const Matran< T >& mt )
    87. {
    88.     inThongDiepToiNguoiDung( cout, thong_diep[ 6 ] );
    89.     for( int x = 0; x < mt.m_hang; ++x )
    90.     {
    91.         for( int y = 0; y < mt.m_cot; ++y )
    92.         {
    93.             output << setw( 6 ) << mt.ptr[ x * mt.m_cot + y ];
    94.         }
    95.         output << "\n";
    96.     }
    97. }
    98.  
    99.  
    100. int main()
    101. {
    102.     Matran< int > ma;
    103.  
    104.     cin >> ma;
    105.     cout << ma;
    106.  
    107.     inThongDiepToiNguoiDung( cout, thong_diep[ 7 ] );
    108.  
    109.     return 0;
    110. }

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

    tại hầu hết các trường đại học ở VN vẫn còn sử dụng TC/BC 3.1 để giảng dạy nên code của tụi em cũng bị ảnh hưởng ...
    Em lên các trang code của nước ngoài thấy họ viết theo chuẩn STL ko nên giờ cũng đang muốn nghiên cứu lại, anh RR học giáo trình nào hướng dẫn về STL từ đầu thì chỉ cho em với ... em tìm trên mạng thấy nhiều loại quá
    code ra gió bão

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

    - Hồi anh học STL từ cuốn Standard Template Library. Nhưng học 1 hồi thì quay lại học Template programming để tìm hiểu internal của STL( hồi đó vì bác TQN để hướng dẫn anh như vậy ) và anh cảm thấy học kiểu này hiểu rất sâu vì em hiểu bản chất của nó em sẽ dùng nó dễ dàng hơn, có bug cũng fix được dễ dàng. Đó là lý do tại sao ta nên học kĩ Data Structure and Algorithm.
    - Sau khi em viết vững thì quay lại đọc cuốn Effective STL của Scott Meyers, và đây là 1 trong những cuốn sách mà anh cho là HAY nhất mà anh từng đọc, từ lời văn cho đến cách dẫn chuyện của Scott thực sự làm anh mê muội T_T !
    - Một phần là code trên anh chỉ viết theo standard C++ thôi chứ cũng chẳng có liên quan gì nhiều đến STL cả. Em cứ viết nhiều và đọc nhiều code thì sẽ tích góp được kinh nghiệm.
    - Chữ ký của em cũng có nhiều game đó, anh thì chưa có đọc thử, có vào link coi thôi, nhưng thử suy nghĩ và re-write lại cho nó tốt hơn. Post lên cho mọi người đọc, tập comment, viết lại thì dùng STL thử xem. Kẹt chỗ nào thì mọi người sẽ giúp.
    - Càng sử dụng nó nhiều càng thành thạo, viết đi viết lại project mình đã làm cũng là 1 cách học tốt.

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

  1. C++0x Tutorial Quá tải toán tử trong C++ [ Chi tiết ]
    Gửi bởi luc13aka47 trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 23
    Bài viết cuối: 25-03-2013, 10:51 PM
  2. Xử lý Bài toán mã đi tuần trong lập trình C
    Gửi bởi phanvanngoc trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 21-01-2011, 10:28 PM
  3. Kỹ thuật C++ Template Method có liên quan gì đến template trong C++ ko?
    Gửi bởi ten_truycap trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 22-10-2010, 11:26 PM
  4. Cách xây dựng và sử dụng template và mảng template trong C++?
    Gửi bởi nhatnha 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: 03-08-2010, 06:24 PM
  5. Tìm giá trị lớn nhất của hàm, bài toán Olympic SV toàn quốc 2009
    Gửi bởi hienclubvn trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 26
    Bài viết cuối: 25-06-2010, 10:18 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