Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <string>
- using namespace std;
- void outputTask() {
- cout << "Данная программа сортирует строки матрицы методом простого выбора." << endl;
- }
- void outputMatrix(int** matrix, int size) {
- cout << "Исходная матрица:" << endl;
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < size; j++) {
- cout << matrix[i][j] << " ";
- }
- cout << endl;
- }
- }
- bool chooseInput() {
- bool isNotCorrect;
- int num;
- do {
- isNotCorrect = false;
- cout << "Выберите откуда вводить данные: 0, если из консоли, 1 если из файла:" << endl;
- cin >> num;
- if ((cin.fail()) or ((num != 0) and (num != 1))) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- return (num == 1);
- }
- string choosePath() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь к файлу для ввода информации:" << endl;
- cin >> path;
- ifstream fin(path);
- if ((!fin.is_open()) or (path.length() < 5)) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- else {
- if (path[path.length() - 1] != 't' and path[path.length() - 2] != 'x' and path[path.length() - 3] != 't' and path[path.length() - 4] != '.') {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- }
- fin.close();
- } while (isNotCorrect);
- return path;
- }
- int inputSizeFromConsole() {
- int size;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите размер матрицы (от 2 до 100):" << endl;
- cin >> size;
- if (cin.fail() or (size < 2) or (size > 100)) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- return size;
- }
- int inputSizeFromFile(string path) {
- int size;
- ifstream fin(path);
- cout << "Запись размера..." << endl;
- fin >> size;
- if (fin.fail() or (size < 2) or (size > 100)) {
- cout << "Ошибка ввода! Введите размер с клавиатуры." << endl;
- size = inputSizeFromConsole();
- }
- fin.close();
- return size;
- }
- int exceptionRead(int i, int j) {
- bool isNotCorrect;
- int num;
- do {
- isNotCorrect = false;
- cout << "Введите [" << (i + 1) << " , " << (j + 1) << "] элемент матрицы:" << endl;
- cin >> num;
- if (cin.fail()) {
- cout << "Ошибка ввода! Повторите попытку." << endl;
- isNotCorrect = true;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- return num;
- }
- int** fillMatrixFromFile(string path, int** matrix, int size) {
- string line;
- cout << "Запись матрицы.." << endl;
- ifstream fin(path);
- std::getline(fin, line);
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < size; j++) {
- fin >> matrix[i][j];
- if (fin.fail()) {
- cout << "Ошибка ввода! Введите [" << (i + 1) << " , " << (j + 1) << "] элемент матрицы с клавиатуры. " << endl;
- matrix[i][j] = exceptionRead(i, j);
- fin.clear();
- while (fin.get() != ' ');
- }
- }
- std::getline(fin, line);
- }
- fin.close();
- return matrix;
- }
- int* sortingRow(int* arr, int size) {
- int minIndex;
- int temp;
- for (int i = 0; i < size - 1; i++) {
- minIndex = i;
- for (int j = i + 1; j < size; j++) {
- if (arr[j] < arr[minIndex]) {
- minIndex = j;
- }
- }
- if (minIndex != i) {
- temp = arr[i];
- arr[i] = arr[minIndex];
- arr[minIndex] = temp;
- }
- }
- return arr;
- }
- int** sortingMatrix(int** matrix, int size) {
- int** sortedMatrix;
- int* row;
- sortedMatrix = new int* [size];
- for (int i = 0; i < size; i++) {
- sortedMatrix[i] = new int[size];
- }
- for (int i = 0; i < size; i++) {
- row = sortingRow(matrix[i], size);
- sortedMatrix[i] = row;
- }
- return sortedMatrix;
- }
- int** inputMatrixFromFile(int& size) {
- string path;
- int** matrix;
- int** sortedMatrix;
- int largestNegativeNumber;
- cout << "При записи из файла учтите, что на 1 строке должен быть записан размер матрицы, а далее с новой строки сама матрица(через пробел). Обратите внимание, что в конце каждой строки нужно поставить пробел." << endl;
- path = choosePath();
- size = inputSizeFromFile(path);
- matrix = new int* [size];
- for (int i = 0; i < size; i++) {
- matrix[i] = new int[size];
- }
- matrix = fillMatrixFromFile(path, matrix, size);
- outputMatrix(matrix, size);
- sortedMatrix = sortingMatrix(matrix, size);
- return sortedMatrix;
- }
- int** fillMatrixFromConsole(int** matrix, int size) {
- bool isNotCorrect;
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < size; j++) {
- do {
- isNotCorrect = false;
- cout << "Введите [" << (i + 1) << " , " << (j + 1) << "] элемент матрицы:" << endl;
- cin >> matrix[i][j];
- if (cin.fail()) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- }
- }
- return matrix;
- }
- int** inputMatrixFromConsole(int& size) {
- int** matrix;
- int** sortedMatrix;
- int largestNegativeNumber;
- size = inputSizeFromConsole();
- matrix = new int* [size];
- for (int i = 0; i < size; i++) {
- matrix[i] = new int[size];
- }
- matrix = fillMatrixFromConsole(matrix, size);
- outputMatrix(matrix, size);
- sortedMatrix = sortingMatrix(matrix, size);
- return sortedMatrix;
- }
- int** inputMatrix(bool isFromFile, int& size) {
- int** sortedMatrix;
- if (isFromFile) {
- sortedMatrix = inputMatrixFromFile(size);
- }
- else {
- sortedMatrix = inputMatrixFromConsole(size);
- }
- return sortedMatrix;
- }
- string choosePathForOutput() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь к файлу для вывода информации:" << endl;
- cin >> path;
- ofstream fout(path);
- if ((!fout.is_open()) or (path.length() < 5)) {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- else {
- if (path[path.length() - 1] != 't' and path[path.length() - 2] != 'x' and path[path.length() - 3] != 't' and path[path.length() - 4] != '.') {
- isNotCorrect = true;
- cout << "Ошибка ввода! Повторите попытку." << endl;
- }
- }
- fout.close();
- } while (isNotCorrect);
- return path;
- }
- void outputInFile(int** matrix, int size) {
- string path;
- path = choosePathForOutput();
- ofstream fout(path);
- fout << "\nМатрица, строки которой отсортированы методом простого выбора: " << endl;
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < size; j++) {
- fout << matrix[i][j] << " ";
- }
- fout << endl;
- }
- cout << "Данные успешно записаны в файл!" << endl;
- fout.close();
- }
- void outputAnswer(int** matrix, int size) {
- cout << "Матрица, строки которой отсортированы методом простого выбора: " << endl;
- for (int i = 0; i < size; i++) {
- for (int j = 0; j < size; j++) {
- cout << matrix[i][j] << " ";
- }
- cout << endl;
- }
- outputInFile(matrix, size);
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- bool isFromFile;
- int largestNegativeNumber;
- int** sortedMatrix;
- int size;
- outputTask();
- isFromFile = chooseInput();
- sortedMatrix = inputMatrix(isFromFile, size);
- outputAnswer(sortedMatrix, size);
- for(int i = 0; i < size; i++) {
- delete[] sortedMatrix[i];
- }
- delete[] sortedMatrix;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement