class Matrix {2x2, 3x3 and 4x4 }private data members:
1. int **matrix
2. int row
3. int col
class public member functions:
1. Matrix (int n1, int n2, int n3, int n4, int row = 2, int col = 2)
2. Matrix (int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9, int row = 3,
int col = 3)
3. Matrix (int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9, int n10, int
n11, int n12, int n13, int n14, int n15, int n16, int row = 4, int col = 4)
4. Matrix(const Matrix &m)
5. ~Matrix()
6. int getRow()
7. int getCol()
8. int getValue(int row, int col)
9. void setValue(int row, int col, int value)
10. int Total()
11. double Average()
12. int RowTotal(int row)
13. int ColumnTotal(int col)
14. int HighestInRow(int row)
15. int LowestInRow(int row)
16. Matrix Transpose()
17. int LeftDiagonalTotal()
18. int RightDiagonalTotal()
19. Matrix Add(Matrix m)
20. Matrix Subtract(Matrix m)
21. Matrix Multiply(Matrix m)
22. int FindkSmallest(int k)
23. int FindkLargest(int k)
class Matrix {
private:
int **matrix;
int row;
int col;
void sort(int arr[]);
public:
Matrix(int row, int col);
Matrix(int n1, int n2, int n3, int n4, int row = 2, int col = 2);
Matrix (int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9, int row = 3,
int col = 3);
Matrix (int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9, int n10,
int n11, int n12, int n13, int n14, int n15, int n16, int row = 4, int col = 4);
Matrix(const Matrix &m);
~Matrix();
int getRow() const;
int getCol() const;
int getValue(int r, int c);
void setValue(int r, int c, int value);
int Total();
double Average();
int RowTotal(int r);
int ColumnTotal(int c);
int HighestInRow(int r);
int LowestInRow(int r);
Matrix Transpose();
int LeftDiagonalTotal();
int RightDiagonalTotal();
Matrix Add(Matrix m);
Matrix Subtract(Matrix m);
Matrix Multiply(Matrix m);
int FindkSmallest(int k);
int FindkLargest(int k);
};
Matrix::Matrix(int row, int col)
: row(row), col(col)
{}
Matrix::Matrix(int n1, int n2, int n3, int n4, int row, int col)
: row(row), col(col)
{
matrix = new int*[row];
for (int i=0; i<row; i++) {
matrix[i] = new int[col];
}
matrix[0][0] = n1; matrix[0][1] = n2;
matrix[1][0] = n3; matrix[1][1] = n4;
}
Matrix::Matrix (int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9, int row, int col)
: row(row), col(col)
{
matrix = new int*[row];
for (int i=0; i<row; i++) {
matrix[i] = new int[col];
}
matrix[0][0] = n1; matrix[0][1] = n2; matrix[0][2] = n3;
matrix[1][0] = n4; matrix[1][1] = n5; matrix[1][2] = n6;
matrix[2][0] = n7; matrix[2][1] = n8; matrix[2][2] = n9;
}
Matrix::Matrix (int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9, int n10,
int n11, int n12, int n13, int n14, int n15, int n16, int row, int col)
: row(row), col(col)
{
matrix = new int*[row];
for (int i=0; i<row; i++) {
matrix[i] = new int[col];
}
matrix[0][0] = n1; matrix[0][1] = n2; matrix[0][2] = n3; matrix[0][3] = n4;
matrix[1][0] = n5; matrix[1][1] = n6; matrix[1][2] = n7; matrix[1][3] = n8;
matrix[2][0] = n9; matrix[2][1] = n10; matrix[2][2] = n11; matrix[2][3] = n12;
matrix[3][0] = n13; matrix[3][1] = n14; matrix[3][2] = n15; matrix[3][3] = n16;
}
Matrix::Matrix(const Matrix &m)
: row(m.row), col(m.col)
{
matrix = new int*[row];
for (int i=0; i<row; i++) {
matrix[i] = new int[col];
for (int j=0; j<col; j++) {
matrix[i][j] = m.matrix[i][j];
}
}
}
Matrix::~Matrix()
{
for (int i=0; i<row; i++) {
delete [] matrix[i];
}
delete matrix;
}
int Matrix::getRow() const
{
return row;
}
int Matrix::getCol() const
{
return col;
}
int Matrix::getValue(int r, int c)
{
return matrix[r][c];
}
void Matrix::setValue(int r, int c, int value)
{
matrix[r][c] = value;
}
int Matrix::Total()
{
int total = 0;
for (int r=0; r<row; r++) {
for (int c=0; c<col; c++) {
total += matrix[r][c];
}
}
return total;
}
double Matrix::Average()
{
return static_cast<double>(Total()) / (row*col);
}
int Matrix::RowTotal(int r)
{
int total = 0;
for (int c=0; c<col; c++) {
total += matrix[r][c];
}
return total;
}
int Matrix::ColumnTotal(int c)
{
int total = 0;
for (int r=0; r<row; r++) {
total += matrix[r][c];
}
return total;
}
int Matrix::HighestInRow(int r)
{
int h = matrix[r][0];
for (int c=0; c<col; c++) {
if (h < matrix[r][c]) {
h = matrix[r][c];
}
}
return h;
}
int Matrix::LowestInRow(int r)
{
int l = matrix[r][0];
for (int c=0; c<col; c++) {
if (l > matrix[r][c]) {
l = matrix[r][c];
}
}
return l;
}
Matrix Matrix::Transpose()
{
Matrix Tr(col, row);
for (int r=0; r<row; r++) {
for (int c=0; c<col; c++) {
Tr.matrix[c][r] = matrix[r][c];
}
}
return Tr;
}
int Matrix::LeftDiagonalTotal()
{
int total = 0;
for (int i=0; i<row; i++) {
total += matrix[i][i];
}
return total;
}
int Matrix::RightDiagonalTotal()
{
int total = 0;
for (int r=0; r<row; r++) {
total += matrix[r][col-1-r];
}
return total;
}
Matrix Matrix::Add(Matrix m)
{
Matrix res(row, col);
for (int r=0; r<row; r++) {
for (int c=0; c<col; c++) {
res.matrix[r][c] = matrix[r][c] + m.matrix[r][c];
}
}
return res;
}
Matrix Matrix::Subtract(Matrix m)
{
Matrix res(row, col);
for (int r=0; r<row; r++) {
for (int c=0; c<col; c++) {
res.matrix[r][c] = matrix[r][c] - m.matrix[r][c];
}
}
return res;
}
Matrix Matrix::Multiply(Matrix m)
{
Matrix res(row, m.col);
for (int r=0; r<row; r++) {
for (int c=0; c<m.col; c++) {
res.matrix[r][c] = 0;
for (int k=0; k<col; k++)
res.matrix[r][c] += matrix[r][k] * m.matrix[k][c];
}
}
return res;
}
void Matrix::sort(int arr[])
{
int n = row*col;
for (int r=0; r<row; r++) {
for (int c=0; c<col; c++) {
arr[r*row + c] = matrix[r][c];
}
}
for (int i=0; i<n-1; i++) {
int m = i;
for (int j=i+1; i<n; i++) {
if (arr[j] < arr[m]) {
m = j;
}
}
int t = arr[i];
arr[i] = arr[m];
arr[m] = t;
}
}
int Matrix::FindkSmallest(int k)
{
int *arr = new int[row*col];
sort(arr);
int res = arr[k-1];
delete [] arr;
return res;
}
int Matrix::FindkLargest(int k)
{
int *arr = new int[row*col];
sort(arr);
int res = arr[row*col-k];
delete [] arr;
return res;
}
Comments
Leave a comment