отнюдь, т.к. требует определенных усилий по контролю за выключением питания. мой метод не зависит ни от чего "внешнего".OKF писал(а):Наиболее просто.
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
отнюдь, т.к. требует определенных усилий по контролю за выключением питания. мой метод не зависит ни от чего "внешнего".OKF писал(а):Наиболее просто.
Код: Выделить всё
do {
update_coordinate(&possible_destination, possible_bearing);
possible_walls = maze[possible_destination.north*maxX + possible_destination.east];
if ((possible_walls & 0x0f) != ((possible_walls & 0xf0)>>4)) return 0; // мы в этой ячейке еще точно не были - надо посетить
if ((possible_walls == 0xaa) || (possible_walls == 0x55)) continue; // если попали в "туннель" повторяем движение.
} while(0);Код: Выделить всё
do {
update_coordinate(&possible_destination, possible_bearing);
possible_walls = maze[possible_destination.north*maxX + possible_destination.east];
} while (!((possible_walls & 0x0f) != ((possible_walls & 0xf0)>>4)));
return 0; если требуется случайное число для "бытовых" целей, то и штатный rand с предустановкой по моему методу вполне приемлем. у вас, очевидно, цели были совсем иные...a5021 писал(а):Вполне годно получалось.
может быть, П - паранойя?a5021 писал(а):К - конспирология
точно, спасибо упустил из видуcase 28: не выполнится никогда. Выражение %28 никогда не даст результат 28.
Код: Выделить всё
#include <stdlib.h>
#define MAX 29
uint8_t arr[MAX] = {1, 2, 3, ... };
/* Arrange the N elements of ARRAY in random order.
Only effective if N is much smaller than RAND_MAX;
if this may not be the case, use a better random
number generator. */
void shuffle(uint8_t *array, size_t n)
{
if (n > 1)
{
size_t i;
for (i = 0; i < n - 1; i++)
{
size_t j = i + rand() / (RAND_MAX / (n - i) + 1);
uint8_t t = array[j];
array[j] = array[i];
array[i] = t;
}
}
}
...
while(1) {
srand(...);
shuffle(&arr, sizeof(arr));
for(uint8_t i = 0, i++, i <= MAX {
effect(arr[i]);
}
}
Код: Выделить всё
uint8_t rnd_arr[29];
for(int i=0; i<29; i++){
rnd_arr[i]=i;
}
for(int i=0; i<100; i++){
uint8_t a = rand()%29;
uint8_t b = rand()%29;
swap(&rnd_arr[a], &rnd_arr[b]);
}