Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. bool MATRIX_Init(MATRIX *ob, size_t m, size_t n)
  2. {
  3. size_t i, j;
  4. ob->m = m;
  5. ob->n = n;
  6. ob->arr = (double **)malloc(m*sizeof(double *));
  7. if(!ob->arr)
  8. return 0;
  9. for(i=0; i<m; ++i)
  10. {
  11. ob->arr[i] = (double *)malloc(n*sizeof(double));
  12. if(!ob->arr[i])
  13. {
  14. for(j=0; i<i; ++j)
  15. {
  16. free(ob->arr[j]);
  17. ob->arr[j] = NULL;
  18. }
  19. free(ob->arr);
  20. ob->arr = NULL;
  21. return 0;
  22. }
  23. }
  24.  
  25. for(i=0; i<m; ++i)
  26. {
  27. for(j=0; j<n; ++j)
  28. {
  29. ob->arr[i][j] = sqrt((i+1.0)*(j+1.0));
  30. }
  31. }
  32. return 1;
  33. }
  34.  
  35.  
  36. void MATRIX_Free(MATRIX * ob)
  37. {
  38. size_t i;
  39. if(ob->arr)
  40. {
  41. for(i=0; i<ob->m; ++i)
  42. {
  43. free(ob->arr[i]);
  44. ob->arr[i] = NULL;
  45. }
  46. free(ob->arr);
  47. ob->arr = NULL;
  48. }
  49. }
  50.  
  51. void MATRIX_MultToVect(MATRIX * ob, double * vect, double *res)
  52. {
  53. size_t i, j;
  54. double register dot;
  55. for(i=0; i<ob->m; ++i)
  56. {
  57. dot = 0;
  58. for(j=0; j<ob->n; ++j)
  59. {
  60. dot += ob->arr[i][j]*vect[j];
  61. }
  62. res[i] = dot;
  63. }
  64. }0000000000000000000000000000000
  65. void crash(char *str);
  66. void check(MATRIX *ob, double *res);
  67.  
  68.  
  69. int _tmain(int argc, _TCHAR* argv[])
  70. {
  71. MATRIX matr;
  72. double *vect = NULL, *res = NULL;
  73. size_t m, n, i;
  74.  
  75. printf("podaj m, n\n");
  76. scanf_s("%lu %lu", &m, &n);
  77.  
  78. if(!MATRIX_Init(&matr, m, n))
  79. crash("init matr error");
  80.  
  81. //prepare vect
  82. vect = (double *)malloc(n*sizeof(double));
  83. if(!vect)
  84. {
  85. MATRIX_Free(&matr);
  86. crash("vector allocation error");
  87. }
  88.  
  89. res = (double *)malloc(m*sizeof(double));
  90. if(!res)
  91. {
  92. free(vect);
  93. MATRIX_Free(&matr);
  94. crash("vector allocation error");
  95. }
  96.  
  97. for(i=0; i<n; ++i)
  98. vect[i] = 1.0;
  99.  
  100. MATRIX_MultToVect(&matr, vect, res);
  101.  
  102. check(&matr, res);
  103.  
  104. if(vect)
  105. free(vect);
  106. vect = NULL;
  107.  
  108. if(res)
  109. free(res);
  110. res = NULL;
  111.  
  112. MATRIX_Free(&matr);
  113.  
  114. system("pause");
  115. return 0;
  116. }
  117.  
  118. void crash(char *str)
  119. {
  120. printf("%s\n", str);
  121. system("pause");
  122. exit(1);
  123. }
  124.  
  125. void check(MATRIX *ob, double *res)
  126. {
  127. size_t i, j;
  128. double sum;
  129. const double eps = 1e-10;
  130.  
  131. for(i=0; i<ob->m; ++i)
  132. {
  133. sum = 0;
  134. for(j=0; j<ob->n; j++)
  135. {
  136. sum += ob->arr[i][j];
  137. }
  138. if(fabs(sum-res[i]) > eps)
  139. {
  140. printf("error!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
  141. return;
  142. }
  143. }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement