Advertisement
Guest User

Untitled

a guest
Feb 13th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. typedef struct
  7. {
  8. size_t capacity;
  9. size_t size;
  10. int* data;
  11. }vector;
  12.  
  13. typedef struct
  14. {
  15. size_t size;
  16. vector** rows;
  17. }matrix;
  18.  
  19. vector* vec_new()
  20. {
  21. vector* vec = (vector*)malloc(sizeof(vector));
  22. vec->size = 0;
  23. vec->capacity = 5;
  24. vec->data = (int*)malloc(vec->capacity * sizeof(int));
  25.  
  26. return vec;
  27. }
  28.  
  29. void vec_insert(vector* vec, int a)
  30. {
  31. if (vec->size == vec->capacity) {
  32. vec->capacity = vec->capacity * 2;
  33. vec->data = (int*)realloc(vec->data, vec->capacity * sizeof(int));
  34. }
  35.  
  36. vec->data[vec->size] = a;
  37. vec->size++;
  38. }
  39.  
  40. void vec_free(vector* vec)
  41. {
  42. free(vec->data);
  43. free(vec);
  44. }
  45.  
  46. void vec_print(vector* vec)
  47. {
  48. for (int i = 0; i < vec->size; i++) {
  49. printf("[%d] %d\n", i, vec->data[i]);
  50. }
  51. }
  52.  
  53. matrix* matrix_new(int row_count)
  54. {
  55. matrix* m = (matrix*)malloc(sizeof(matrix));
  56. m->rows = (vector**)malloc(row_count * sizeof(vector*));
  57. m->size = row_count;
  58. return m;
  59. }
  60.  
  61. void matrix_print(matrix* m)
  62. {
  63. for (int i = 0; i < m->size; i++) {
  64. printf("[%d] ", i);
  65. vector* row = m->rows[i];
  66.  
  67. for (int j = 0; j < row->size; j++) {
  68. printf("%d ", row->data[j]);
  69. }
  70. printf("\n");
  71. }
  72. }
  73.  
  74. void matrix_free(matrix* m)
  75. {
  76. for(int i = 0; i < m->size; i++) {
  77. vec_free(m->rows[i]);
  78. }
  79. free(m->rows);
  80. free(m);
  81. }
  82.  
  83.  
  84. vector* row_get()
  85. {
  86. char a[100];
  87. if (fgets(a, 100, stdin) == NULL) {
  88. return NULL;
  89. }
  90.  
  91. vector* v = vec_new();
  92. char *p = strtok(a, " \t");
  93. while (p != NULL)
  94. {
  95. if (p[strlen(p)-1] == '\n') {
  96. p[strlen(p)-1] = '\0';
  97. }
  98. int num = atoi(p);
  99. if (num != 0 || strcmp(p, "0") == 0) {
  100. vec_insert(v, num);
  101. }
  102. p = strtok(NULL, " \t");
  103. }
  104.  
  105. return v;
  106. }
  107.  
  108. float row_avg(vector* v)
  109. {
  110. int avg = 0;
  111. for (int i = 0; i < v->size; i++) {
  112. avg += v->data[i];
  113. }
  114.  
  115. return avg / v->size;
  116. }
  117.  
  118. int row_max(vector *v)
  119. {
  120. int max = v->data[0];
  121. for (int i = 0; i < v->size; i++) {
  122. if (v->data[i] > max) {
  123. max = v->data[i];
  124. }
  125. }
  126.  
  127. return max;
  128. }
  129.  
  130.  
  131. int main()
  132. {
  133. int count = 0;
  134. char num[5];
  135. printf("Введите количество строк: ");
  136. fgets(num, 5, stdin);
  137. count = atoi(num);
  138. if (count <= 0) {
  139. return 1;
  140. }
  141.  
  142. matrix* m = matrix_new(count);
  143.  
  144. for (int i = 0; i < count; i++)
  145. {
  146. printf("Введите %d строку: ", i+1);
  147. vector* v = row_get();
  148. if (v) {
  149. m->rows[i] = v;
  150. }
  151. }
  152.  
  153. //bi = s1 - s2, где s1 - сумма четных, а s2 - сумма нечетных элементов
  154.  
  155. vector* res = vec_new();
  156.  
  157. for (int i = 0; i < count; i++)
  158. {
  159. vector* v = m->rows[i];
  160. int even_sum = 0;
  161. int uneven_sum = 0;
  162.  
  163. for (int j = 0; j < v->size; j++)
  164. {
  165. if (v->data[j] % 2 == 0) {
  166. even_sum += v->data[j];
  167. } else {
  168. uneven_sum += v->data[j];
  169. }
  170. }
  171.  
  172. vec_insert(res, even_sum - uneven_sum);
  173. }
  174.  
  175. printf("Исходная матрица: \n");
  176. matrix_print(m);
  177. printf("---------------------------\nРезультирующий вектор: \n");
  178. vec_print(res);
  179.  
  180. vec_free(res);
  181. matrix_free(m);
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement