Advertisement
Guest User

Untitled

a guest
Mar 19th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.26 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4.  
  5. /*
  6. *
  7. */
  8. typedef struct {
  9. int dim;
  10. int* data;
  11. } UpperTriangularMatrix;
  12. /*
  13. * initUpperTriangularMatrix
  14. * - creates a new matrix
  15. * - initializes the matrix by allocating enough memory
  16. */
  17. UpperTriangularMatrix initUpperTriangularMatrix(int dim) {
  18. UpperTriangularMatrix mat;
  19.  
  20. mat.data= malloc((dim*(dim+1))*sizeof(int));
  21. mat.dim=dim;
  22. int i;
  23. for( i = 0 ;i < dim*dim;i++)
  24. mat.data[i]=0;
  25. return mat;
  26. }
  27. /*
  28. * destroyUpperTriangularMatrix
  29. * - frees the allocated memory
  30. * - set dim to zero
  31. */
  32. void destroyUpperTriangularMatrix(UpperTriangularMatrix *mat) {
  33. free(mat->data);
  34. mat->dim=0;
  35. //mat=&mat.dim;
  36.  
  37. }
  38. /*
  39. * get: returns the item at mat[row][col]
  40. */
  41. int get(UpperTriangularMatrix mat, int row, int col) {
  42. int e= mat.data[mat.dim*row + col];
  43.  
  44. return e;
  45. }
  46. /*
  47. * set: assigns mat[row][col] to val
  48. */
  49. void set(UpperTriangularMatrix mat, int row, int col, int val) {
  50. mat.data[mat.dim*row + col] = val;
  51. }
  52.  
  53. /* TODO: ADD YOUR CODE HERE */
  54.  
  55. /*
  56. * addTriangularMatrices:
  57. * sum = mat1 + mat2;
  58. */
  59. UpperTriangularMatrix addTriangularMatrices(UpperTriangularMatrix mat1, UpperTriangularMatrix mat2) {
  60. assert(mat1.dim == mat2.dim);
  61. UpperTriangularMatrix sum = initUpperTriangularMatrix(mat1.dim);
  62. int i;
  63. for(i=0;i<mat1.dim*mat1.dim;i++){
  64.  
  65. sum.data[i]=mat1.data[i]+mat2.data[i];
  66. }
  67.  
  68. /* TODO: ADD YOUR CODE HERE */
  69. return sum;
  70. }
  71. /*
  72. * convertFileToUpperTriangularMatrix
  73. * assumes file format as follows:
  74. * - first line contains dimensions
  75. * - each row in a line
  76. * - each row contains elements in the upper triangle only, space separated
  77. */
  78. UpperTriangularMatrix convertFileToUpperTriangularMatrix(char* filename) {
  79. UpperTriangularMatrix mat;
  80. int dim, val;
  81. int i, j;
  82. char line[512], *token;
  83.  
  84. FILE *fp = fopen(filename, "r");
  85. assert(fp != NULL);
  86.  
  87. fscanf(fp, "%d\n", &dim);
  88. mat = initUpperTriangularMatrix(dim);
  89.  
  90. for(i=0; i<mat.dim; i++)
  91. for(j=i; j<mat.dim; j++) {
  92. fscanf(fp, "%d", &val);
  93. set(mat, i, j, val);
  94. }
  95.  
  96. fclose(fp);
  97. return mat;
  98. }
  99. /*
  100. *
  101. */
  102. void printMatrix(char* title, UpperTriangularMatrix mat) {
  103. int i, j;
  104.  
  105. printf("%s\n", title);
  106.  
  107. for(i=0; i<mat.dim; i++) {
  108. for(j=0; j<mat.dim; j++)
  109. printf("%5d ", get(mat, i, j));
  110. printf("\n");
  111. }
  112.  
  113. printf("...................................................\n");
  114. }
  115. /*
  116. *
  117. */
  118. main(int argc, char**argv) {
  119. // if(argc!=3) {
  120. // printf("Usage: %s file1 file2\n", argv[0]);
  121. // exit(1);
  122. // }
  123.  
  124. UpperTriangularMatrix matA = convertFileToUpperTriangularMatrix("input.txt");
  125. printMatrix("Matrix A\n========", matA);
  126. UpperTriangularMatrix matB = convertFileToUpperTriangularMatrix("ethar.txt");
  127. printMatrix("Matrix B\n========", matB);
  128.  
  129. UpperTriangularMatrix matC = addTriangularMatrices(matA, matB);
  130. printMatrix("Matrix C = A + B\n================", matC);
  131.  
  132. destroyUpperTriangularMatrix(&matA);
  133. printMatrix("Matrix A (after destroy)\n========================", matA);
  134. destroyUpperTriangularMatrix(&matB);
  135. printMatrix("Matrix B (after destroy)\n========================", matB);
  136. destroyUpperTriangularMatrix(&matC);
  137. printMatrix("Matrix C (after destroy)\n========================", matC);
  138.  
  139. return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement