1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
//Visual Studio Смена колонок местами //Visual Studio, Генерация уникальных элементов для каждой строчки и столбца #include <iostream> #include <iomanip> //setw #include <cstdlib> //srand using namespace std; /*ФУНКЦИЯ, ЗАНИМАЮЩАЯСЯ ВЫДЕЛЕНИЕМ ПАМЯТИ*/ void init_array(int** &arr, const int ROW, const int COL) { arr = new int* [ROW]; for (int i = 0; i < ROW; i++) { arr[i] = new int[COL]; } } /*ФУНКЦИЯ, ЗАНИМАЮЩАЯСЯ ОЧИСТКОЙ ПАМЯТИ*/ void delete_array(int** arr, const int ROW) { for (int i = 0; i < ROW; i++) delete[]arr[i]; delete[]arr; } /*ФУНКЦИЯ, ЗАНИМАЮЩАЯСЯ ЗАПОЛНЕНИЕМ МАССИВА*/ void fill_array(int** arr, const int ROW, const int COL) { int count = 1; for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { arr[i][j] = count++; } } } /*ФУНКЦИЯ, ЗАНИМАЮЩАЯСЯ ВЫВОДОМ ЗНАЧЕНИЙ МАССИВА НА ЭКРАН*/ void print_array(int** arr, const int ROW, const int COL) { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { cout << setw(5) << arr[i][j]; } cout << '\n'; } } /*ФУНКЦИЯ ДЛЯ ПЕРЕМЕНЫ МЕСТАМИ ДВУХ УКАЗАННЫХ КОЛОНОК*/ void swap_arrcolls(int** arr, const int ROW, const int COL, const int col1, const int col2) { //БЛОК ПРОВЕРОК if (col1 < 0 || col2 < 0) { cout << "negative cols, nowork\n"; //КОлонка не может быть отрицательной, нет изменений return; } else if (col1 > COL || col2 > COL) { cout << "range error, nowork\n"; //Выход за пределы массива return; } else if (col1 == col2) { cout << "nonsense\n"; //не имеет смысла переставлять колонку саму с собой return; } //Если введённые значения нормальны, то тогда перемешиваем значения cout << "\nswap [" << col1 << "] and [" << col2 << "]" << endl; //инфоблок, для наглядности при выполнении for (int i = 0; i < ROW; i++) { swap(arr[i][col1], arr[i][col2]); //смена мест } } /*ФУНКЦИЯ, ПЕРЕМЕШИВАЮЩАЯ КОЛОНКИ, использует функцию смены колонок местами*/ void shuffle_cols(int** arr, const int ROW, const int COL) { for (int i = 0; i < COL; i += 2) { swap_arrcolls(arr, ROW, COL, rand() % COL, rand() % COL); } } int main() { srand(unsigned(time(0))); //Для разной генерации const int N = 10; const int M = 15; int** arr = 0; init_array(arr, N, M); //Создаём область в памяти fill_array(arr, N, M); //Заполняем массив значениями cout << "original array:\n"; //Выводим оригинальный массив print_array(arr, N, M); swap_arrcolls(arr, N, M, rand() % M, rand() % M); //меням две случайные колонки местами cout << "modernized array:\n"; //Выводим изменённый массив print_array(arr, N, M); //Перемешиваем массив вообще shuffle_cols(arr, N, M); cout << "\n\nshuffle_cols array: \n"; //У массива перемешаны колонки print_array(arr, N, M); delete_array(arr, N); //Чистим память cin.ignore().get(); } |
Добавить комментарий