#include <iostream>
#include <iomanip>
#include "matrix.h"
using namespace std;
Matrix :: Matrix() {
cnt++;
row_size = maxRowSize;
col_size = maxColSize;
for (int r = 0; r < getRowSize(); r++) {
for (int c = 0; c < getColumnSize(); c++) {
matrix[r][c] = rand() % 10 + 1;
}
}
}
Matrix :: Matrix(int row, int column) {
if (row > maxRowSize || column > maxColSize) {
cout << "Maximum allowed dimensions are 5 x 5" << endl;
} else {
cnt++;
row_size = row;
col_size = column;
for (int r = 0; r < getRowSize(); r++) {
for (int c = 0; c < getColumnSize(); c++) {
matrix[r][c] = rand() % 10 + 1;
}
}
}
}
void Matrix :: setRowSize(int x) {
row_size = x;
}
void Matrix :: setColumnSize(int x) {
col_size = x;
}
void Matrix :: addValue(double x) {
for (int r = 0; r < getRowSize(); r++) {
for (int c = 0; c < getColumnSize(); c++) {
matrix[r][c] = x;
}
}
}
int Matrix :: getCnt() {
return Matrix :: cnt;
}
int Matrix :: getRowSize() {
return row_size;
}
int Matrix :: getColumnSize() {
return col_size;
}
void Matrix :: displayMatrix() {
for (int r = 0; r < getRowSize(); r++) {
for (int c = 0; c < getColumnSize(); c++) {
cout << matrix[r][c] << " ";
}
cout << endl;
}
cout << endl;
}
double Matrix :: getValue(int row, int col) {
return matrix[row][col];
}
Matrix Matrix :: add(Matrix &other) {
if (getRowSize() != other.getRowSize() || getColumnSize() != other.getColumnSize()) {
cout << "Matrix addition requires matrices with same dimensions" << endl << endl;
} else {
Matrix result = Matrix(getRowSize(), getColumnSize());
for (int r = 0; r < getRowSize(); r++) {
for (int c = 0; c < getColumnSize(); c++) {
result.matrix[r][c] = matrix[r][c] + other.matrix[r][c];
}
}
cout << "Resultant matrix after Addition:" << endl;
result.displayMatrix();
}
}
Matrix Matrix :: substract(Matrix &other) {
if (getRowSize() != other.getRowSize() || getColumnSize() != other.getColumnSize()) {
cout << "Matrix subtraction requires matrices with same dimensions" << endl << endl;
} else {
Matrix result = Matrix(getRowSize(), getColumnSize());
for (int r = 0; r < getRowSize(); r++) {
for (int c = 0; c < getColumnSize(); c++) {
result.matrix[r][c] = matrix[r][c] - other.matrix[r][c];
}
}
cout << "Resultant matrix after Subtraction:" << endl;
result.displayMatrix();
}
}
Matrix Matrix :: product(Matrix &other) {
if (getColumnSize() != other.getRowSize()) {
cout << "Matrix multiplication requires: No of rows in multiplicand matrix equal to No of rows in multiplier matrix" << endl << endl;
} else {
Matrix result = Matrix(getRowSize(), other.getColumnSize());
result.addValue(0.0);
for (int r = 0; r < getRowSize(); r++) {
for (int c = 0; c < other.getColumnSize(); c++) {
for (int k = 0; k < getColumnSize(); k++) {
result.matrix[r][c] += (matrix[r][k] * other.matrix[k][c]);
}
}
}
cout << "Resultant matrix after Multiplication:" << endl;
result.displayMatrix();
}
}
Matrix Matrix :: product(double scalar) {
Matrix result = Matrix(getRowSize(), getColumnSize());
for (int r = 0; r < getRowSize(); r++) {
for (int c = 0; c < getColumnSize(); c++) {
result.matrix[r][c] = matrix[r][c] * scalar;
}
}
cout << "Resultant matrix after Scalar Multiplication:" << endl;
result.displayMatrix();
}
#include <iostream>
#include<stdlib.h>
#include "matrix.h"
#include "matrix.cpp"
using namespace std;
int main() {
double scalar;
Matrix matA = Matrix(3,3);
Matrix matB = Matrix(3,3);
Matrix matC = Matrix(3,4);
cout << "Enter the scalar value for matrix multiplication : ";
cin >> scalar;
cout << "Displaying matrix A" << endl;
matA.displayMatrix();
cout << "Displaying matrix B" << endl;
matB.displayMatrix();
cout << "Displaying matrix C" << endl;
matC.displayMatrix();
// The sum of two matrixes with the same row and column size.
cout << "Adding matrices with the same row and column size (matrix A and matrix B)" << endl;
matA.add(matB);
// The sum of two matrices with different row or column size.
cout << "Adding matrices with different row or column size (matrix A and matrix C)" << endl;
matA.add(matC);
// The difference of two matrices with the same row and column size.
cout << "Subtracting matrices with the same row and column size (matrix A and matrix B)" << endl;
matA.substract(matB);
// The product of two matrices with the same row and column size.
cout << "Multiplying matrices with the same row and column size (matrix A and matrix B)" << endl;
matA.product(matB);
// The product of a matrix and a scalar value that is entered by the user.
cout << "Multiplying matrix A with scalar value (" << scalar << ")" << endl;
matA.product(scalar);
// Count of matrix objects created
cout << "Total number of matrix objects created: " << matA.getCnt() << endl;
return 0;
}
/**
======== SAMPLE OUTPUT ========
Enter the scalar value for matrix multiplication : 2.5
Displaying matrix A
4 7 8
6 4 6
7 3 10
Displaying matrix B
2 3 8
1 10 4
7 1 7
Displaying matrix C
3 7 2 9
8 10 3 1
3 4 8 6
Adding matrices with the same row and column size (matrix A and matrix B)
Resultant matrix after Addition:
6 10 16
7 14 10
14 4 17
Adding matrices with different row or column size (matrix A and matrix C)
Matrix addition requires matrices with same dimensions
Subtracting matrices with the same row and column size (matrix A and matrix B)
Resultant matrix after Subtraction:
2 4 0
5 -6 2
0 2 3
Multiplying matrices with the same row and column size (matrix A and matrix B)
Resultant matrix after Multiplication:
71 90 116
58 64 106
87 61 138
Multiplying matrix A with scalar value (2.5)
Resultant matrix after Scalar Multiplication:
10 17.5 20
15 10 15
17.5 7.5 25
Total number of matrix objects created: 7
**/
#ifndef MATRIX_H
#define MATRIX_H
class Matrix
{
private:
static int cnt;
const static int maxRowSize = 5;
const static int maxColSize = 5;
int row_size;
int col_size;
double matrix[maxRowSize][maxColSize];
public:
Matrix();
Matrix(int row, int column);
void setRowSize(int x);
void setColumnSize(int x);
void addValue(double x);
int getCnt();
int getRowSize();
int getColumnSize();
void displayMatrix();
double getValue(int row, int col);
Matrix add(Matrix &other);
Matrix substract(Matrix &other);
Matrix product(Matrix &other);
Matrix product(double scalar);
};
int Matrix :: cnt = 0;
#endif