Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- void outputCondition()
- {
- cout << "Данная программа находит элемент массива, состоящего из N натуральных чисел, сумма цифр которого наибольшая.\n";
- }
- void outputInputChoice()
- {
- cout << "Введите 0, если хотите ввести данные из консоли, и 1, если из файла:\n";
- }
- bool isUserChoice()
- {
- const int MIN = 0;
- const int MAX = 1;
- int k;
- bool isIncorrect;
- bool isChoice;
- do
- {
- isIncorrect = false;
- cin >> k;
- if (cin.get() != '\n')
- {
- isIncorrect = true;
- cout << "Введены некорректные данные. Повторите ввод:\n";
- cin.clear();
- while (cin.get() != '\n');
- }
- if ((!isIncorrect) && ((k < MIN) || (k > MAX)))
- {
- isIncorrect = true;
- cout << "Число не входит в допустимый диапазон. Повторите ввод:\n";
- cin.clear();
- }
- } while (isIncorrect);
- isChoice = !(k == MIN);
- return isChoice;
- }
- void outputPathInputCondition()
- {
- cout << "Введите путь к файлу, содержащему массив:\n";
- }
- bool isFileCorrect(string path)
- {
- bool isIncorrect = false;
- string line;
- fstream f(path);
- if (!f.is_open())
- {
- isIncorrect = true;
- cout << "Файл по заданному пути отсутствует или недоступен для открытия. ";
- }
- else if ((path[path.length() - 1] != 't') &&
- (path[path.length() - 2] != 'x') &&
- (path[path.length() - 3] != 't') &&
- (path[path.length() - 4] != '.'))
- {
- isIncorrect = true;
- cout << "Недопустимое расширение файла. ";
- }
- f.close();
- return isIncorrect;
- }
- string takePath()
- {
- bool isIncorrect;
- string path;
- do
- {
- isIncorrect = false;
- cin >> path;
- isIncorrect = isFileCorrect(path);
- if (isIncorrect)
- {
- cout << "Повторите ввод пути к файлу:\n";
- }
- } while (isIncorrect);
- return path;
- }
- void outputSuccessfulInput()
- {
- cout << "Данные из файла считаны успешно.\n";
- }
- void outputNumberConditionForConsole()
- {
- cout << "Введите количество элементов массива N:\n";
- }
- int inputNumberFromConsole()
- {
- const int MIN = 2;
- int n;
- bool isIncorrect;
- do
- {
- isIncorrect = false;
- cin >> n;
- if (cin.get() != '\n')
- {
- isIncorrect = true;
- cout << "Введены некорректные данные. Повторите ввод:\n";
- cin.clear();
- while (cin.get() != '\n');
- }
- if ((!isIncorrect) && (n < MIN))
- {
- isIncorrect = true;
- cout << "Введено недопустимое число элементов. Повторите ввод:\n";
- cin.clear();
- }
- } while (isIncorrect);
- return n;
- }
- void outputInputConditionForConsole()
- {
- cout << "Введите натуральные числа, являющиеся элементами массива.\n";
- }
- int* inputArrayFromConsole(int n)
- {
- int* a = new int[n];
- const int NUM_MIN = 1;
- bool isIncorrect;
- for (int i = 0; i < n; i++)
- {
- do
- {
- cout << "Введите " << i + 1 << " элемент массива:\n";
- isIncorrect = false;
- cin >> a[i];
- if (cin.get() != '\n')
- {
- isIncorrect = true;
- cout << "Введены некорректные данные. Повторите ввод:\n";
- cin.clear();
- while (cin.get() != '\n');
- }
- if ((!isIncorrect) && (a[i] < NUM_MIN))
- {
- isIncorrect = true;
- cout << "Введённые данные не соответствуют условию. Повторите ввод:\n";
- cin.clear();
- }
- } while (isIncorrect);
- }
- return a;
- }
- int inputNumberFromFile(ifstream &fin)
- {
- int n;
- fin >> n;
- return n;
- }
- int* inputArrayFile(int& n)
- {
- string path;
- bool isIncorrect;
- int* a = nullptr;
- do
- {
- isIncorrect = false;
- path = takePath();
- ifstream fin(path);
- if (fin.fail())
- {
- cout << "Проверьте файл на доступ к чтению." << endl;
- isIncorrect = true;
- }
- if (!isIncorrect)
- n = inputNumberFromFile(fin);
- if (!isIncorrect)
- {
- if (n < 1)
- {
- cout << "Проверьте данные для размера в файле." << endl;
- isIncorrect = true;
- }
- else
- {
- a = new int[n];
- for (int i = 0; i < n && !isIncorrect; i++) {
- fin >> a[i];
- if (fin.fail()) {
- isIncorrect = true;
- cout << "Некорректные данные в файле.\n";
- delete[] a;
- }
- }
- }
- }
- } while (isIncorrect);
- return a;
- }
- int* inputArray(bool isInput, int &n)
- {
- string path;
- int* a;
- if (isInput)
- {
- outputPathInputCondition();
- a = inputArrayFile(n);
- outputSuccessfulInput();
- }
- else
- {
- outputNumberConditionForConsole();
- n = inputNumberFromConsole();
- outputInputConditionForConsole();
- a = inputArrayFromConsole(n);
- }
- return a;
- }
- int sumNumbers(int num)
- {
- int sum = 0;
- while (num > 0)
- {
- sum += num % 10;
- num /= 10;
- }
- return sum;
- }
- int maxSumNumbers(int* a, int n)
- {
- int maxSum = 0;
- int maxNum = 0;
- for (int i = 0; i < n; i++)
- {
- int currentSum = sumNumbers(a[i]);
- if (currentSum > maxSum)
- {
- maxSum = currentSum;
- maxNum = a[i];
- }
- }
- return maxNum;
- }
- void outputOutputChoice()
- {
- cout << "Введите 0, если хотите вывести данные в консоль, и 1, если в файл:\n";
- }
- void outputPathOutputCondition()
- {
- cout << "Введите путь к файлу, в который вы хотите вывести результат: \n";
- }
- void outputInFile(int greatestDivider)
- {
- string path;
- bool isIncorrect;
- do {
- isIncorrect = false;
- path = takePath();
- ofstream fout(path);
- if (fout.fail()) {
- cout << "Проверьте файл на доступ к записи." << endl;
- isIncorrect = true;
- }
- if (!isIncorrect) {
- fout << "Число с наибольшей суммой: " << greatestDivider;
- }
- fout.close();
- } while (isIncorrect);
- }
- void outputSuccessfulOutput()
- {
- cout << "Данные записаны в файл успешно.\n";
- }
- void outputInConsole(int greatestDivider)
- {
- cout << "Число с наибольшей суммой: " << greatestDivider << "\n";
- }
- void outputmaxNum(bool isOutput, int greatestDivider)
- {
- string path;
- if (isOutput)
- {
- outputPathOutputCondition();
- outputInFile(greatestDivider);
- outputSuccessfulOutput();
- }
- else
- {
- outputInConsole(greatestDivider);
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- int maxNum = 0;
- bool isInput;
- bool isOutput;
- int* a;
- int n;
- outputCondition();
- outputInputChoice();
- isInput = isUserChoice();
- a = inputArray(isInput, n);
- maxNum = maxSumNumbers(a, n);
- outputOutputChoice();
- isOutput = isUserChoice();
- outputmaxNum(isOutput, maxNum);
- delete[] a;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement