Guest User

Untitled

a guest
Dec 17th, 2017
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.70 KB | None | 0 0
  1. //Листинг 1
  2. int **matrix = new int*[takeSize()];
  3. for (int count = 0; count < takeSize(); count++)
  4. {
  5. matrix[count] = new int[takeSize()];
  6. }
  7.  
  8. // PR5_din_arrays.cpp: определяет точку входа для консольного приложения.
  9. //
  10. /*Дана целочисленная квадратная матрица. Определить:
  11. 1) Сумму элементов в тех строках, которые не содержат отрицательных элементов
  12. 2) минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы.
  13. */
  14.  
  15. #include "stdafx.h"
  16. #include <time.h>
  17. #include <iomanip>
  18. #include <iostream>
  19. using namespace std;
  20.  
  21. int SetSize()//задаёт размер массива. Так как матрица квадратная, будем оперировать 1 числом.
  22. {
  23. int size = 2;
  24.  
  25. cout << "input the size of matrix" << endl;
  26. cin >> size;
  27. while (size < 2)
  28. {
  29. cout << "incorrect value!" << endl;
  30. cout << "input the size of matrix" << endl;
  31. cin >> size;
  32. }
  33. return size;
  34. }
  35.  
  36. void MakeArray(int** a, int size)
  37. {
  38. srand(time(NULL));
  39. cout << "Original array:" << endl;
  40. for (int i = 0; i < size; i++)
  41. {
  42. for (int j = 0; j < size; j++)
  43. {
  44. a[i][j] = rand() % 101 - 50;
  45. cout << setw(6) << left << a[i][j];
  46. }
  47. cout << endl;
  48. }
  49. }
  50. void ClearArrays(int *array, int size, int *array2)
  51. {
  52. int ds = size - 1;
  53. for (int i = 0; i < size; i++)
  54. {
  55. array[i] = 0;
  56. }
  57. for (int i = 0; i < ds; i++)
  58. {
  59. array2[i] = 0;
  60. }
  61. }
  62. int MakeSum(int **a, int size)
  63. {
  64. int sv = 0;
  65. for (int i = 0; i < size; i++)
  66. {
  67. for (int j = 0; j < size; j++)
  68. {
  69. if (a[i][j] < 0)
  70. {
  71. sv = 0;
  72. break;
  73. }
  74. else
  75. {
  76. sv = sv + a[i][j];
  77. }
  78. }
  79. }
  80. return sv;
  81. }
  82. int MakeMult(int *diasum, int **matrix, int N)
  83. {
  84. int ds = N - 1;
  85. int min_val1 = INT_MAX;
  86. int min_val = INT_MAX;
  87. for (int i = 1; i < N; i++)
  88. {
  89. int x = i;
  90. int y = 0;
  91. while ((x <= N - 1) && (y <= N - 1))
  92. {
  93. diasum[i - 1] = diasum[i - 1] + matrix[y][x];
  94. x++;
  95. y++;
  96. }
  97. for (int i = 0; i < ds; i++)
  98. {
  99. if (diasum[i] < min_val)
  100. {
  101. min_val = diasum[i];
  102. }
  103. }
  104. }
  105. for (int i = 1; i < N; i++)
  106. {
  107.  
  108. int y = i;
  109. int x = 0;
  110. while ((y <= N - 1) && (x <= N - 1))
  111. {
  112. diasum[i - 1] = diasum[i - 1] + matrix[y][x];
  113. x++;
  114. y++;
  115. }
  116. for (int i = 0; i < ds; i++)
  117. {
  118. if (diasum[i] < min_val1)
  119. {
  120. min_val1 = diasum[i];
  121. }
  122. }
  123. }
  124. if (min_val1 == INT_MAX)
  125. {
  126. min_val1 = 0;
  127. }
  128. if (min_val == INT_MAX)
  129. {
  130. min_val = 0;
  131. }
  132. if (min_val1 < min_val)
  133. {
  134. min_val = min_val1;
  135. }
  136.  
  137. return min_val;
  138. }
  139. void WriteRess(int *sum, int size, int min_val)
  140. {
  141. cout << endl << endl;
  142. cout << "Minimal element from diagonals " << min_val;
  143. cout << endl;
  144. cout << "sum-s of rows: " << endl;
  145. for (int i = 0; i < size; i++)
  146. {
  147. if (sum[i] != 0)
  148. {
  149. cout << setw(6) << left << sum[i];
  150. }
  151. else
  152. {
  153. cout << i + 1 << " Row have elements < 0 " << endl;
  154. }
  155. }
  156. }
  157. int takeSize(int a = 0)
  158. {
  159. static int size;
  160. size = 0;
  161. size = size + a;
  162. return size;
  163. }
  164. int _tmain(int argc, _TCHAR* argv[])
  165. {
  166. //int N = SetSize();
  167. takeSize(SetSize());
  168. int **matrix = new int*[takeSize()];
  169. for (int count = 0; count < takeSize(); count++)
  170. {
  171. matrix[count] = new int[takeSize()];
  172. }
  173. /*выше объявляю саму матрицу*/
  174. int *sum = new int[takeSize()]; // в этот массив пишутся суммы строк. Должен быть динамическим ибо мы не знаем какого порядка будет матрица
  175.  
  176. int *diasum = new int[takeSize() - 1]; // массив в который будут попадать суммы диагоналей
  177. ClearArrays(sum, takeSize(), diasum);
  178. MakeArray(matrix, takeSize());
  179. for (int i = 0; i < takeSize(); i++)
  180. {
  181. sum[i] = MakeSum(matrix, takeSize());
  182. }
  183. cout << endl;
  184. WriteRess(sum, takeSize(), MakeMult(diasum, matrix, takeSize()));
  185. cout << endl;
  186. system("pause");
  187. return 0;
  188. }
Add Comment
Please, Sign In to add comment