Advertisement
ALENTL

Untitled

Apr 27th, 2024
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.61 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int createMatrix(int rows, int columns, int **matrix);
  5. int displayMatrix(int rows, int columns, int **matrix);
  6. int matrixAddition(int rows, int columns);
  7. int matrixSubtraction(int rows, int columns);
  8. int matrixTranspose(int rows, int columns);
  9. int matrixMultiplication(int rowsA, int rowsB, int columnsA, int columnsB);
  10.  
  11. int main() {
  12. while (1) {
  13. int opt;
  14. printf("\n1. Create and display a matrix\n");
  15. printf("2. Matrix Addition\n");
  16. printf("3. Matrix Subtraction\n");
  17. printf("4. Matrix Transpose\n");
  18. printf("5. Matrix Multiplication\n");
  19. printf("6. Quit the program.\n");
  20.  
  21. printf("\nEnter your selection: ");
  22. scanf("%d", &opt);
  23.  
  24. if (opt == 1) {
  25. printf("\nYou chose to create a matrix and display it\n");
  26. int rows, columns;
  27. printf("Enter the number of rows: ");
  28. scanf("%d", &rows);
  29.  
  30. printf("Enter the number of columns: ");
  31. scanf("%d", &columns);
  32.  
  33. int **matrix = malloc(rows * sizeof(int*));
  34.  
  35. for (int i=0; i<rows; i++) {
  36. matrix[i] = malloc(columns * sizeof(int*));
  37. }
  38.  
  39. createMatrix(rows, columns, matrix);
  40. printf("\nResultant Matrix: \n");
  41. displayMatrix(rows, columns, matrix);
  42.  
  43. for (int i=0; i<rows; i++) {
  44. free(matrix[i]);
  45. }
  46.  
  47. free(matrix);
  48. }
  49.  
  50. else if (opt == 2) {
  51. printf("\nYou chose Matrix Addition\n");
  52. int rows, columns;
  53.  
  54. printf("Enter the number of rows: ");
  55. scanf("%d", &rows);
  56.  
  57. printf("Enter the number of columns: ");
  58. scanf("%d", &columns);
  59.  
  60. matrixAddition(rows, columns);
  61. }
  62.  
  63. else if(opt == 3){
  64. printf("\nYou chose Matrix Subtraction\n");
  65. int rows, columns;
  66.  
  67. printf("Enter the number of rows: ");
  68. scanf("%d", &rows);
  69.  
  70. printf("Enter the number of columns: ");
  71. scanf("%d", &columns);
  72.  
  73. matrixSubtraction(rows, columns);
  74. }
  75.  
  76. else if(opt == 4){
  77. printf("\nYou chose Matrix Transpose\n");
  78.  
  79. int rows, columns;
  80.  
  81. printf("Enter the number of rows: ");
  82. scanf("%d", &rows);
  83.  
  84. printf("Enter the number of columns: ");
  85. scanf("%d", &columns);
  86.  
  87. matrixTranspose(rows, columns);
  88. }
  89.  
  90. else if(opt == 5){
  91. printf("\nYou chose Matrix Multiplication\n");
  92. int rowsA, rowsB, columnsA, columnsB;
  93.  
  94. printf("Enter the number of rows of the first matrix: ");
  95. scanf("%d", &rowsA);
  96.  
  97. printf("Enter the number of columns of the first matrix: ");
  98. scanf("%d", &columnsA);
  99.  
  100. printf("Enter the number of rows of the second matrix: ");
  101. scanf("%d", &rowsB);
  102.  
  103. printf("Enter the number of columns of the second matrix: ");
  104. scanf("%d", &columnsB);
  105.  
  106. matrixMultiplication(rowsA, rowsB, columnsA, columnsB);
  107. }
  108.  
  109. else if(opt == 6) {
  110. printf("\nYou chose to quit the program\n");
  111. return 0;
  112. }
  113.  
  114. else {
  115. printf("\nInvalid option, try again\n");
  116. }
  117. }
  118. }
  119.  
  120. int createMatrix(int rows, int columns, int **matrix) {
  121. for (int i=0; i<rows; i++) {
  122. for (int j=0; j<columns; j++) {
  123. printf("Enter the \"%d*%d\"th element: ", i+1, j+1);
  124. scanf("%d", &matrix[i][j]);
  125. }
  126. }
  127. return 0;
  128. }
  129.  
  130. int matrixAddition(int rows, int columns) {
  131. printf("\nMatrix A: \n");
  132. int **matrixA = malloc(rows * sizeof(int*));
  133. for (int i=0; i<rows; i++) {
  134. matrixA[i] = malloc(columns * sizeof(int*));
  135. }
  136. createMatrix(rows, columns, matrixA);
  137.  
  138. printf("\nMatrix B: \n");
  139. int **matrixB = malloc(rows * sizeof(int*));
  140. for (int i=0; i<rows; i++) {
  141. matrixB[i] = malloc(columns * sizeof(int*));
  142. }
  143. createMatrix(rows, columns, matrixB);
  144.  
  145. int **matrixC = malloc(rows * sizeof(int*));
  146. for (int i=0; i<rows; i++) {
  147. matrixC[i] = malloc(columns * sizeof(int*));
  148. }
  149.  
  150. for (int i=0; i<rows; i++) {
  151. for (int j=0; j<columns; j++) {
  152. matrixC[i][j] = matrixA[i][j] + matrixB[i][j];
  153. }
  154. }
  155.  
  156. printf("\nResultant Matrix: \n");
  157. displayMatrix(rows, columns, matrixC);
  158.  
  159. for (int i=0; i<rows; i++) {
  160. free(matrixA[i]);
  161. }
  162. free(matrixA);
  163.  
  164. for (int i=0; i<rows; i++) {
  165. free(matrixB[i]);
  166. }
  167. free(matrixB);
  168.  
  169. for (int i=0; i<rows; i++) {
  170. free(matrixC[i]);
  171. }
  172. free(matrixC);
  173.  
  174. return 0;
  175.  
  176. }
  177.  
  178. int matrixSubtraction(int rows, int columns) {
  179. printf("\nMatrix A: \n");
  180. int **matrixA = malloc(rows * sizeof(int*));
  181. for (int i=0; i<rows; i++) {
  182. matrixA[i] = malloc(columns * sizeof(int*));
  183. }
  184. createMatrix(rows, columns, matrixA);
  185.  
  186. printf("\nMatrix B: \n");
  187. int **matrixB = malloc(rows * sizeof(int*));
  188. for (int i=0; i<rows; i++) {
  189. matrixB[i] = malloc(columns * sizeof(int*));
  190. }
  191. createMatrix(rows, columns, matrixB);
  192.  
  193. int **matrixC = malloc(rows * sizeof(int*));
  194. for (int i=0; i<rows; i++) {
  195. matrixC[i] = malloc(columns * sizeof(int*));
  196. }
  197.  
  198. for (int i=0; i<rows; i++) {
  199. for (int j=0; j<columns; j++) {
  200. matrixC[i][j] = matrixA[i][j] - matrixB[i][j];
  201. }
  202. }
  203.  
  204. printf("\nResultant Matrix: \n");
  205. displayMatrix(rows, columns, matrixC);
  206.  
  207. for (int i=0; i<rows; i++) {
  208. free(matrixA[i]);
  209. }
  210. free(matrixA);
  211.  
  212. for (int i=0; i<rows; i++) {
  213. free(matrixB[i]);
  214. }
  215. free(matrixB);
  216.  
  217. for (int i=0; i<rows; i++) {
  218. free(matrixC[i]);
  219. }
  220. free(matrixC);
  221.  
  222. return 0;
  223. }
  224.  
  225. int displayMatrix(int rows, int columns, int **matrix) {
  226. for (int i=0; i<rows; i++) {
  227. for (int j=0; j<columns; j++) {
  228. printf("%d\t", matrix[i][j]);
  229. }
  230. printf("\n");
  231. }
  232. return 0;
  233. }
  234.  
  235. int matrixTranspose(int rows, int columns) {
  236. int **matrixA = malloc(rows * sizeof(int*));
  237. for (int i=0; i<rows; i++) {
  238. matrixA[i] = malloc(columns * sizeof(int*));
  239. }
  240. printf("\nMatrix A: \n");
  241. createMatrix(rows, columns, matrixA);
  242.  
  243. int **matrixB = malloc(columns * sizeof(int*));
  244. for (int i=0; i<columns; i++) {
  245. matrixB[i] = malloc(rows * sizeof(int*));
  246. }
  247.  
  248. for (int i=0; i<rows; i++) {
  249. for (int j=0; j<columns; j++) {
  250. matrixB[j][i] = matrixA[i][j];
  251. }
  252. }
  253.  
  254. printf("\nResultant Matrix: \n");
  255. displayMatrix(columns, rows, matrixB);
  256.  
  257. for (int i=0; i<rows; i++) {
  258. free(matrixA[i]);
  259. }
  260. free(matrixA);
  261.  
  262. for (int i=0; i<columns; i++) {
  263. free(matrixB[i]);
  264. }
  265. free(matrixB);
  266.  
  267. return 0;
  268. }
  269.  
  270. int matrixMultiplication(int rowsA, int rowsB, int columnsA, int columnsB) {
  271. if (rowsB != columnsA) {
  272. printf("Number of columns of the first matrix should be equal to number of rows of the second matrix.\n");
  273. return 0;
  274. }
  275.  
  276. int **matrixA = malloc(rowsA * sizeof(int*));
  277. for (int i=0; i<rowsA; i++) {
  278. matrixA[i] = malloc(columnsA * sizeof(int*));
  279. }
  280.  
  281. int **matrixB = malloc(rowsB * sizeof(int*));
  282. for (int i=0; i<rowsB; i++) {
  283. matrixB[i] = malloc(columnsB * sizeof(int*));
  284. }
  285.  
  286. int **matrixC = malloc(rowsA * sizeof(int*));
  287. for (int i=0; i<rowsA; i++) {
  288. matrixC[i] = malloc(columnsB * sizeof(int*));
  289. }
  290.  
  291. printf("\nMatrix A: \n");
  292. createMatrix(rowsA, columnsA, matrixA);
  293.  
  294. printf("\nMatrix B: \n");
  295. createMatrix(rowsB, columnsB, matrixB);
  296.  
  297. for (int i=0; i<rowsA; i++) {
  298. for (int j=0; j<columnsB; j++) {
  299. matrixC[i][j] = 0;
  300. for (int k=0; k<columnsA; k++) {
  301. matrixC[i][j] += matrixA[i][k] * matrixB[k][j];
  302. }
  303. }
  304. }
  305.  
  306. displayMatrix(rowsA, columnsB, matrixC);
  307.  
  308. for (int i=0; i<rowsA; i++) {
  309. free(matrixA[i]);
  310. }
  311. free(matrixA);
  312.  
  313. for (int i=0; i<rowsB; i++) {
  314. free(matrixB[i]);
  315. }
  316. free(matrixB);
  317.  
  318. for (int i=0; i<rowsA; i++) {
  319. free(matrixC[i]);
  320. }
  321. free(matrixC);
  322.  
  323. return 0;
  324. }
  325.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement