Advertisement
Guest User

Untitled

a guest
Dec 26th, 2022
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. #include <windows.h>
  2. #include <string>
  3. #include <iostream>
  4. #include <iomanip>
  5. #include <random>
  6. #include <ctime>
  7.  
  8. using namespace std;
  9.  
  10. class DinArr
  11. {
  12. public:
  13. int **arr;
  14.  
  15. int *a;
  16. int col;
  17. int row;
  18.  
  19. ////////////////
  20. DinArr()
  21. {
  22. col= 0;
  23. while (col<1 || col>20) //Разумные ограничения размера
  24. {
  25. cout << "Введите количество столбцов = ";
  26. cin >> col;
  27. }
  28.  
  29. row= 0;
  30. while ( row<1 || row>20 )
  31. {
  32. cout << "Введите количество строк = ";
  33. cin >> row;
  34. }
  35.  
  36. }
  37. /////////////////
  38. void MakeArr()
  39. {
  40. int i;
  41. arr = new int*[row]; if (arr==NULL) throw 10;
  42. for(i=0;i<row;i++)
  43. {
  44. a =new int[col];
  45. if (a==NULL) { Alarm= i; throw 11; }
  46. arr[i]= a;
  47. }
  48. Alarm= i;
  49.  
  50. mt19937 gen ((int)time(0));
  51. uniform_int_distribution <int> distribution(-10,10);
  52.  
  53. p= 0;
  54. for (int r= 0; r< row; r++)
  55. {
  56. for (int c= 0; c< col; c++)
  57. {
  58. arr[r][c] = distribution(gen);
  59. if (arr[r][c]>0) p++;
  60. }
  61. }
  62. }
  63. /////////////////
  64. void PrintArr()
  65. {
  66. int i= 0;
  67. for (int r= 0; r< row; r++)
  68. {
  69. for (int c= 0; c< col; c++)
  70. {
  71. cout << arr[r][c] << '\t';
  72. }
  73. cout << endl << endl;
  74. }
  75.  
  76. cout << "Положительные элементы" << endl;
  77. for (int i= 0; i< p; i++)
  78. {
  79. cout << a[i] << '\t';
  80. }
  81. cout << endl;
  82. }
  83. /////////////////
  84. void MainFunc()
  85. {
  86. if (!p) throw 13;
  87. a = new int[p]; if (a==NULL) throw 12;
  88.  
  89. int i= 0;
  90. for (int r= 0; r< row; r++)
  91. {
  92. for (int c= 0; c< col; c++)
  93. {
  94. if (arr[r][c]>0) { a[i]= arr[r][c]; i++; }
  95. }
  96. }
  97. }
  98. /////////////////
  99. ~DinArr()
  100. {
  101. cout << "Выход из программы и освобождаем память" << endl;
  102. for(int i=0;i<Alarm;i++) delete [] arr[i];
  103. delete [] arr;
  104. delete [] a;
  105. }
  106. protected:
  107. int p; //положительных элементов количество
  108. int Alarm;
  109. private:
  110. };
  111.  
  112. int main(int argc, char **argv)
  113. {
  114. system("chcp 1251 > nul"); // Руссификация сообщений
  115. setlocale(LC_ALL, "Russian");
  116.  
  117. DinArr da;
  118.  
  119. try
  120. {
  121. da.MakeArr();
  122. cout << endl << endl;
  123. da.MainFunc(); da.PrintArr();
  124. }
  125.  
  126. catch(int i)
  127. {
  128. switch (i)
  129. {
  130. case 10:
  131. cout << "Ошибка выделения памяти под строки..." << endl; break;
  132. case 11:
  133. cout << "Ошибка выделения памяти под столбцы..." << endl; break;
  134. case 12:
  135. cout << "Ошибка выделения памяти под положительные элементы..." << endl; break;
  136. case 13:
  137. cout << "Ошибка Положительные элементы отсутствуют..." << endl; break;
  138. }
  139. }
  140.  
  141.  
  142. system("pause"); // system("pause > nul");
  143. return 0;
  144. }
  145.  
  146.  
  147.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement