Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <ctime>
- #include <windows.h>
- using namespace std;
- BOOL WINAPI CtrlHandler(DWORD fdwCtrlType)
- {
- switch (fdwCtrlType)
- {
- case CTRL_C_EVENT:
- return TRUE;
- case CTRL_CLOSE_EVENT:
- return TRUE;
- case CTRL_BREAK_EVENT:
- return FALSE;
- case CTRL_LOGOFF_EVENT:
- return FALSE;
- case CTRL_SHUTDOWN_EVENT:
- return FALSE;
- default:
- return FALSE;
- }
- }
- int checktemp(string s)//Перевод string в int
- {
- int temp = 0;
- int discharge = 1;
- for (int i = s.length() - 1; i >= 0; i--)
- {
- if (s[i] < '0' || s[i] > '9')
- return -1;
- else
- temp += (s[i] - '0') * discharge;
- discharge *= 10;
- }
- return temp;
- }
- void print(int** matrix, int m)//Вывод матрицы
- {
- for (int i = 0; i < m; i++)
- {
- for (int j = 0; j < m; j++)
- {
- cout << matrix[i][j] << "\t";
- }
- cout << endl;
- }
- }
- void sort(int** matrix, int m)//Сортировка строк матрицы по убыванию
- {
- int temp;
- for (int i = 0; i < m; i++)
- {
- for (int j = 0; j < m; j++)
- {
- for (int k = j + 1; k < m; k++)
- {
- if (matrix[i][j] > matrix[i][k])
- {
- temp = matrix[i][j];
- matrix[i][j] = matrix[i][k];
- matrix[i][k] = temp;
- }
- }
- }
- }
- }
- /*
- */
- int main()
- {
- setlocale(LC_ALL, "rus");
- srand(time(NULL));
- int m, r, n, s;//m - размер матрицы; r - режим вывода матрицы; n - номер минимума из строчки; s - номер строчки;
- string temp;
- cout << "Задание: " << endl;
- cout << "Создать квадратную матрицу размера MxM, где M является целым числом из диапазона" << endl;
- cout << "[2,5]. Конкретный размер матрицы задается пользователем. Матрица содержит только" << endl;
- cout << "целые числа из диапазона [0, 100], которые могут быть как случайными, так и " << endl;
- cout << "вводиться пользователем. Отсортировать каждую строку матрицы по возрастанию, т.е." << endl;
- cout << "минимальный элемент должен находиться в начале строки, максимальный – в конце. " << endl;
- cout << "После сортировки найти N-ный минимум в заданной строке, где номер строки и N " << endl;
- cout << "задается пользователем. Результаты обработки матрицы вывести на экран." << endl << endl;
- cout << "Введите размер матрицы [2,5]: ";
- SetConsoleCtrlHandler(CtrlHandler, TRUE);
- cin.clear();
- getline(cin, temp);
- m = checktemp(temp);
- while (m < 2 || m > 5)
- {
- cout << "Некорректное значение!\nПовторите ввод: ";
- cin.clear();
- getline(cin, temp);
- m = checktemp(temp);
- }
- cout << "\nВведите режим заполнения\n(1 - рандомные числа, 2 - ввод от руки (числа [0,100])): ";
- cin.clear();
- getline(cin, temp);
- r = checktemp(temp);
- while (r != 1 && r != 2)
- {
- cout << "Некорректное значение!\nПовторите ввод: ";
- cin.clear();
- getline(cin, temp);
- r = checktemp(temp);
- }
- int** matrix = new int* [m];//Выделение памяти под матрицу
- for (int i = 0; i < m; i++)
- matrix[i] = new int[m];
- if (r == 2)
- cout << "Начинайте вводить значения:\n";
- for (int i = 0; i < m; i++)//Заполнение матрицы
- {
- for (int j = 0; j < m; j++)
- {
- if (r == 1)
- matrix[i][j] = rand() % 101;
- else
- {
- cout << "matrix[" << i << "][" << j << "] = ";
- cin.clear();
- getline(cin, temp);
- matrix[i][j] = checktemp(temp);
- while (matrix[i][j] < 0 || matrix[i][j] > 100)
- {
- cout << "Некорректное значение!\n";
- cout << "matrix[" << i << "][" << j << "] = ";
- getline(cin, temp);
- matrix[i][j] = checktemp(temp);
- }
- }
- }
- }
- cout << "\nПолученная матрица:\n";
- print(matrix, m);
- sort(matrix, m);
- cout << "\nОтсортированная матрица:\n";
- print(matrix, m);
- cout << "\nВведите номер строчки[1,m]: ";
- cin.clear();
- getline(cin, temp);
- s = checktemp(temp);
- while (s<1 || s>m)
- {
- cout << "Некорректное значение!\nПовторите ввод: ";
- cin.clear();
- getline(cin, temp);
- s = checktemp(temp);
- }
- cout << "\nВведите номер минимума N[1,m]: ";
- cin.clear();
- getline(cin, temp);
- n = checktemp(temp);
- while (n<1 || n>m)
- {
- cout << "Некорректное значение!\nПовторите ввод: ";
- cin.clear();
- getline(cin, temp);
- n = checktemp(temp);
- }
- s--; n--;
- cout << "\nНайденный минимум: " << matrix[s][n];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement