Matice je implementována pomocí datové struktury, která má 3 členy
// p - pointer na matici
// n - počet řádek
// m - počet sloupců
// V prvním kroku jsou vytvořeny řádky
// V druhém kroku jsou pro každou řádku vytvořeny sloupce
// Možné operace nad maticé: Multiply, Plus, Minus, Set
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
class Matrix
{
struct Data {
int **p; // pointer to matrix
int n,m; // rows and columns
} *pData;
public:
Matrix ()
{
}
// constructor
Matrix(int n, int m)
{
pData = new Data;
pData->p = new int *[n];
pData->n = n;
pData->m = m;
for (int x = 0; x < n; x++)
pData->p[x] = new int[m];
for (int i=0; i< n; i++)
{
for (int j = 0; j < m; j++)
{
pData->p[i][j] = 0;
}
}
}
// constructor
Matrix(int n, int m, double *data)
{
pData = new Data;
pData->p = new int *[n];
pData->n = n;
pData->m = m;
for (int x = 0; x < n; x++)
pData->p[x] = new int[m];
for (int i=0; i< n; i++)
{
for (int j = 0; j < m; j++)
{
pData->p[i][j] = (int)data[i];
}
}
}
~Matrix()
{
for (int x = 0; x < pData->n; x++)
delete pData->p[x];
delete pData->p;
delete pData;
}
void multiply (Matrix &m)
{
for (int i=0; i< pData->n; i++)
{
for (int j = 0; j < pData->m; j++)
{
pData->p[i][j] *= m.pData->p[i][j];
}
}
}
void Plus(Matrix &m)
{
for (int i=0; i< pData->n; i++)
{
for (int j = 0; j < pData->m; j++)
{
pData->p[i][j] += m.pData->p[i][j];
}
}
}
void Minus(Matrix &m)
{
for (int i=0; i< pData->n; i++)
{
for (int j = 0; j < pData->m; j++)
{
pData->p[i][j] -= m.pData->p[i][j];
}
}
}
void Set(int n, int m, int v)
{
pData->p[n][m] = v;
}
int Value(int n, int m)
{
return pData->p[n][m];
}
private:
double m_x,m_y;
};
void DestructorTest()
{
Matrix matrix3(2,3);
}
int main (int argc, char * argv[])
{
int n,m;
n = 2; // rows
m = 3; // columns
// Create matrix from input numbers ( rows and columns )
Matrix matrix(n,m);
printf("%i", matrix.Value(1,1);
double * arr = new double(n);
for (int i=0; i< n; i++)
{
arr[i] = i;
}
// Create matrix from array
Matrix matrix2(n,m, arr);
// Are allocated data released ?
DestructorTest();
return 0;
}