Advertisement
dxvmxnd

Untitled

Nov 11th, 2023
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <cmath>
  5. #include <string>
  6.  
  7. using namespace std;
  8. int exceptionRead(int i) {
  9. bool isNotCorrect;
  10. int number;
  11.  
  12. number = 0;
  13. do {
  14. isNotCorrect = false;
  15. cout << "Введите " << (i + 1) << " элемент массива" << endl;
  16. cin >> number;
  17. if (cin.fail()) {
  18. isNotCorrect = true;
  19. cout << "Неверный ввод данных!" << endl;
  20. cin.clear();
  21. while (cin.get() != '\n');
  22. }
  23. } while (isNotCorrect);
  24.  
  25. return number;
  26. }
  27.  
  28. int sizeConsole() {
  29. bool isNotCorrect;
  30. int size;
  31.  
  32. do {
  33. isNotCorrect = false;
  34. cout << "Введите количество элементов в массиве: " << endl;
  35. cin >> size;
  36. if (cin.fail() or (size < 1)) {
  37. isNotCorrect = true;
  38. cout << "Неверный ввод данных!" << endl;
  39. cin.clear();
  40. while (cin.get() != '\n');
  41. }
  42. } while (isNotCorrect);
  43.  
  44. cout << "Количество элементов: " << size << endl;
  45. return size;
  46. }
  47.  
  48. void taskEssence() {
  49. setlocale(LC_ALL, "Rus");
  50. cout << "Данная программа находит наибольшее количество единиц, идущих подряд среди массива чисел." << endl;
  51. }
  52.  
  53. string pathChoice() {
  54. string path;
  55. bool isNotCorrect;
  56. do {
  57. isNotCorrect = false;
  58. cout << "Введите путь к файлу." << endl;
  59. cin >> path;
  60. ifstream fin(path);
  61. if (fin.is_open()) {
  62. cout << "Файл успешно открыт!" << endl;
  63. }
  64. else {
  65. cout << "Ошибка открытия файла" << endl;
  66. isNotCorrect = true;
  67. }
  68. fin.close();
  69. } while (isNotCorrect);
  70.  
  71.  
  72. return path;
  73. }
  74.  
  75. int sizeFile(const string& path) {
  76. int size;
  77. bool isNotCorrect;
  78.  
  79. ifstream fin(path);
  80. do {
  81. isNotCorrect = false;
  82. cout << "Ввод количества элементов массива..." << endl;
  83. fin >> size;
  84. if (fin.fail() or (size < 1)) {
  85. isNotCorrect = true;
  86. cout << "Данные введены неккоректно. Впишите данные с клавиатуры." << endl;
  87. fin.clear();
  88. while (fin.get() != '\n');
  89. size = sizeConsole();
  90. }
  91. } while (isNotCorrect);
  92. fin.close();
  93. cout << "Количество элементов массива: " << size << endl;
  94. return size;
  95. }
  96.  
  97. int* matrixReadFile(const string& path, int size, int* array) {
  98. ifstream fin(path);
  99. string line;
  100.  
  101. cout << "Запись матрицы..." << endl;
  102. std::getline(fin, line);
  103. for (int i = 0; i < size; i++) {
  104.  
  105.  
  106. fin >> array[i];
  107. if (fin.fail()) {
  108. cout << "Данные введены неккоректно. Введите значение с клавиатуры." << endl;
  109. fin.clear();
  110. while (fin.get() != ' ');
  111. array[i] = exceptionRead(i);
  112. }
  113.  
  114. }
  115. return array;
  116. }
  117.  
  118. int arrayCout(int* array, int size) {
  119. int res;
  120. int maxRes;
  121.  
  122. res = 0;
  123. maxRes = 0;
  124.  
  125. for (int i = 0; i < size; i++) {
  126. if (array[i] == 1) {
  127. res++;
  128. }
  129. else {
  130. if (maxRes < res) {
  131. maxRes = res;
  132. res = 0;
  133. }
  134. else {
  135. res = 0;
  136. }
  137. }
  138. }
  139.  
  140. delete[] array;
  141. return maxRes;
  142. }
  143.  
  144. void output(int result) {
  145. string path;
  146. cout << "Максимальное количество единиц, идущих подряд в массиве: " << result << endl;
  147. bool isNotCorrect;
  148. do {
  149. isNotCorrect = false;
  150. cout << "Введите путь к файлу для вывода." << endl;
  151. cin >> path;
  152. ofstream fout(path, fstream::app);
  153. if (fout.is_open()) {
  154. cout << "Файл успешно открыт!" << endl;
  155. fout << "Максимальное количество единиц, идущих подряд в массиве: " << result << endl;
  156. }
  157. else {
  158. cout << "Ошибка открытия файла" << endl;
  159. isNotCorrect = true;
  160. }
  161. fout.close();
  162. cout << "Ответ записан в файл." << endl;
  163.  
  164. } while (isNotCorrect);
  165. }
  166.  
  167. int fromFile(int* array) {
  168. string path;
  169. int size;
  170. int maxRes;
  171.  
  172. maxRes = 0;
  173. cout << "При записи данных из файла, учтите, что на первой строке написано количество элементов массива, а далее с следующей строки через пробел сам массив" << endl;
  174. path = pathChoice();
  175. size = sizeFile(path);
  176. array = new int[size];
  177. array = matrixReadFile(path, size, array);
  178. maxRes = arrayCout(array, size);
  179.  
  180.  
  181. return maxRes;
  182. }
  183.  
  184. int* arrayReadConsole(int* array, int size) {
  185. bool isNotCorrect;
  186.  
  187. for (int i = 0; i < size; i++) {
  188. do {
  189. isNotCorrect = false;
  190. cout << "Введите " << (i + 1) << " элемент массива" << endl;
  191. cin >> array[i];
  192. if (cin.fail()) {
  193. isNotCorrect = true;
  194. cout << "Неверный ввод данных!" << endl;
  195. cin.clear();
  196. while (cin.get() != '\n');
  197. }
  198. } while (isNotCorrect);
  199. }
  200. return array;
  201. }
  202.  
  203. int fromConsole(int* array) {
  204. int size;
  205. int maxRes;
  206.  
  207. maxRes = 0;
  208. size = sizeConsole();
  209. array = new int[size];
  210. array = arrayReadConsole(array, size);
  211. maxRes = arrayCout(array, size);
  212.  
  213. return maxRes;
  214.  
  215. }
  216.  
  217. int sourceChoice(int* array) {
  218. int choiceNumber;
  219. bool isNotCorrect;
  220. int maxRes;
  221.  
  222. cout << "Выберите, откуда будут выводиться данные: " << endl;
  223. do {
  224. isNotCorrect = false;
  225. cout << "Введите 0, если с консоли; введите 1, если с файла." << endl;
  226. cin >> choiceNumber;
  227. if (cin.fail() or ((choiceNumber != 0) and (choiceNumber != 1))) {
  228. isNotCorrect = true;
  229. cout << "Данные введены неккоректно" << endl;
  230. cin.clear();
  231. while (cin.get() != '\n');
  232. }
  233. } while (isNotCorrect);
  234.  
  235. if (choiceNumber == 0) {
  236. maxRes = fromConsole(array);
  237. }
  238. else {
  239. maxRes = fromFile(array);
  240. }
  241.  
  242. return maxRes;
  243. }
  244.  
  245. int main() {
  246. int* array;
  247. int maxRes;
  248.  
  249. array = nullptr;
  250. taskEssence();
  251. maxRes = sourceChoice(array);
  252. output(maxRes);
  253. }
  254.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement