Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <windows.h>
- using namespace std;
- const int
- MIN_LENGTH = 1,
- MAX_LENGTH = 10,
- MIN_VALUE = -100,
- MAX_VALUE = 100;
- void printCondition()
- {
- cout << "Данная программа найдет наибольшую сумму модулей элементов строк заданной матрицы" << endl;
- }
- int readNum(int min, int max) {
- bool isIncorrect;
- int num;
- do {
- isIncorrect = true;
- cin >> num;
- if (cin.fail() || (cin.get() != '\n')) {
- cout << "Некорректный ввод! Введите значение еще раз:" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- else {
- if (num < min || num > max) {
- cout << "Недопустимое значение! Введите значение еще раз:" << endl;
- }
- else {
- isIncorrect = false;
- }
- }
- } while (isIncorrect);
- return num;
- }
- bool checkAndInputFileData(string& path, int**& matrix, int& n, int& m) {
- ifstream fin;
- bool isFileCorrect;
- int buf, i, j;
- fin.open(path);
- isFileCorrect = true;
- fin >> n;
- if (fin.fail()) {
- fin.clear();
- isFileCorrect = false;
- cout << "Файл не найден или данные в файле некоректны.\nВнесите изменения в файл и повторите попытку!" << endl;
- }
- else if ((MIN_LENGTH > n) || (MAX_LENGTH < n)) {
- isFileCorrect = false;
- cout << "Значение выходит за возможные пределы!\nВнесите изменения в файл и повторите попытку!" << endl;
- }
- else if (fin.get() != '\n') {
- cout << "В первой строке должно находится только количество строк матрицы!\nВнесите изменения в файл и повторите попытку!" << endl;
- isFileCorrect = false;
- }
- if (isFileCorrect)
- {
- fin >> m;
- if (fin.fail()) {
- fin.clear();
- isFileCorrect = false;
- cout << "Файл не найден или данные некоректны.\nВнесите изменения в файл и повторите попытку!" << endl;
- }
- else if ((MIN_LENGTH > m) || (MAX_LENGTH < m)) {
- isFileCorrect = false;
- cout << "Значение выходит за возможные пределы!\nВнесите изменения в файл и повторите попытку!" << endl;
- }
- else if (fin.get() != '\n') {
- cout << "Во второй строке должно находится только количество столбцов матрицы!\nВнесите изменения в файл и повторите попытку!" << endl;
- isFileCorrect = false;
- }
- }
- if (isFileCorrect)
- {
- matrix = new int* [n];
- for (i = 0; i < n; i++)
- {
- matrix[i] = new int[m];
- }
- i = 0;
- do {
- j = 0;
- do {
- fin >> buf;
- if (fin.fail()) {
- cout << "Элементы матрицы введены некорректно!\nВнесите изменения в файл и повторите попытку!" << endl;
- isFileCorrect = false;
- fin.clear();
- } else
- matrix[i][j] = buf;
- j++;
- } while (isFileCorrect && j < m);
- i++;
- } while (isFileCorrect && i < n);
- }
- if (isFileCorrect && !fin.eof()) {
- cout << "Элементы массива введены некорректно!\nВнесите изменения в файл и повторите попытку!" << endl;
- isFileCorrect = false;
- }
- fin.close();
- return isFileCorrect;
- }
- void inputMatrixFromConsole(int**& matrix, int& n, int& m) {
- int buf;
- cout << "Введите количество cтрок:";
- n = readNum(MIN_LENGTH, MAX_LENGTH);
- cout << "Введите количество cтолбцов:";
- m = readNum(MIN_LENGTH, MAX_LENGTH);
- matrix = new int* [n];
- for (int i = 0; i < n; i++)
- {
- matrix[i] = new int[m];
- }
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < m; j++)
- {
- cout << "Введите элемент матрицы " << "(" << i << "," << j << ")" << ":" << endl;
- buf = readNum(MIN_VALUE, MAX_VALUE);
- matrix[i][j] = buf;
- }
- }
- }
- void inputMatrix(int**& matrix, int& n, int& m) {
- int choice;
- bool isInputFromFileSuccessfully;
- string pathFile;
- cout << "Выберите вариант ввода:" << endl << "1. Ввод из консоли" << endl << "2. Ввод из файла" << endl << "Использовать вариант:";
- choice = readNum(1, 2);
- if (choice == 1) {
- cout << "Допустимые значения:" << endl;
- cout << "Количество строк и столбцов - натуральные числа от " << MIN_LENGTH << " до " << MAX_LENGTH << endl;
- cout << "Элементы матрицы - натуральные числа от " << MIN_VALUE << " до " << MAX_VALUE << endl;
- inputMatrixFromConsole(matrix, n, m);
- }
- else {
- cout << "Данные в файле должны содержать:" << endl;
- cout << "Количество строк и столбцов - натуральное число от " << MIN_LENGTH << " до " << MAX_LENGTH << endl;
- cout << "Элементы матрицы - натуральные числа от " << MIN_VALUE << " до " << MAX_VALUE << endl;
- do {
- cout << "Введите путь к файлу с его раширением:";
- cin >> pathFile;
- isInputFromFileSuccessfully = checkAndInputFileData(pathFile, matrix, n, m);
- } while(!isInputFromFileSuccessfully);
- }
- }
- void outputData(int sum) {
- int choice;
- ofstream fout;
- string path;
- bool isFileIncorrect;
- cout << "Выберите вариант вывода:" << endl << "1. Вывод в консоль" << endl << "2. Вывод в файл" << endl << "Использовать вариант:";
- choice = readNum(1, 2);
- if (choice == 1) {
- cout << "Наибольшая сумма модулей элементов строк матрицы:" << sum << endl;
- }
- else {
- cout << "Для вывода введите путь к файлу и его имя c расширением." << endl;
- cout << "Если файл отсутствует то он будет создан автоматически по указанному пути или в корневой папке программы (по умолчанию)" << endl;
- do {
- cout << "Введите путь:";
- cin >> path;
- fout.open(path);
- isFileIncorrect = false;
- fout << "Наибольшая сумма модулей элементов строк матрицы:" << sum;
- if (fout.fail()) {
- cout << "Не удалось вывести в файл! ";
- isFileIncorrect = true;
- fout.clear();
- }
- } while (isFileIncorrect);
- fout.close();
- cout << "Вывод данных... успешно!";
- }
- }
- int findMaxSumOfRowElements(int** matrix, int n, int m)
- {
- int maxSum = 0, sum = 0,i ,j ;
- for (i = 0; i < n; i++)
- {
- sum = 0;
- for (j = 0; j < m ; j++)
- sum += abs(matrix[i][j]);
- if (sum > maxSum)
- {
- maxSum = sum;
- }
- }
- return maxSum;
- }
- int main() {
- int sum, n , m;
- int** matrix;
- SetConsoleOutputCP(CP_UTF8);
- printCondition();
- inputMatrix(matrix, n, m);
- sum = findMaxSumOfRowElements(matrix, n, m);
- outputData(sum);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement