Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int createMatrix(int rows, int columns, int **matrix);
- int displayMatrix(int rows, int columns, int **matrix);
- int matrixAddition(int rows, int columns);
- int matrixSubtraction(int rows, int columns);
- int matrixTranspose(int rows, int columns);
- int matrixMultiplication(int rowsA, int rowsB, int columnsA, int columnsB);
- int main() {
- while (1) {
- int opt;
- printf("\n1. Create and display a matrix\n");
- printf("2. Matrix Addition\n");
- printf("3. Matrix Subtraction\n");
- printf("4. Matrix Transpose\n");
- printf("5. Matrix Multiplication\n");
- printf("6. Quit the program.\n");
- printf("\nEnter your selection: ");
- scanf("%d", &opt);
- if (opt == 1) {
- printf("\nYou chose to create a matrix and display it\n");
- int rows, columns;
- printf("Enter the number of rows: ");
- scanf("%d", &rows);
- printf("Enter the number of columns: ");
- scanf("%d", &columns);
- int **matrix = malloc(rows * sizeof(int*));
- for (int i=0; i<rows; i++) {
- matrix[i] = malloc(columns * sizeof(int*));
- }
- createMatrix(rows, columns, matrix);
- printf("\nResultant Matrix: \n");
- displayMatrix(rows, columns, matrix);
- for (int i=0; i<rows; i++) {
- free(matrix[i]);
- }
- free(matrix);
- }
- else if (opt == 2) {
- printf("\nYou chose Matrix Addition\n");
- int rows, columns;
- printf("Enter the number of rows: ");
- scanf("%d", &rows);
- printf("Enter the number of columns: ");
- scanf("%d", &columns);
- matrixAddition(rows, columns);
- }
- else if(opt == 3){
- printf("\nYou chose Matrix Subtraction\n");
- int rows, columns;
- printf("Enter the number of rows: ");
- scanf("%d", &rows);
- printf("Enter the number of columns: ");
- scanf("%d", &columns);
- matrixSubtraction(rows, columns);
- }
- else if(opt == 4){
- printf("\nYou chose Matrix Transpose\n");
- int rows, columns;
- printf("Enter the number of rows: ");
- scanf("%d", &rows);
- printf("Enter the number of columns: ");
- scanf("%d", &columns);
- matrixTranspose(rows, columns);
- }
- else if(opt == 5){
- printf("\nYou chose Matrix Multiplication\n");
- int rowsA, rowsB, columnsA, columnsB;
- printf("Enter the number of rows of the first matrix: ");
- scanf("%d", &rowsA);
- printf("Enter the number of columns of the first matrix: ");
- scanf("%d", &columnsA);
- printf("Enter the number of rows of the second matrix: ");
- scanf("%d", &rowsB);
- printf("Enter the number of columns of the second matrix: ");
- scanf("%d", &columnsB);
- matrixMultiplication(rowsA, rowsB, columnsA, columnsB);
- }
- else if(opt == 6) {
- printf("\nYou chose to quit the program\n");
- return 0;
- }
- else {
- printf("\nInvalid option, try again\n");
- }
- }
- }
- int createMatrix(int rows, int columns, int **matrix) {
- for (int i=0; i<rows; i++) {
- for (int j=0; j<columns; j++) {
- printf("Enter the \"%d*%d\"th element: ", i+1, j+1);
- scanf("%d", &matrix[i][j]);
- }
- }
- return 0;
- }
- int matrixAddition(int rows, int columns) {
- printf("\nMatrix A: \n");
- int **matrixA = malloc(rows * sizeof(int*));
- for (int i=0; i<rows; i++) {
- matrixA[i] = malloc(columns * sizeof(int*));
- }
- createMatrix(rows, columns, matrixA);
- printf("\nMatrix B: \n");
- int **matrixB = malloc(rows * sizeof(int*));
- for (int i=0; i<rows; i++) {
- matrixB[i] = malloc(columns * sizeof(int*));
- }
- createMatrix(rows, columns, matrixB);
- int **matrixC = malloc(rows * sizeof(int*));
- for (int i=0; i<rows; i++) {
- matrixC[i] = malloc(columns * sizeof(int*));
- }
- for (int i=0; i<rows; i++) {
- for (int j=0; j<columns; j++) {
- matrixC[i][j] = matrixA[i][j] + matrixB[i][j];
- }
- }
- printf("\nResultant Matrix: \n");
- displayMatrix(rows, columns, matrixC);
- for (int i=0; i<rows; i++) {
- free(matrixA[i]);
- }
- free(matrixA);
- for (int i=0; i<rows; i++) {
- free(matrixB[i]);
- }
- free(matrixB);
- for (int i=0; i<rows; i++) {
- free(matrixC[i]);
- }
- free(matrixC);
- return 0;
- }
- int matrixSubtraction(int rows, int columns) {
- printf("\nMatrix A: \n");
- int **matrixA = malloc(rows * sizeof(int*));
- for (int i=0; i<rows; i++) {
- matrixA[i] = malloc(columns * sizeof(int*));
- }
- createMatrix(rows, columns, matrixA);
- printf("\nMatrix B: \n");
- int **matrixB = malloc(rows * sizeof(int*));
- for (int i=0; i<rows; i++) {
- matrixB[i] = malloc(columns * sizeof(int*));
- }
- createMatrix(rows, columns, matrixB);
- int **matrixC = malloc(rows * sizeof(int*));
- for (int i=0; i<rows; i++) {
- matrixC[i] = malloc(columns * sizeof(int*));
- }
- for (int i=0; i<rows; i++) {
- for (int j=0; j<columns; j++) {
- matrixC[i][j] = matrixA[i][j] - matrixB[i][j];
- }
- }
- printf("\nResultant Matrix: \n");
- displayMatrix(rows, columns, matrixC);
- for (int i=0; i<rows; i++) {
- free(matrixA[i]);
- }
- free(matrixA);
- for (int i=0; i<rows; i++) {
- free(matrixB[i]);
- }
- free(matrixB);
- for (int i=0; i<rows; i++) {
- free(matrixC[i]);
- }
- free(matrixC);
- return 0;
- }
- int displayMatrix(int rows, int columns, int **matrix) {
- for (int i=0; i<rows; i++) {
- for (int j=0; j<columns; j++) {
- printf("%d\t", matrix[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
- int matrixTranspose(int rows, int columns) {
- int **matrixA = malloc(rows * sizeof(int*));
- for (int i=0; i<rows; i++) {
- matrixA[i] = malloc(columns * sizeof(int*));
- }
- printf("\nMatrix A: \n");
- createMatrix(rows, columns, matrixA);
- int **matrixB = malloc(columns * sizeof(int*));
- for (int i=0; i<columns; i++) {
- matrixB[i] = malloc(rows * sizeof(int*));
- }
- for (int i=0; i<rows; i++) {
- for (int j=0; j<columns; j++) {
- matrixB[j][i] = matrixA[i][j];
- }
- }
- printf("\nResultant Matrix: \n");
- displayMatrix(columns, rows, matrixB);
- for (int i=0; i<rows; i++) {
- free(matrixA[i]);
- }
- free(matrixA);
- for (int i=0; i<columns; i++) {
- free(matrixB[i]);
- }
- free(matrixB);
- return 0;
- }
- int matrixMultiplication(int rowsA, int rowsB, int columnsA, int columnsB) {
- if (rowsB != columnsA) {
- printf("Number of columns of the first matrix should be equal to number of rows of the second matrix.\n");
- return 0;
- }
- int **matrixA = malloc(rowsA * sizeof(int*));
- for (int i=0; i<rowsA; i++) {
- matrixA[i] = malloc(columnsA * sizeof(int*));
- }
- int **matrixB = malloc(rowsB * sizeof(int*));
- for (int i=0; i<rowsB; i++) {
- matrixB[i] = malloc(columnsB * sizeof(int*));
- }
- int **matrixC = malloc(rowsA * sizeof(int*));
- for (int i=0; i<rowsA; i++) {
- matrixC[i] = malloc(columnsB * sizeof(int*));
- }
- printf("\nMatrix A: \n");
- createMatrix(rowsA, columnsA, matrixA);
- printf("\nMatrix B: \n");
- createMatrix(rowsB, columnsB, matrixB);
- for (int i=0; i<rowsA; i++) {
- for (int j=0; j<columnsB; j++) {
- matrixC[i][j] = 0;
- for (int k=0; k<columnsA; k++) {
- matrixC[i][j] += matrixA[i][k] * matrixB[k][j];
- }
- }
- }
- displayMatrix(rowsA, columnsB, matrixC);
- for (int i=0; i<rowsA; i++) {
- free(matrixA[i]);
- }
- free(matrixA);
- for (int i=0; i<rowsB; i++) {
- free(matrixB[i]);
- }
- free(matrixB);
- for (int i=0; i<rowsA; i++) {
- free(matrixC[i]);
- }
- free(matrixC);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement