Advertisement
THOMAS_SHELBY_18

Lab2_4 C++

Nov 3rd, 2023
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include <cmath>
  5. #include <windows.h>
  6.  
  7. using namespace std;
  8.  
  9. const int
  10. MIN_ARR_LENGTH = 1,
  11. MAX_ARR_LENGTH = 20,
  12. MIN_ARR_VALUE = 1,
  13. MAX_ARR_VALUE = 100;
  14.  
  15. void printCondition()
  16. {
  17. cout << "Дан массив А, состоящий из n-натуральных чисел. Определить максимальное число идущих подряд элементов, равных 1 " << endl;
  18. }
  19. int readNum(int min, int max) {
  20.  
  21. bool isIncorrect;
  22. int num;
  23.  
  24. do {
  25. isIncorrect = true;
  26. cin >> num;
  27. if (cin.fail() || (cin.get() != '\n')) {
  28. cout << "Некорректный ввод! Введите значение еще раз:" << endl;
  29. cin.clear();
  30. while (cin.get() != '\n');
  31. }
  32. else {
  33. if (num < min || num > max) {
  34. cout << "Недопустимое значение! Введите значение еще раз:" << endl;
  35. }
  36. else {
  37. isIncorrect = false;
  38. }
  39. }
  40. } while (isIncorrect);
  41.  
  42. return num;
  43. }
  44.  
  45. bool checkFileData(string& path, int*& arr, int& lengthArr) {
  46. ifstream fin;
  47. bool isFileCorrect;
  48. int buf, i;
  49.  
  50. fin.open(path);
  51. isFileCorrect = true;
  52.  
  53. fin >> lengthArr;
  54. if (fin.fail()) {
  55. fin.clear();
  56. isFileCorrect = false;
  57. cout << "Файл не найден или данные некоректны.\nВнесите изменения в файл и повторите попытку!" << endl;
  58. }
  59.  
  60. else if ((MIN_ARR_LENGTH > lengthArr) || (MAX_ARR_LENGTH < lengthArr)) {
  61. isFileCorrect = false;
  62. cout << "Значение выходит за возможные пределы!\nВнесите изменения в файл и повторите попытку!" << endl;
  63. }
  64. if (isFileCorrect) {
  65.  
  66. arr = new int[lengthArr];
  67. i = 0;
  68.  
  69. do {
  70. fin >> buf;
  71. if (fin.fail()) {
  72. cout << "Элементы массива введены некорректно!\nВнесите изменения в файл и повторите попытку!" << endl;
  73. isFileCorrect = false;
  74. fin.clear();
  75. }
  76. else
  77. arr[i] = buf;
  78. i++;
  79. } while (isFileCorrect && i < lengthArr);
  80. }
  81.  
  82. if (isFileCorrect && !fin.eof()) {
  83. cout << "Элементы массива введены некорректно!\nВнесите изменения в файл и повторите попытку!" << endl;
  84. isFileCorrect = false;
  85. }
  86.  
  87. fin.close();
  88. return isFileCorrect;
  89. }
  90.  
  91. void inputArrFromConsole(int*& arr, int& lengthArr) {
  92. int buf;
  93. cout << "Введите количество элементов:" << endl;
  94. lengthArr = readNum(MIN_ARR_LENGTH, MAX_ARR_LENGTH);
  95.  
  96. arr = new int[lengthArr];
  97.  
  98. for (int i = 0; i < lengthArr; i++) {
  99. cout << "Введите элемент последовательности №" << i + 1 << ":" << endl;
  100. buf = readNum(MIN_ARR_VALUE, MAX_ARR_VALUE);
  101. arr[i] = buf;
  102. }
  103. }
  104. void inputArray(int*& arr, int& lengthArr) {
  105. int choice;
  106. bool isInputFromFileSuccessfully;
  107. string pathFile;
  108.  
  109. cout << "Выберите вариант ввода:" << endl << "1. Ввод из консоли" << endl << "2. Ввод из файла" << endl << "Использовать вариант:";
  110. choice = readNum(1, 2);
  111.  
  112. if (choice == 1) {
  113. cout << "Допустимые значения:" << endl;
  114. cout << "Количество элементов - натуральное число от " << MIN_ARR_LENGTH << " до " << MAX_ARR_LENGTH << endl;
  115. cout << "Элементы массива - натуральные числа от " << MIN_ARR_VALUE << " до " << MAX_ARR_VALUE << endl;
  116. inputArrFromConsole(arr, lengthArr);
  117. }
  118. else {
  119. cout << "Данные в файле должны содержать:" << endl;
  120. cout << "Количество элементов - натуральное число от " << MIN_ARR_LENGTH << " до " << MAX_ARR_LENGTH << endl;
  121. cout << "Элементы массива - натуральные числа от " << MIN_ARR_VALUE << " до " << MAX_ARR_VALUE << endl;
  122.  
  123. do {
  124. cout << "Введите путь к файлу с его раширением:";
  125. cin >> pathFile;
  126. isInputFromFileSuccessfully = checkFileData(pathFile, arr, lengthArr);
  127. } while(!isInputFromFileSuccessfully);
  128. }
  129. }
  130.  
  131. void outputData(int count) {
  132. int choice;
  133. ofstream fout;
  134. string path;
  135. bool isFileIncorrect;
  136.  
  137. cout << "Выберите вариант вывода:" << endl << "1. Вывод в консоль" << endl << "2. Вывод в файл" << endl << "Использовать вариант:";
  138. choice = readNum(1, 2);
  139.  
  140. if (choice == 1) {
  141. if (count == 0) {
  142. cout << "Среди элементов массива чисел равных 1 нет";
  143. }
  144. else {
  145. cout << "Максимальное количество подряд идущих чисел равных 1 в массиве: " << count;
  146. }
  147. }
  148. else {
  149. cout << "Для вывода введите путь к файлу и его имя c расширением." << endl;
  150. cout << "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)" << endl;
  151. do {
  152. cout << "Введите путь:";
  153. cin >> path;
  154. fout.open(path);
  155. isFileIncorrect = false;
  156.  
  157. if (count == 0) {
  158. fout << "Среди элементов массива чисел равных 1 нет";
  159. }
  160. else {
  161. fout << "Максимальное количество подряд идущих чисел равных 1 в массиве: " << count;
  162. }
  163.  
  164. if (fout.fail()) {
  165. cout << "Не удалось вывести в файл! ";
  166. isFileIncorrect = true;
  167. fout.clear();
  168. }
  169. } while (isFileIncorrect);
  170.  
  171. fout.close();
  172. cout << "Вывод данных... успешно!";
  173. }
  174. }
  175. int solveTheTask(int* arr, int n)
  176. {
  177. int i;
  178. int count;
  179. int maxCount;
  180.  
  181. count = 0;
  182. maxCount = 0;
  183. for (i = 0; i < n; i++)
  184. {
  185. if (arr[i] == 1)
  186. {
  187. count++;
  188. if (count > maxCount)
  189. maxCount = count;
  190. }
  191. else
  192. count = 0;
  193.  
  194. }
  195. delete [] arr;
  196. return maxCount;
  197.  
  198. }
  199. int main() {
  200. int maxCount, lengthArr;
  201. int* arrA = new int;
  202.  
  203. SetConsoleOutputCP(CP_UTF8);
  204.  
  205. printCondition();
  206. inputArray(arrA, lengthArr);
  207. maxCount = solveTheTask(arrA, lengthArr);
  208. outputData(maxCount);
  209.  
  210. return 0;
  211. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement