Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.71 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <conio.h>
  4. #include <locale.h>
  5. #include <ctime>
  6. #include <stdlib.h>
  7. #include <ctime>
  8.  
  9. constexpr int N = 50;
  10.  
  11. int read(double arr[N][N], int n, int m);
  12.  
  13. void random(double arr[N][N], int n, int m);
  14.  
  15. int print_variant(int& count);
  16.  
  17. void printTable(double arr[N][N], int n, int m);
  18.  
  19. void opisanie();
  20.  
  21. void zna(int& n, int& m, int N, int &obr);
  22.  
  23. void Menu();
  24.  
  25. double summa(double arr[N][N], int n, int m, double sum);
  26.  
  27. void obrabotka(double arr[N][N], double arrsumM[N][N], double arrsumN[N][N], double p, double y, double x, int m, int n, double ara[N], double sum);
  28.  
  29. int main()
  30. {
  31. setlocale(LC_ALL, "Russian");
  32. double arr[N][N];
  33. int n = -1, m = -1, count = -56, op;
  34. double arrsumM[N][N];
  35. double arrsumN[N][N];
  36. int x = 0, y = 0;
  37. double ara[N];
  38. double sum, p;
  39. int obr;
  40. obr = -1;
  41. p = 0; sum = 0; int vibor = -56;
  42. while (vibor != 5)
  43. {
  44. system("cls");
  45. Menu();
  46. vibor = print_variant(count);
  47. switch (vibor) {
  48. case 1:
  49. opisanie();
  50. break;
  51. case 2:
  52. if (obr == 1)
  53. printf("Будет введена новая матрица\n");
  54. else
  55. printf("Будет введена матрица\n");
  56. printf("Как вы хотите заполнить матрицу?\n");
  57. printf("Введите 1, если случайным образом\n");
  58. printf("Введите 2, если хотите ввести её\n");
  59. scanf_s("%d", &op);
  60. while (op != 1 && op != 2)
  61. scanf_s("%d", &op);
  62. if (op == 2)
  63. {
  64. zna(n, m, N, obr);
  65. while (read(arr, n, m) == 1)
  66. printf("Значения введены некорректно, повторите попытку");
  67. obr = 1;
  68. }
  69. else if (op == 1)
  70. {
  71. zna(n, m, N, obr);
  72. random(arr, n, m);
  73. obr = 1;
  74. }
  75. break;
  76. case 3:
  77. if (obr == -1)
  78. printf("Сперва сформируйте матрицу, чтобы её обработать\n");
  79. else
  80. printf("Сейчас ваша матрица будет обработана\n");
  81. obrabotka(arr, arrsumM, arrsumN, p, y, x, m, n, ara, sum);
  82. break;
  83. case 4:
  84. if (obr == -1)
  85. printf("невозможно, таблица не была введена\n");
  86. else
  87. printTable(arr, n, m);
  88. break;
  89. }
  90. system("pause");
  91. if (vibor == 5)
  92. {
  93. system("cls");
  94. return 0;
  95. }
  96. }
  97. return 0;
  98. }
  99.  
  100. int read(double arr[N][N], int n, int m) // функция ввода матрицы
  101. {
  102. printf("Введите вашу матрицу\n");
  103. for (int i = 0; i < n; i++)
  104. for (int j = 0; j < m; j++)
  105. {
  106. if (scanf_s("%lf", &arr[i][j]) == 0)
  107. return 1;
  108. }
  109. return 0;
  110. }
  111.  
  112. void zna(int& n, int& m, int N, int &obr) // функция ввода размеров
  113. {
  114. n = -56; m = -56;
  115. while (n < 1 || n > N)
  116. {
  117. printf("Введите размер строки, пока он не будет превышать ограничение на размер или измените размер\n");
  118. scanf_s("%d", &n);
  119. }
  120. while (m < 1 || m > N)
  121. {
  122. printf("Введите размер столбца, пока он не будет превышать ограничение на размер или измените размер\n");
  123. scanf_s("%d", &m);
  124. }
  125. }
  126. void printTable(double arr[N][N], int n, int m) // функция вывода матрицы
  127. {
  128. for (int i = 0; i < n; i++)
  129. for (int j = 0; j < m; j++)
  130. {
  131. printf("%10.2lf", arr[i][j]);
  132. if (j == m - 1)
  133. printf("\n");
  134. }
  135. }
  136.  
  137. double summa(double arr[N][N], int n, int m, double sum)
  138. {
  139. for (int i = 0; i < n; i++) // Здесь мы ищем сумму всех элементов матрицы
  140. for (int j = 0; j < m; j++)
  141. sum += arr[i][j];
  142. printf("\n");
  143. printf("Cумма элементов массива равна %.2lf", sum);
  144. return sum;
  145. }
  146.  
  147. void Menu()
  148. {
  149. printf("********| Выберите предложенные № |********\n");
  150. printf("-------------------------------------------\n");
  151. printf("* 1) Описание программы *\n");
  152. printf("-------------------------------------------\n");
  153. printf("* 2) Заполнение матрицы *\n");
  154. printf("-------------------------------------------\n");
  155. printf("* 3) Обработка матрицы *\n");
  156. printf("-------------------------------------------\n");
  157. printf("* 4) Вывод матрицы *\n");
  158. printf("-------------------------------------------\n");
  159. printf("* 5) Выход из меню *\n");
  160. printf("*******************************************\n");
  161. }
  162.  
  163. int print_variant(int& count)
  164. {
  165. while (count != 5)
  166. {
  167. scanf_s("%d", &count);
  168. return count;
  169. }
  170. }
  171.  
  172. void opisanie()
  173. {
  174. printf("Программа получает на вход матрицу. Результатом программы является матрица, полученная из исходной путем вычисления\n");
  175. printf("суммы элементов выше и правее для каждого элемента матрицы, затем вычитания этих сумм из общей суммы элементов матрицы\n\n");
  176. }
  177.  
  178. void random(double arr[N][N], int n, int m)
  179. {
  180. for (int i = 0; i < n; i++)
  181. for (int j = 0; j < m; j++)
  182. arr[i][j] = rand() % 100 - 50;
  183. }
  184. void obrabotka(double arr[N][N], double arrsumM[N][N], double arrsumN[N][N], double p, double y, double x, int m, int n, double ara[N], double sum)
  185. {
  186. for (int i = 0; i < n; i++) // Здесь мы ищем сумму всех элементов матрицы
  187. for (int j = 0; j < m; j++)
  188. sum = sum + arr[i][j];
  189. for (int j = 0; j < m; j++) // находим сумму элементов выше определенного элемента
  190. for (int i = 1; i < n; i++)
  191. {
  192. y = i;
  193. for (int k = 0; k <= y - 1; k++)
  194. p += arr[k][j];
  195. arrsumM[j][i] = p;
  196. p = 0;
  197. }
  198. for (int j = 0; j < m; j++)
  199. arrsumM[j][0] = 0;
  200. p = 0;
  201. for (int i = 0; i < n; i++) // находим сумму элементов правее определенного элемента
  202. for (int j = 0; j < m - 1; j++)
  203. {
  204. x = j;
  205. for (int k = 0; k <= x; k++)
  206. p += arr[i][k];
  207. arrsumN[i][j] = p;
  208. p = 0;
  209. }
  210. for (int i = 0; i < n; i++) // сортируем массив с суммами
  211. {
  212. for (int j = 0; j < m - 1; j++)
  213. ara[j] = arrsumN[i][j];
  214. for (int j = 0; j < m - 1; j++)
  215. arrsumN[i][j] = ara[m - j - 2];
  216. }
  217. for (int i = 0; i < n; i++) // формируем новую матрицу
  218. for (int j = 0; j < m; j++)
  219. arr[i][j] = sum - arrsumM[j][i];
  220. for (int i = 0; i < n; i++)
  221. for (int j = 0; j < m - 1; j++)
  222. arr[i][j] = arr[i][j] - arrsumN[i][j];
  223. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement