вот у меня есть структурка, в ней 10 елементов. мне нужно задать этим элементам значения от 1 до 10 в случайном порядке первая моя мысль была построить свич-кейсами полное дерево вторая мысль "х***ясе этож **** в общем много" можете предложить какой-нибудь вариант алгоритма под эту весч (либо словесно, либо на асм, си, делфи можно и на других языках, если в них это не будет делаться одной командой )
Очень тупо, но вроде работает. Код (Text): #include <windows.h> #include <stdio.h> #include <stdlib.h> typedef struct _some_struct { int a[10]; }some_struct; int main(int argc, char* argv[]) { srand(GetTickCount()); DWORD mask=0; int pos; some_struct str; for (int i=0;i<10;++i) { while(1) { pos=rand()%10; if (((1<<pos) & mask)==0) { mask|=1<<pos; break; } } str.a[pos]=i+1; } for (int j=0;j<10;++j) { printf("str.a[%d]=%d\r\n", j, str.a[j]); } return 0; }
someone В Инете много инфы (ищи генераторы псевдослучайных чисел), например: http://www.intuit.ru/department/security/networksec/3/6.html
someone интересно зачем? http://algolist.manual.ru/maths/generator/index.php - тоже неплохой линк. А чем вас не устраивает rand()?
1-е в структуре не массив значений. в ней 10 отдельных элементов. 2-е генератор случайных чисел - это совсем другое (?) имхо 3-е rand меня вполне устраивает, но мне необходимо случайным образом упорядочить числа от 1 до 10 (т.е. присвоить эти числа 10 отдельным переменным в случайном порядке) даже с использованием rand я не знаю как это сделать с массивом я думаю проблем не было бы а так....
а может попытаться представить это в виде массива? буду копать в эту сторону, но вопрос остается актуальным блин осталось 2 дня до сдачи проэкта ):
спасибо за это, если все-таки смогу привести структуру свою к массиву, сделаю, или, как вариант, попробую переделать код. здесь более приемлимой будет структура Код (Text): typedef struct _some_struct0 { int a; }some_struct0; typedef struct _some_struct1 { int a; }some_struct1; typedef struct _some_struct2 { int a; }some_struct2; typedef struct _some_struct3 { int a; }some_struct3; typedef struct _some_struct4 { int a; }some_struct4; typedef struct _some_struct5 { int a; }some_struct5; typedef struct _some_struct6 { int a; }some_struct6; typedef struct _some_struct7 { int a; }some_struct7; typedef struct _some_struct8 { int a; }some_struct8; typedef struct _some_struct9 { int a; }some_struct9; typedef struct _some_struct { some_struct0 a0; some_struct1 a1; some_struct2 a2; some_struct3 a3; some_struct4 a4; some_struct5 a5; some_struct6 a6; some_struct7 a7; some_struct8 a8; some_struct9 a9; }some_struct;
someone Простейший вариант: Код (Text): int main(int argc, char* argv[]) { srand(GetTickCount()); int i,j,m,a[] = {1,2,3,4,5,6,7,8,9,10}; for(i=0;i<9;i++) { m = i + rand()%(10-i); j = a[i]; a[i] = a[m]; a[m] = j; } for (j=0;j<10;++j) { printf("a[%d]=%d\r\n", j, a[j]); } return 0; } на примере массива. Точно так же будет работать и на любой другой упорядоченной структуре - проходишь и меняешь местами элементы на случайно выбранных местах. P.S. Поправил, теперь вроде правильно. Knuth'a уже забывать стал
someone Вопрос поставлен оочень размыто, поэтому никто ничего не понял. Про кучу структур выше - вообще ужос. Зачем это вообще нужно?
о все, мысль пришла как это сделать. всем спаибо отдельный респект для roman_pro где этот код взял? или сам придумал?
Ну дык создать массив на 10 элементов, заполнить его необходимой перестановкой, а затем уже скопировать в структуру.
Все же очень просто. Берешь массив с числами от 1 до 10. n=10 Берешь число i = rand % n Из массива выкидываешь число. (просто сдвигаешь часть массива на 1 позицию) уменьшаем n на 1. И снова получаем случайное число.