С++. Двумерные массивы. Как перемешать столбцы.

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Здесь ничего особого нет. В начале функция, которая будет менять местами выбранные колонки двумерного массива. Довольно простая функция, хотя вызывает некоторые затруднения. Работать с колонками массива не так сложно, как может быть выглядит.

Вот сама функция (Проверки на правильность номеров колонок обязательны!!! Добавите их сами. Я показываю только основную часть кода)

Функция перемены мест колонок двумерного массива (на указателях)

На вход подаются сам массив (в моём примере указатель на указатель), размеры массива (количество строк и колонок), номера колонок для перемены своих позиций. Вот и всё. Просто до ужаса.

Использовать так:

  • Будьте внимательны, функцию перемены местами колонок следует обязательно дописать. Нужно проверять, чтобы номер пришедшей колонки не выходил за рамки числа колонок в массиве, я этого не стал писать, чтобы обратить внимание на ту часть, которая может быть трудноватой.

Теперь покажу немногим более сложный пример, где можно применять подобную функцию. Перемешаем колонки двумерного массива в случайном порядке.

Такой вот пример работы с колонками двумерного массива. Очень важно следить за тем, чтобы не убежать за пределы массива. В функции перемешивания всех колонок есть строчка:

Вот этот минус один там не просто так, если его не будет, то buffer[i+1] попадает за пределы массива buffer.

Массив buffer хранит порядковые номера, которые будут использованы для определения номера колонки. Эти порядковые номера перемешиваются и получается набор случайных номеров.
5,4,2,3,0,1 (цифры из головы, какие попало)
Для перемешивания эти номера выбираются и подставляются в вызов функции для смены колонок местами.
1. columns_swap(Arr, N, M, 5, 4) ==> Меняется 5 и 4
2. columns_swap(Arr, N, M, 2, 3) ==> Меняется 2 и 3
3. columns_swap(Arr, N, M, 0, 1) ==> Меняется 0 и 1

Можно i++, вместо i+=2, тогда будет происходит чуть более долгая тасовка массива, потому что придётся выполнять смену местами в два раза большее число перестановок. Так, здесь прошло 3 перестановки, а при i++ произошло бы 6.

///////////////////////////////////////////////////
Дополню эту статью ещё одним примером, где будут перемешиваться и столбцы и строки.

Может возникнуть желание сдвигать элементы, чтобы получать уникализацию строк и колонок, заблуждаться не стоит, рано или поздно элементы пойдут по кругу, если размеры массива могут варьироваться произвольныи образом, см. картинку:
ci-plus-plus-snachala.ru

Но если есть большое желание, то функцию заполнения массива можно изменить так, чтобы массив заполнялся со сдвигом (у меня сдвиг влево для двумерного массива сразу во время его первого заполнения)

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Лучше бы вместо смс ввели

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок