Forum Dhammacitta

Buddhisme dan Kehidupan => Tolong ! => Topic started by: Lex Chan on 03 January 2010, 12:20:58 AM

Title: c++ programming
Post by: Lex Chan on 03 January 2010, 12:20:58 AM
aye baru belajar OOP pake c++ neh.. :-[

gimana ya bikin class matrix pake constructor dan destructor?
alias pake dynamic memory (ukuran matrix 2 dimensinya bebas)..
Title: Re: c++ programming
Post by: Lex Chan on 03 January 2010, 12:27:35 AM
intinya sih mau belajar bikin array yang dynamic pake class..

aye googling buat tutorial, ngga ketemu yang bikin array.. :(
Title: Re: c++ programming
Post by: Sumedho on 03 January 2010, 05:29:04 AM
buat matrix yak, definenya sih begini

int matrix[x][y];

kalau dynamic sih diset waktu constructor aja x,y nya
Title: Re: c++ programming
Post by: exam on 03 January 2010, 06:29:28 AM


coba cari buku c++ from the ground up (herbert)
Title: Re: c++ programming
Post by: tesla on 03 January 2010, 12:50:35 PM
basicnya dynamic array:

int* arr;
arr = new int[5];
delete [] arr;

multi-dimension:

int** arr;

arr* = new int*[5];

arr[0] = new int[3]; // cuma contoh... ntar pake looping aja
arr[1] = new int[4];
arr[2] = new int[6];
arr[3] = new int[7];
arr[4] = new int[2];

// delete
delete [] arr[0];
delete [] arr[1];
delete [] arr[2];
delete [] arr[3];
delete [] arr[4];
delete [] arr;
Title: Re: c++ programming
Post by: tesla on 03 January 2010, 12:54:39 PM
kalau tujuannya belajar OOP, pake java aja...
lebih enak, ga perlu delete...

syntaxnya hampir sama dg C++


int[][] arr = new int[a][b]; ---> kalau simetris

int[][] arr = new int[][b]; ---> ga simetris
arr[0] = new int[x];
...
arr[b-1] = new int[z];
Title: Re: c++ programming
Post by: Lex Chan on 03 January 2010, 01:09:10 PM
Quoteclass matrix
{
 private:

 public:
   matrix(int, int);
   ~matrix();
};

matrix::matrix (int row, int col)
{
 int matrix[row][col];
 int i, j;
 for (i=0; i<row; i++)
 {
   for (j=0; j<col; j++)
   {
     cout << "mtx[" << i << "][" << j << "] = ";
     cin >> matrix[ i ][ j ];
   }
 }
};

matrix::~matrix()
{
 delete[] matrix;
};

program ini salahnya di mana? soalnya di-compile, error di bagian yang bold
Title: Re: c++ programming
Post by: tesla on 03 January 2010, 03:20:01 PM
delete[] matrix;

properties (atau variable dalam class) yg namanya matrix ga ada bro...

di deklarasi classs sama sekali ga ada variable namanya matrix:

class matrix // nama class = matrix
{
  private:

  public:
    matrix(int, int); // constructor
    ~matrix(); // destructor
};


di constructor itu bro deklarasikan sebagai local variable
dipastikan code tsb memory leak ;D


matrix::matrix (int row, int col)
{
  [b]int matrix[row][col][/b]; // ini jadi deklarasi local variable, bukan variable milik class jadi harus di delete dalam scope { } ini juga
  int i, j;
  for (i=0; i<row; i++)
  {
    for (j=0; j<col; j++)
    {
      cout << "mtx[" << i << "][" << j << "] = ";
      cin >> matrix[ i ][ j ];
    }
  }
};
Title: Re: c++ programming
Post by: tesla on 03 January 2010, 03:23:48 PM
kalau solusi utk non dynamic tambahin di deklarasi  classnya:

class matrix
{
 private:
   int[3][3] data;
 public:
   matrix();
   ~matrix();
};

matrix::matrix ()
{
 int i, j;
 for (i=0; i<3; i++)
 {
   for (j=0; j<3; j++)
   {
     cout << "mtx[" << i << "][" << j << "] = ";
     cin >> data[ i ][ j ];
   }
 }
};

matrix::~matrix()
{
 // ga ada yg perlu di delete bro... sebab ini semua ga pake new
};













ps. code bro sebelumnya ga memory leak. krn tidak ada pake alokasi memory secara manual (new)...
sorry salah judge :P
Title: Re: c++ programming
Post by: tesla on 03 January 2010, 03:34:37 PM
utk dynamic coba ini:

class matrix {
private:
int** data;
int x;
int y;
public:
matrix(int, int);
~matrix();
void fill();
}

matrix::matrix(int x, int y) {
this.x = x;
this.y = y;
  data = new int*[x];
for (int i = 0; i < x; i++) data[i] = new int[y];
};

matrix::~matrix()
{
if (data != null) { // sorry gw ga tau keyword null di c++ apa... null dipake di java
for (int i = 0; i < x; i++) delete [] data[i];
delete [] data;
}
};

void matrix::fill() { // ga yakin syntaxnya bener... try ur luck
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++) {
// cin >> bla bla bla
}
}
Title: Re: c++ programming
Post by: Lex Chan on 03 January 2010, 07:27:32 PM
thank you bro.. aye coba utak-atik dulu.. ;D
Title: Re: c++ programming
Post by: Lex Chan on 03 January 2010, 09:07:34 PM
class matrix
{
  private:
    int** data;
int x, y;
  public:
    matrix(int, int);
    ~matrix();
    void fill(int, int);
    void add(int, int, int**, int**);
};

matrix::matrix(int x, int y)
{
  data = new int *[x];
  for (int i = 0; i < x; i++)
    data[i] = new int[y];
};

matrix::~matrix()
{
  if (data != '\0')
  {
    for (int i = 0; i < x; i++)
      delete[] data[i];
delete[] data;
delete data;
  }
};

void matrix::fill(int x, int y)
{
  for (int i = 0; i < x; i++)
  {
    for (int j = 0; j < y; j++)
    {
  cout << "mtx[" << i << "][" << j << "] = ";
      cin >> data[i][j];
    }
  }
}

void matrix::add(int x, int y, int **P, int **Q)
{
  for (int i = 0; i < x; i++)
  {
    for (int j = 0; j < y; j++)
    {
  data[i][j] = P[i][j] + Q[i][j];
    }
  } 
}

int main ()
{
  int rows, cols;

  cout << "input number of row: ";
  cin >> rows;
  cout << "input number of column: ";
  cin >> cols;
 
  matrix A(rows, cols);
  A.fill(rows, cols);

  matrix B(rows, cols);
  B.fill(rows, cols);
 
  matrix C(rows, cols);
  C.add(rows, cols, A, B);

  return 0;
}


sekarang kendalanya di baris C.add(rows, cols, A, B);..
gimana caranya kalo cuma mau menjumlahkan 2 matrix ke suatu matrix baru?
misalnya matrix C = matrix A + matrix B
Title: Re: c++ programming
Post by: Sumedho on 03 January 2010, 09:35:35 PM
http://www.codeproject.com/KB/architecture/ymatrix.aspx
Title: Re: c++ programming
Post by: Lex Chan on 03 January 2010, 10:51:38 PM
Quote from: Sumedho on 03 January 2010, 09:35:35 PM
http://www.codeproject.com/KB/architecture/ymatrix.aspx

makasih suhu.. ^:)^

tapi aye perlu belajar dari awal.. mulai dari class dulu.. ;D
jangan langsung main vector, soalnya ilmu aye belom nyampe.. 8)