Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- int inputValue(int min, int max);
- void userInputArrayFromConsole(int n);
- void userInputFromConsole();
- double** gauss(double** matrix);
- void userInputFromFile(string path);
- bool checkPath(string path);
- void userInputPath();
- void inputMethod();
- void printWithoutPath(double** matrix);
- string userOutputPath();
- void printWithPath(double** matrix);
- void outputMethod(double** matrix);
- int inputValue(int min, int max) {
- int currentValue;
- bool isNotValid = true;
- do {
- cin >> currentValue;
- if (currentValue >= min && currentValue <= max)
- isNotValid = false;
- else
- cout << "Введите число в заданном диапазоне\n";
- } while (isNotValid);
- return currentValue;
- }
- void userInputArrayFromConsole(int n) {
- const int MIN_VALUE = -500;
- const int MAX_VALUE = 500;
- double** matrix = new double* [n];
- cout << "Введите коэффициенты в диапазоне " << MIN_VALUE << ".." << MAX_VALUE << ":" << endl;
- for (int i = 0; i < n; i++) {
- matrix[i] = new double[n + 1];
- for (int j = 0; j < n; j++) {
- matrix[i][j] = inputValue(MIN_VALUE, MAX_VALUE);
- }
- }
- cout << "Введите свободные члены в диапазоне " << MIN_VALUE << ".." << MAX_VALUE << ":" << endl;
- for (int i = 0; i < n; i++)
- matrix[i][n] = inputValue(MIN_VALUE, MAX_VALUE);
- outputMethod(gauss(matrix));
- }
- void userInputFromConsole() {
- const int MIN_SIZE = 2;
- const int MAX_SIZE = 20;
- int n;
- cout << "Введите порядок матрицы в диапазоне " << MIN_SIZE << ".." << MAX_SIZE << ": ";
- n = inputValue(MIN_SIZE, MAX_SIZE);
- userInputArrayFromConsole(n);
- }
- double** gauss(double** matrix) {
- int n = _msize(matrix) / sizeof(matrix);
- for (int k = 0; k < n; k++)
- for (int j = k + 1; j < n; j++) {
- double temp = matrix[j][k] / matrix[k][k];
- for (int i = k; i < n; i++)
- matrix[j][i] = matrix[j][i] - temp * matrix[k][i];
- matrix[j][n] = matrix[j][n] - temp * matrix[k][n];
- }
- return matrix;
- }
- void userInputFromFile(string path) {
- int n;
- ifstream file(path);
- file.open(path);
- file.clear();
- file >> n;
- double** matrix = new double* [n];
- for (int i = 0; i < n; i++) {
- matrix[i] = new double[n + 1];
- for (int j = 0; j < n; j++)
- file >> matrix[i][j];
- }
- for (int i = 0; i < n; i++)
- file >> matrix[i][n];
- file.close();
- outputMethod(gauss(matrix));
- }
- bool checkPath(string path) {
- ifstream file(path);
- if (file.is_open()) {
- cout << path << " найден" << endl;
- return true;
- }
- else {
- cout << path << " не найден" << endl;
- return false;
- }
- }
- void userInputPath() {
- string path;
- bool isNotValid = false;
- do {
- cout << "Введите абсолютный путь к файлу с входными данными" << endl;
- cin >> path;
- } while (!checkPath(path));
- userInputFromFile(path);
- }
- void inputMethod() {
- int method;
- cout << "Каким способом хотите ввести данные?" << endl;
- cout << "1 - с помощью консоли" << endl;
- cout << "2 - с помощью файла" << endl;
- do {
- cin >> method;
- switch (method) {
- case 1: { userInputFromConsole(); break; }
- case 2: { userInputPath(); break; }
- default: cout << "Введите корректный способ ввода";
- }
- } while (method != 2 && method != 1);
- }
- void printWithoutPath(double** matrix) {
- cout << "После «прямого хода»" << endl;
- for (int i = 0; i < _msize(matrix) / sizeof(matrix); i++) {
- for (int j = 0; j < _msize(matrix) / sizeof(matrix); j++)
- cout << matrix[i][j] << " ";
- cout << endl;
- }
- for (int i = 0; i < _msize(matrix) / sizeof(matrix); i++)
- cout << matrix[i][_msize(matrix) / sizeof(matrix)] << endl;
- }
- string userOutputPath() {
- string path;
- cout << "Введите абсолютный путь к файлу для вывода результата" << endl;
- cin >> path;
- cout << "Результат работа помещён в файл";
- return path;
- }
- void printWithPath(double** matrix) {
- string path = userOutputPath();
- ofstream file(path);
- for (int i = 0; i < _msize(matrix) / sizeof(matrix); i++) {
- for (int j = 0; j < _msize(matrix) / sizeof(matrix); j++)
- file << matrix[i][j] << " ";
- file << endl;
- for (int i = 0; i < _msize(matrix) / sizeof(matrix); i++)
- cout << matrix[i][_msize(matrix) / sizeof(matrix)] << endl;
- }
- cout << "Результат работы помещён в файл";
- }
- void outputMethod(double** matrix) {
- int method;
- cout << "Куда хотите вывести результат?" << endl;
- cout << "1 - в консоль" << endl;
- cout << "2 - в файл" << endl;
- do {
- cin >> method;
- switch (method) {
- case 1: { printWithoutPath(matrix); break; }
- case 2: { printWithPath(matrix); break; }
- default: cout << "Введите корректный способ ввода";
- }
- } while (method != 2 && method != 1);
- }
- void printTask() {
- cout << "Данная программа выполняет «прямой ход» в решении системы линейных алгебраических уравнений методом Гаусса" << endl;
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- printTask();
- inputMethod();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement