
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Сообщ.
#1
,
|
|
|
помогите, что то придумать не могу как сделать, должно быть просто
к примеру слово: привет перемешиваем буквы... и получаем... рпиетв или пвеирт и т.д., что бы случайно перемешивало ) |
Сообщ.
#2
,
|
|
|
Да просто необходимое количество раз выбираешь 2 случайные буквы(random), да и меняешь местами:
![]() ![]() #include "stdlib.h" int a,b; AnsiString s; char c; a=random(s.Length()); while(b==a) b=random(s.Length()); c=s[a]; s[a]=s[b]; s[b]=с; |
Сообщ.
#3
,
|
|
|
Sk#rpion, во-первых твой код не работает, а во-вторых regedit2 же ясно сказал
Цитата regedit2 @ что бы случайно перемешивало |
Сообщ.
#4
,
|
|
|
![]() ![]() #include <vector.h> #include <algorithm.h> void __fastcall TForm1::Button1Click(TObject *Sender) { vector<char>vec(Edit1->Text.Length()+1); strcpy(vec.begin(),Edit1->Text.c_str()); random_shuffle(vec.begin(),vec.end()-1); Edit1->Text=vec.begin(); } |
Сообщ.
#5
,
|
|
|
Извините, не проверил код, исправил ошибки:
![]() ![]() #include "stdlib.h" #include "time.h" int a,b; AnsiString s="привет"; char c; randomize(); a=1+random(s.Length()); b=1+random(s.Length()); while(b==a) b=1+random(s.Length()); c=s[a]; s[a]=s[b]; s[b]=c; Вот щас всё работает |
Сообщ.
#6
,
|
|
|
Цитата Sk#rpion @ , этот способ не генерирует случайную перестановку. Вот щас всё работает |
Сообщ.
#7
,
|
|
|
Цитата albom @ этот способ не генерирует случайную перестановку Почему? Насколько я знаю после randomize() числа генерируемые random(int) случайные, а не заранее известные |
Сообщ.
#8
,
|
|
|
Они псевдослучайные, но не в этом суть.
Дело в том, что обмен двух элементов с разными номерами (произведенный K раз) не приводит к генерации случайной перестановки, например, возможна ситуация когда перестановки разбиватся на непересекающиеся классы так, что в зависимости от K могут встретится перестановки только из одного класса. |
Сообщ.
#9
,
|
|
|
я тут сам посидел и спомощью random (спасибо, Sk#rpion) сделал такое: (слабонервныйм не смотреть
![]() ![]() ![]() AnsiString Perevorot(AnsiString IMsg){ AnsiString Text; AnsiString newText; TStringList *List = new TStringList; newText = ""; Text = ""; int i = 1; int z; int u = 1; Text = IMsg; if(Text.Length()>3){ AnsiString b1 = Text.SubString(1,1); AnsiString b2 = Text.SubString(Text.Length(),1); Text = Text.Delete(1,1); Text = Text.Delete(Text.Length(),1); while(i<=Text.Length()){ List->Add(Text[i]); i++; } int g = List->Count; while(u<=g){ z = random(List->Count); newText=newText+List->Strings[z]; List->Delete(z); u++; } newText.Insert(b1,0); newText = newText+b2; } else {newText = Text;} return newText; } Добавлено забыл сказать: перемещивает все буквы кроме первой и последней (так надо было) |
Сообщ.
#10
,
|
|
|
Цитата albom @ Вроде псевдослучайные числа- это числа генерируемые программой без использования randomize(), т.к. после каждого запуска программы последовательность генерируемых чисел random-ом одинаковая, а когда в самом начале программы прописывается randomize(), числа генерируемые random-ом действительно случайные. Но возможно я ошибаюсь Они псевдослучайные |
Сообщ.
#11
,
|
|
|
Действительно случайные числа - это числа, полученные аппаратными генераторами случайных чисел, например, на основе детекторов αβγ-частиц.
А вот всякие там функции random() - это как раз генераторы псевдослучайных чисел, в простейшем случае реализующие линейный конгруэнтный метод. |
Сообщ.
#12
,
|
|
|
albom, в одной книженции был хороший пример насчёт случайных чисело, и кстати там же было доказано что они действительно случайные
|
Сообщ.
#13
,
|
|
|
regedit2, что случайные числа являются случайными я и не спорю
![]() Что псевдослучайные не являются случайными, тоже очевидно. Так что вы хотите сказать? |
Сообщ.
#14
,
|
|
|
albom, а что есть аппаратные генераторы?
|
Сообщ.
#15
,
|
|
|
Конечно есть.
Люди которые серьезно занимаются криптографией или моделированием (военные, например) часто используют именно аппаратные генераторы. Хотя, конечно, и ГПСЧ используются, но устроенны они намного сложнее функции random() и принципы их работы не разглашаются. Но и простой пользователь может приобщится к случайным числам. Например, тут генератор использует атмосферный радиошум. Ну и в магазине можно купить простенький генератор в PCI слот. Хотя, детектор αβγ-частиц безусловно более надежен в этом плане, но это не для всех. |
Сообщ.
#16
,
|
|
|
albom, я на счёт книги, там вполне случайные числа и без аппаратных генераторв )
|
Сообщ.
#17
,
|
|
|
Цитата regedit2 @ albom, я на счёт книги, там вполне случайные числа и без аппаратных генераторв ) Угу, приведенные на последней странице с заголовком что-то вроде "1000 случайных чисел с распределением бла-бла-бла..." ![]() Тогда уж приводи название книги, конкретную цитату, что-ли... ![]() Возможно вы путайте их с теми числами, что прошли тест на случайность. Но эти тесты работают только в одну сторону, если тест провален, то это не случайные числа, если он пройден, то это ничего не означает. Еще раз, случайные величины - это мат. абстракция. Получать их реализацию мы можем используя аппаратные генераторы, которые используют те физические эффекты, про которые мы можем сказать, что они случайные, например, распад частиц. А ГПСЧ - это всего лишь способ симулировать случайность для неподготовленного наблюдателя, хотя есть и очень хорошие генераторы, которые и подготовленного могут обмануть, но из-за этого они не избавляются от своих недостатков. |
Сообщ.
#18
,
|
|
|
albom, Брайан Оверленд "C++ Без страха" стр.119. Пример 4.5 Генератор случайных чисел.
Ну очень хороший пример! |
Сообщ.
#19
,
|
|
|
Цитата regedit2 @ Замечательный пример, который вызывает функцию rand(), которая, в подовляющем большинстве случаев реализуется через пресловутый линейный конгруэнтный метод. Брайан Оверленд "C++ Без страха" стр.119. Пример 4.5 Генератор случайных чисел. Ну очень хороший пример! ![]() Вам же посоветую в спорных ситуациях обращатся к первоисточникам, в книгах тоже есть ошибки, даже в том параграфе, на который вы сослались (допущена ошибка в описании возвращаемого значения функции rand()) и некорректности (плохая идея делать выбор на основе младших бит результата rand(), т.е. использовать операцию % ). |