Announcement

Collapse
No announcement yet.

ai giúp em với cái code này với... nhức đầu với nó quá.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • ai giúp em với cái code này với... nhức đầu với nó quá.

    PHP Code:
    #include <iostream>
    using namespace std;
    #include <stdlib.h>
    #include <time.h>
    #include <assert.h>
    #include <conio.h>
    class matrix// Ma tran vuong
    {
    public:
        
    matrix(int a,int b);
        ~
    matrix();
        
    void display();
        
    int operator () (int i,int j);
        
    friend matrix operator + (matrix z,matrix y);
        
    int getsize();
    private:
        
    int size;
        
    int flag;                                            
        
    int **ptr;                                            
    };
    int matrix::getsize()
    {
        return 
    size;
    }
    matrix::matrix(int b,int c)
    {
        
    flag=c;
        
    size=b;
        
    ptr=new int *[size];
        
    int *ptr1=new int[size*size];
        for(
    int i=0;i<size;i++)
        {
            
    ptr[i]=ptr1+i*size;
        }
        for(
    int i=0;i<size;i++)
        {
            for(
    int j=0;j<size;j++)
            {
                
    ptr[i][j]=flag;
            }
        }
    }
    matrix::~matrix()
    {
        
    delete []ptr[0];
        
    delete []ptr;
    }
    int matrix::operator()(int i,int j)
    {
        return 
    ptr[i][j];
    }
    matrix operator + (matrix z,matrix y)
    {
        
    int n=z.getsize();
        
    matrix c(n,1);
        for(
    int i=0;i<n;i++)
        {
            for(
    int j=0;j<n;j++)
            {
                
    c(i,j)=z(i,j)+y(i,j);
            }
        }
        return 
    c;
    }
    void matrix::display()
    {
        for(
    int i=0;i<size;i++)
        {
            for(
    int j=0;j<size;j++)
            {
                
    cout<<ptr[i][j]<<" ";
            }
            
    cout<<endl;
        }
    }
    void main()
    {
        
    matrix a(3,1),b(3,2),c(3,0);
        
    cout<<" Ma tran A : "<<endl;
        
    a.display();
        
    cout<<" Ma tran B: "<<endl;
        
    b.display();
        
    cout<<" Ma tran C=A+B :"<<endl;
        
    c=a+b;
        
    c.display();
        
    getch();

    Last edited by toannv; 09-03-2014, 01:29.

  • #2
    Em phải nói ra có chuyện gì với cái code thì mọi người mới giúp được chứ.

    Comment


    • #3
      Không biết bạn thắc mắc, hay không hỉu chổ nào. Bạn tham khảo cái này...
      Bài này mình đã fix lại một số chổ :
      PHP Code:
      #include "iostream"
      using namespace std;

      class 
      matrix// Ma tran vuong
          
      {
          private:
              
      int size;
              
      int flag;
              
      int **mang;    
          public:
              
      matrix(int size=0,int flag=0);//ham tao
              
      ~matrix();//ham huy
              
      void display();
              
      int operator () (int i,int j);
              
      //dinh nghia phep toan + 2 ma tran
              
      friend matrix operator + (matrix z,matrix y);
              
      //ham freind truy cap dc vao thanh phan private nen khong can ham getsize()
              //ham ben ngoai lop co the truy dc thanh phan private(vd:size) thong qua ham getsize()
                      //ham nay khong nen dung friend
          
          
      };

          
      matrix::matrix(int size,int flag)
          {
              
      this->size=size;
              
      this->flag=flag;
              
      //khoi tao mang dong 2 chieu size cot
              
      mang=new int *[size];
                      
      //cap phat vung nho cho tung cot
              
      for(int i=0;i<size;i++)
                  
      mang[i]=new int[size];
              
      //Nhap mang
              
      for(int i=0;i<size;i++)
                  for(
      int j=0;j<size;j++)
                  {
                      
      mang[i][j]=flag;//<=>*(*(mang+i)+j)=flag;
                  
      }

          }
          
      matrix::~matrix()
          {
              
      //ham huy, noi chung la xoa lan luoc dia chi cac con tro,
              //gia phong bo nho
              
      mang=NULL;
              
      delete mang;
              
      delete []mang;
          }
          
      int  &matrix::operator()(int i,int j)
          {
              return 
      mang[i][j];
          }
          
      matrix operator + (matrix z,matrix y)
          {
              
      matrix c(z.size);//khoi tao mang c n phan tu

              
      for(int i=0;i<z.size;i++)
                  for(
      int j=0;j<z.size;j++)
              
      c(i,j)=z(i,j)+y(i,j);
              return 
      c;
          }
          
      void matrix::display()
          {
              for(
      int i=0;i<size;i++)
                  for(
      int j=0;j<size;j++)
                  {
                      
      cout<<mang[i][j]<<" ";
                      if(
      j==size-1)
                          
      cout<<endl;
                  }
          }
          
      void main()
          {
              
      matrix a(3,1),b(3,1),c;
              
      cout<<" Ma tran A : "<<endl;
              
      a.display();
              
      cout<<" Ma tran B: "<<endl;
              
      b.display();
              
      cout<<" Ma tran C=A+B :"<<endl;
              
      c=a+b;
              
      c.display();
              
      system("pause");
          } 
      :sunglasses:To get success, the first thing is you must understand yourself.

      Comment


      • #4
        tks nhiều ạ... cảm ơn chị đã quan tâm

        Comment


        • #5
          Vậy lỗi CT của em là do Constructor với hàm đa năng hóa khi gọi matrix c đúng không ạ ??

          Comment


          • #6
            c=a+b ????

            Comment


            • #7
              1 khi class có biến thành viên đc cấp phát động, thì em nên implement đủ các phương thức sau:
              + Copy constructor
              + Toán tử gán (dạng deep copy)
              +Destructor

              - Do đó code mà bạn 12520406 đó bị lỗi tiềm ẩn khá nhiều. destructor implement cũng sai nữa . Bạn set mang = NULL sau đó mới gọi delete ==> vô nghĩa , thực chất là chưa giải phóng vùng nhớ j cả. Mà delete cũng nhầm nữa.
              - Dưới là code a chỉnh lại từ code của em

              PHP Code:

              #include <iostream>
              using namespace std;
              #include <stdlib.h>
              #include <time.h>
              #include <assert.h>
              #include <conio.h>
              class matrix// Ma tran vuong
              {
              public:
                  
              matrix(int aint b);
                  
              matrix(const matrixa);
                  ~
              matrix();
                  
              void display() const;
                  
              friend matrix operator + (matrix zmatrix y);
                  
              matrixoperator=(const matrixa);
              private:
                  
              int size;
                  
              int flag;
                  
              int **ptr;
              };
              /**
              Khoi tao ma tran vuong [b][b]
              voi gia tri ban dau la c
              */
              matrix::matrix(int bint c)
              {
                  
              flag c;
                  
              size b;
                  
              ptr = new int *[size];
                  for (
              int i 0i<sizei++)
                  {
                      
              ptr[i] = new int[size];
                  }
                  for (
              int i 0i<sizei++)
                  {
                      for (
              int j 0j<sizej++)
                      {
                          
              ptr[i][j] = flag;
                      }
                  }
              }
              matrix::matrix(const matrixa)
              {
                  
              flag a.flag;
                  
              size a.size;
                  
              ptr = new int *[size];
                  for (
              int i 0i<sizei++)
                  {
                      
              ptr[i] = new int[size];
                  }
                  for (
              int i 0i<sizei++)
                  {
                      for (
              int j 0j<sizej++)
                      {
                          
              ptr[i][j]  = a.ptr[i][j];
                      }
                  }
              }
              matrixmatrix::operator=(const matrixa)
              {
                  
              flag a.flag;
                  
              size a.size;
                  
              ptr = new int *[size];
                  for (
              int i 0i<sizei++)
                  {
                      
              ptr[i] = new int[size];
                  }
                  for (
              int i 0i<sizei++)
                  {
                      for (
              int j 0j<sizej++)
                      {
                          
              ptr[i][j] = a.ptr[i][j];
                      }
                  }
                  return *
              this;
              }
              matrix::~matrix()
              {
                  for (
              int i 0sizei++)
                  {
                      
              delete[] ptr[i];
                  }
                  
              delete[] ptr;
              }

              matrix operator + (matrix zmatrix y)
              {
                  
              int n z.size;
                  
              matrix c(n0);
                  for (
              int i 0i<ni++)
                  {
                      for (
              int j 0j<nj++)
                      {
                          
              c.ptr[i][j] = z.ptr[i][j] + y.ptr[i][j];
                      }
                  }
                  return 
              c;
              }
              void matrix::display() const
              {
                  for (
              int i 0i<sizei++)
                  {
                      for (
              int j 0j<sizej++)
                      {
                          
              cout << ptr[i][j] << " ";
                      }
                      
              cout << endl;
                  }
              }
              void main()
              {
                  
              matrix a(31), b(32), c(30);
                  
              cout << " Ma tran A : " << endl;
                  
              a.display();
                  
              cout << " Ma tran B: " << endl;
                  
              b.display();
                  
              cout << " Ma tran C=A+B :" << endl;
                  
              b;
                  
              c.display();
                  
              system("pause");

              Last edited by 08520016; 11-03-2014, 02:39.

              Im a british accent lover

              Comment

              LHQC

              Collapse
              Working...
              X