Помогите с рандомизацией данных массива

LifelessGrace
Offline
Зарегистрирован: 30.08.2018

Имеется массив,допустим вот такой:
 

byte massiv[][2] = {
  {B11100000, B11110111},
  {B11000000, B11110111},
  {B11111011, B10000001},
  {B11111011, B11010111},
  {B11111111, B11000001},
  {B11011011, B11110111},
  {B10000000, B00000111},
  {B00001111, B11110001},
};

Как можно рандомизировать бинарные значения внутри массива? Я пытался рандомизировать индекс массива,но это не помогло изменить данные внутри массива.

b707
Offline
Зарегистрирован: 26.05.2017

а что вы понимаете под рандомизацией? "Перемешивание" заданных значений, по типу тасования колоды? Или заполнение массива случайными числами?

LifelessGrace
Offline
Зарегистрирован: 30.08.2018

Заполнение массива случайными значениями 0 и 1,максимальное количество чисел-8,но в целом можно и перемешивание значений,если это проще реализовать,главное чтобы каждое новое исполнение  loop'а было значение,отличающееся от предыдущего

b707
Offline
Зарегистрирован: 26.05.2017

LifelessGrace пишет:

Заполнение массива случайными значениями 0 и 1

Случайные значения 0 и 1 - это массив

byte massiv[][2] = {
  {0, 0},
  {0, 1},
  {0, 0},
  {1, 1},
  ....
};

а у вас явно используются числа в диапазоне 0-255

sadman41
Offline
Зарегистрирован: 19.10.2016

Перед вызовом random() измените seed: randomSeed(analogRead(A0)); 

A0 не должен быть подключен ни к чему, т.е. хорошенечко шуметь.

LifelessGrace
Offline
Зарегистрирован: 30.08.2018

Да, в двоичном коде,вот его мне и надо перемешивать или рандомизировать

b707
Offline
Зарегистрирован: 26.05.2017

LifelessGrace пишет:

Да, в двоичном коде,вот его мне и надо перемешивать или рандомизировать

если честно, я так и не понял, что конкретно вам нужно.

 

LifelessGrace
Offline
Зарегистрирован: 30.08.2018

Чтобы значения массива(двоичный код) постоянно менялись,не важно как
Допустим,было  изначально что-то вроде такого:
 

  {B11111111, B11110111},
  {B11000000, B11110111},
  {B11111011, B10000001},
  {B11111011, B11010111},
  {B10000011, B11000001},
  {B11011011, B11110111},
  {B10000000, B00000111},
  {B11111111, B11111111},

 

А после значения изменились,допустим,на такие:
 

  {B00000000, B11110000},
  {B11011010, B11001010},
  {B11111111, B10000001},
  {B11111011, B11010111},
  {B10000011, B00000000},
  {B11001100, B11110111},
  {B10000000, B00000111},
  {B00001111, B11111001},

Извиняюсь за несвязную речь,просто очень устал,очень долго пытался что-то придумать,решил вот спросить у понимающих людей

sadman41
Offline
Зарегистрирован: 19.10.2016

Вам нужны на каждом запуске МК уникальные значения или одни и те же, но перемешанные по-разному?

LifelessGrace
Offline
Зарегистрирован: 30.08.2018

Уникальные

sadman41
Offline
Зарегистрирован: 19.10.2016

Тогда применяйте способ из #4. 

Если этого не делать, генератор ПСЧ будет постоянно выдавать одни и те же значения на каждом запуске.

LifelessGrace
Offline
Зарегистрирован: 30.08.2018

Хорошо,а в массиве значения как указывать?

sadman41
Offline
Зарегистрирован: 19.10.2016

Просто в цикле последовательно перебираете индекс массива и кладете в элемент значение random(min,max)

b707
Offline
Зарегистрирован: 26.05.2017
#define ARRAY_SIZE 8
byte massiv[ARRAY_SIZE][2];

 
void setup(){
  
  randomSeed(analogRead(0));
  for (int i =0;  i< ARRAY_SIZE; i++) {
    massiv[i][0] = random(255);
    massiv[i][1] = random(255);
  }
}
 
void loop(){
  
}

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

LifelessGrace пишет:

главное чтобы каждое новое исполнение  loop'а было значение,отличающееся от предыдущего

Держи, не благодари:

void loop()
{
 static uint32_t val = 0;
 Serial.print("Значение, отличающееся от предыдущего: ");
 Serial.println(++val);
}

 

LifelessGrace
Offline
Зарегистрирован: 30.08.2018

всем спасибо,попробую дальше сам разобраться

lean_74
Offline
Зарегистрирован: 22.12.2015

Когда-то по молодости пробовал проверять, как тусуются карты, функцией "рандомайз", чтобы хорошо перемешалось, нужно было довольно много циклов, чтобы ускорить процесс, применил псевдослучайную смену карт между собой, классно перемешивалось за очень короткое время.) 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

lean_74 пишет:

Когда-то по молодости пробовал проверять, как тусуются карты, функцией "рандомайз", чтобы хорошо перемешалось, нужно было довольно много циклов, чтобы ускорить процесс, применил псевдослучайную смену карт между собой, классно перемешивалось за очень короткое время.) 

Достаточно единственного цикла.

 

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Точно. Вроде обычное народное наблюдение, для того что бы карты в колоде были расположены случайным образом их надо !!!!!!!перетасовать. Но почему-то некоторые для программирования ищут другие чудесные способы.

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Прямо юность вспомнил.

На Фортране писал "Дурака" и тоже изощрялся в создании случайного расклада, пока не додумался перемешать карты :)