Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- using namespace std;
- void writeTask()
- {
- cout << "Данная программа вычисляет норму матрицы.\n";
- }
- int takeMatrixOrderFromConsole()
- {
- const int MAX_ORDER = 10;
- const int MIN_ORDER = 2;
- bool isNotCorrect;
- int order;
- do
- {
- isNotCorrect = false;
- cout << "Введите порядок квадратной матрицы: ";
- cin >> order;
- if (cin.fail())
- {
- cin.clear();
- while (cin.get() != '\n');
- isNotCorrect = true;
- cout << "Введено некорректное значение. Повторите попытку...\n";
- }
- if ((!isNotCorrect) && (cin.get() != '\n'))
- {
- cin.clear();
- isNotCorrect = true;
- cout << "Введено некорректное значение. Повторите попытку...\n";
- }
- if ((!isNotCorrect) && ((order < MIN_ORDER) || (order > MAX_ORDER)))
- {
- isNotCorrect = true;
- cout << "Введённое число не входит в допустимый диапазон. Повторите попытку...\n";
- }
- } while (isNotCorrect);
- return order;
- }
- int** creationAllMatrixes(int order)
- {
- int** matrix = new int* [order];
- for (int i = 0; i < order; i++)
- {
- matrix[i] = new int[order];
- }
- return matrix;
- }
- int** createMatrixFromConsole(int& order)
- {
- const int MIN_ELEMENT = -2147483648;
- const int MAX_ELEMENT = 2147483647;
- order = takeMatrixOrderFromConsole();
- int** matrix = creationAllMatrixes(order);
- bool isNotCorrect;
- for (int i = 0; i < order; i++)
- {
- for (int j = 0; j < order; j++)
- {
- do
- {
- isNotCorrect = false;
- cout << "Введите элемент " << (i + 1) << " строки " << (j + 1) << " столбца матрицы: ";
- cin >> matrix[i][j];
- if (cin.fail())
- {
- cin.clear();
- while (cin.get() != '\n');
- isNotCorrect = true;
- cout << "Введено некорректное значение. Повторите попытку...\n";
- }
- if ((!isNotCorrect) && (cin.get() != '\n'))
- {
- cin.clear();
- isNotCorrect = true;
- cout << "Введено некорректное значение. Повторите попытку...\n";
- }
- if ((!isNotCorrect) && ((matrix[i][j] < MIN_ELEMENT) || (matrix[i][j] > MAX_ELEMENT)))
- {
- isNotCorrect = true;
- cout << "Введённое значение не входит в допустимый диапазон.Повторите попытку...\n";
- }
- } while (isNotCorrect);
- }
- }
- return matrix;
- }
- void outputMatrixInConsole(int** matrix, int order)
- {
- for (int i = 0; i < order; i++)
- {
- for (int j = 0; j < order; j++)
- {
- cout << matrix[i][j] << " ";
- }
- cout << endl;
- }
- }
- string takePathToFile()
- {
- bool isNotCorrect;
- string path;
- fstream file;
- do
- {
- isNotCorrect = false;
- cout << "Введите путь к файлу: ";
- cin >> path;
- file.open(path);
- if (!file.is_open())
- {
- isNotCorrect = true;
- cout << "Файл не найден. Повторите попытку...\n";
- }
- } while (isNotCorrect);
- file.close();
- return path;
- }
- int** takeMatrixFromFile(int& order)
- {
- cout << "Требуется файл для чтения. ";
- string path = takePathToFile();
- const int MIN_ELEMENT = -2147483648;
- const int MAX_ELEMENT = 2147483647;
- const int MAX_ORDER = 10;
- const int MIN_ORDER = 2;
- bool isNotCorrect;
- fstream file;
- int** matrix;
- do
- {
- do
- {
- isNotCorrect = false;
- file.open(path);
- file >> order;
- if (file.fail())
- {
- file.clear();
- while (file.get() != '\n');
- cout << "Некорректно введённый порядок матрицы. ";
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && ((order < MIN_ORDER) || (order > MAX_ORDER)))
- {
- cout << "Порядок матрицы неверного диапазона! ";
- isNotCorrect = true;
- }
- if (isNotCorrect)
- {
- cout << "Повторите попытку...\n";
- path = takePathToFile();
- file.close();
- }
- } while (isNotCorrect);
- matrix = creationAllMatrixes(order);
- int i = 0;
- while ((!isNotCorrect) && (i < order))
- {
- int j = 0;
- while ((!isNotCorrect) && (j < order))
- {
- file >> matrix[i][j];
- if (file.fail())
- {
- cout << "Ошибка! Найдено некорректное значение элемента матрицы\n";
- isNotCorrect = true; i--;
- }
- j++;
- }
- i++;
- }
- if (isNotCorrect)
- {
- cout << "Проверьте правильность введённых данных и повторите попытку...\n";
- path = takePathToFile();
- }
- } while (isNotCorrect);
- return matrix;
- }
- int* calculateAbsSum(int** matrix, int order)
- {
- int* absSums = new int[order];
- for (int i = 0; i < order; i++)
- {
- int sum = 0;
- for (int j = 0; j < order; j++)
- {
- sum += abs(matrix[i][j]);
- }
- absSums[i] = sum;
- }
- return absSums;
- }
- int findMatrixNorm(int** matrix, int order)
- {
- int* absSums = calculateAbsSum(matrix, order);
- int norm = absSums[0];
- for (int i = 1; i < order; i++)
- {
- if (absSums[i] > norm)
- {
- norm = absSums[i];
- }
- }
- return norm;
- }
- int chooseInputOutputMethod()
- {
- bool isNotCorrect;
- int choice;
- do
- {
- isNotCorrect = false;
- cin >> choice;
- if (cin.fail())
- {
- cin.clear();
- while (cin.get() != '\n');
- cout << "Число введено некорректно. Повторите попытку...\n";
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && (cin.get() != '\n'))
- {
- cin.clear();
- cout << "Число введено некорректно. Повторите попытку...\n";
- isNotCorrect = true;
- }
- if ((!isNotCorrect) && (choice != 1) && (choice != 2))
- {
- cout << "Введите либо 1, либо 2. Ваш выбор: \n";
- isNotCorrect = true;
- }
- } while (isNotCorrect);
- return choice;
- }
- void outputAnswerInFile(int answer)
- {
- cout << "Требуется файл для записи. ";
- string path = takePathToFile();
- bool isNotCorrect;
- fstream file;
- isNotCorrect = false;
- file.open(path);
- file << "Полученная норма матрицы: " << answer;
- file.close();
- cout << "Норма матрицы записана в файл!\n";
- }
- int** getMatrix(int choice, int& order)
- {;
- int** matrix;
- if (choice == 1)
- {
- matrix = createMatrixFromConsole(order);
- outputMatrixInConsole(matrix, order);
- }
- else
- {
- matrix = takeMatrixFromFile(order);
- }
- return matrix;
- }
- void outputResult(int choice, int answer)
- {
- if (choice == 1)
- {
- cout << "Полученная норма матрицы: " << answer;
- }
- else
- {
- outputAnswerInFile(answer);
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Rus");
- writeTask();
- cout << "Выберите способ ввода данных (1 - через консоль, 2 - с помощью файлов): ";
- int choice = chooseInputOutputMethod();
- int order = 0;
- int** matrix = getMatrix(choice, order);
- int answer = findMatrixNorm(matrix, order);
- cout << "Выберите способ вывода данных (1 - через консоль, 2 - с помощью файлов): ";
- choice = chooseInputOutputMethod();
- outputResult(choice, answer);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement