78.9k views
2 votes
A dynamic integer matrix is a two dimensional array of integers. It can also be described as a pointer to a pointer or an array of pointers. In this program you will write several small utility functions to test mastery of this concept. The function signatures and descriptions are given below. You may assume that the matrix will be a square matrix meaning that the number of rows equals the number of columns in the matrix.

Implement these functions:
i n t∗∗makeMatrix ( i n t n ) ;
v o i d p r i n t M a t r i x ( i n t∗∗A, i n t n ) ;
b o o l sumEqual ( i n t∗∗A, i n t∗∗B , i n t n ) ;
b o o l i s E q u a l ( i n t∗∗A, i n t∗∗B , i n t n ) ;
i n t d i a g o n a l ( i n t∗∗A, i n t n ) ;
i n t∗∗sumMatrix ( i n t∗∗A, i n t∗∗B , i n t n ) ;
i n t∗∗p r o d u c t ( i n t∗∗A, i n t∗∗B , i n t n ) ;
i n t∗∗s u b t r a c t M a t r i x ( i n t∗∗A, i n t∗∗B , i n t n ) ;
NEXT TWO ARE EXTRA CREDIT AND NOT REQUIRED
d o u b l e∗∗i n v e r s e M a t r i x ( i n t∗∗A, i n t n ) ;
d o u b l e∗∗m a t r i x D i v i s i o n ( i n t∗∗A, i n t∗∗B , i n t n ) ;
Please read the description of these functions carefully.
The makeMatrix function dynamically allocates memory for an integer matrix of size n. It prompts the user to enter values for each position of the matrix from left to right row by row, then returns the created matrix.The printMatrix function displays the matrix from its argument row by row legibly enough so that a grader can see the numbers corresponding to each position of the matrix.The sumEqual function takes two matrices of equal size and an integer indicating the size of the matrices. It computes the sum of all elements in each matrix and see if the sum of each matrix is equal to one another. The function returns true if the sums are equal or returns false if the sums are not equal to one another. You may want to use the enumerated type named "bool" that has only two values: true and false. It is defined in the stdbool.h header file. Function takes two matrices and an integer indicating the size of both matrices.
The isEqual function checks each matrix element by element and see if each element of matrix A is equal to its corresponding element in matrix B. It returns true if the two matrices are element-wise qual or false if even one element is not equal to its corresponding element in the other matrix. You may want to use the enumerated type named "bool" that has only two values: true and false. It is defined in the stdbool.h header file. Function takes two matrices and an integer indicating the size of both matrices.
The diagonal function calculates the product of the elements along the diagonal of the matrix and returns that number. Function takes a single matrix and an integer indicating the size of the matrix. It returns the product.
The sumMatrix function computes the sum of the two matrices. Note that the matrix sum is done element by element in the two matrices. Function takes two matrices and and an integer indicating the size of both matrices. It returns reference to a new dynamic matrix that contains the element by element sum for the corresponding positions.
The product function computes the matrix product by multiplying two matrices.It takes two matrices and an integer indicating the size of both matrices. It returns reference to a new dynamic matrix that is the result of matrix multiplication.
The subtractMatrix function computes the difference of two matrices. The function take two matrices and an integer indicating the size of both matrices. It returns reference to a new dynamic matrix containing the element-wise subtraction.
Your main function should operate similar to the array problem in the last homework assignment. Meaning it will first prompt the user for a size value to be used for both matrices then allow data for them to be entered (by using the makeMatrix function).

1 Answer

5 votes

Answer:

#include<iostream>

using namespace std;

int** makeMatrix(int n)

{

int** newM = new int*[n];

for(int i = 0; i < n; i++)

{

newM[i] = new int[n];

for(int j = 0;j < n; j++)

{

cin >> newM[i][j];

}

}

return newM;

}

void printMatrix(int** A, int n)

{

for(int i = 0; i < n; i++)

{

for(int j = 0;j < n; j++)

{

cout << A[i][j] << " ";

}

cout << endl;

}

}

bool sumEqual(int** A,int** B, int n)

{

int sum1 = 0, sum2 = 0;

for(int i = 0; i < n; i++)

{

for(int j = 0; j < n; j++)

{

sum1 += A[i][j];

sum2 += B[i][j];

}

}

return sum1 == sum2;

}

bool isEqual(int** A, int** B, int n)

{

for(int i = 0; i <n; i++)

{

for(int j = 0; j < n; j++)

{

if(A[i][j] != B[i][j])

{

return false;

}

}

}

return true;

}

int diagonal(int** A, int n)

{

int product = 1;

for(int i = 0; i < n; i++)

{

product *= A[i][i];

}

return product;

}

int** sumMatrix(int** A, int** B, int n)

{

int** C = new int*[n];

for(int i = 0; i < n; i++)

{

C[i] = new int[n];

for(int j = 0; j < n; j++)

{

C[i][j] = A[i][j] + B[i][j];

}

}

return C;

}

int** product(int** A, int**B, int n)

{

int** C = new int*[n];

for(int i = 0; i < n; i++)

{

C[i] = new int[n];

for(int j = 0; j < n; j++)

{

C[i][j] = 0;

for(int k = 0; k < n; k++)

{

C[i][j] += A[i][k] * B[k][j];

}

}

}

return C;

}

int** subtractMatrix(int** A, int** B, int n)

{

int** C = new int*[n];

for(int i = 0; i < n; i++)

{

C[i] = new int[n];

for(int j = 0; j < n; j++)

{

C[i][j] = A[i][j] - B[i][j];

}

}

return C;

}

int main()

{

cout << "Enter the size of the matrices : ";

int n;

cin >> n;

int** m1 = makeMatrix(n);

int** m2 = makeMatrix(n);

cout << endl << "Print the first matrix : "<< endl;

printMatrix(m1,n);

cout << "Print the second matrix : " << endl;

printMatrix(m2,n);

cout << "Is sum equal : " << sumEqual(m1,m2,n) << endl;

cout << "Are these two matrices equal : " << isEqual(m1,m2,n) << endl;

cout << "Product of diagonal elements of first matrix is : " << diagonal(m1,n) << endl;

cout << "Sum of two matrices is : " << endl;

int** sum = sumMatrix(m1,m2,n);

printMatrix(sum,n);

cout << "Product of two matrices is : " << endl;

int** pro = product(m1,m2,n);

printMatrix(pro,n);

cout << "Difference of two matrices is: " << endl;

int** difference = subtractMatrix(m1,m2,n);

printMatrix(difference, n);

return 0;

}

Step-by-step explanation:

All the required functions have been implemented. See the output snippet which is added for better understanding.

A dynamic integer matrix is a two dimensional array of integers. It can also be described-example-1
User DhruvPathak
by
3.3k points