На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> перемешать буквы в слове , =)
    помогите, что то придумать не могу как сделать, должно быть просто
    к примеру слово: привет
    перемешиваем буквы... и получаем...
    рпиетв или пвеирт
    и т.д., что бы случайно перемешивало )
      Да просто необходимое количество раз выбираешь 2 случайные буквы(random), да и меняешь местами:
      ExpandedWrap disabled
        #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]=с;
      в чём проблемы то?
      Сообщение отредактировано: Sk#rpion -
        Sk#rpion, во-первых твой код не работает, а во-вторых regedit2 же ясно сказал
        Цитата regedit2 @
        что бы случайно перемешивало
          ExpandedWrap disabled
            #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();
            }
            Извините, не проверил код, исправил ошибки:
            ExpandedWrap disabled
              #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;

            Вот щас всё работает
            Сообщение отредактировано: Sk#rpion -
              Цитата Sk#rpion @
              Вот щас всё работает
              , этот способ не генерирует случайную перестановку.
                Цитата albom @
                этот способ не генерирует случайную перестановку

                Почему? Насколько я знаю после randomize() числа генерируемые random(int) случайные, а не заранее известные
                  Они псевдослучайные, но не в этом суть.
                  Дело в том, что обмен двух элементов с разными номерами (произведенный K раз) не приводит к генерации случайной перестановки, например, возможна ситуация когда перестановки разбиватся на непересекающиеся классы так, что в зависимости от K могут встретится перестановки только из одного класса.
                    я тут сам посидел и спомощью random (спасибо, Sk#rpion) сделал такое: (слабонервныйм не смотреть :lol: )

                    ExpandedWrap disabled
                      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;
                       
                      }


                    Добавлено
                    забыл сказать:
                    перемещивает все буквы кроме первой и последней (так надо было)
                      Цитата albom @
                      Они псевдослучайные
                      Вроде псевдослучайные числа- это числа генерируемые программой без использования randomize(), т.к. после каждого запуска программы последовательность генерируемых чисел random-ом одинаковая, а когда в самом начале программы прописывается randomize(), числа генерируемые random-ом действительно случайные. Но возможно я ошибаюсь
                        Действительно случайные числа - это числа, полученные аппаратными генераторами случайных чисел, например, на основе детекторов αβγ-частиц.
                        А вот всякие там функции random() - это как раз генераторы псевдослучайных чисел, в простейшем случае реализующие линейный конгруэнтный метод.
                          albom, в одной книженции был хороший пример насчёт случайных чисело, и кстати там же было доказано что они действительно случайные
                            regedit2, что случайные числа являются случайными я и не спорю :lool:
                            Что псевдослучайные не являются случайными, тоже очевидно.
                            Так что вы хотите сказать?
                              albom, а что есть аппаратные генераторы?
                                Конечно есть.
                                Люди которые серьезно занимаются криптографией или моделированием (военные, например) часто используют именно аппаратные генераторы. Хотя, конечно, и ГПСЧ используются, но устроенны они намного сложнее функции random() и принципы их работы не разглашаются.

                                Но и простой пользователь может приобщится к случайным числам.
                                Например, тут генератор использует атмосферный радиошум.
                                Ну и в магазине можно купить простенький генератор в PCI слот.
                                Хотя, детектор αβγ-частиц безусловно более надежен в этом плане, но это не для всех.
                                  albom, я на счёт книги, там вполне случайные числа и без аппаратных генераторв )
                                    Цитата regedit2 @
                                    albom, я на счёт книги, там вполне случайные числа и без аппаратных генераторв )

                                    Угу, приведенные на последней странице с заголовком что-то вроде "1000 случайных чисел с распределением бла-бла-бла..." :lol:
                                    Тогда уж приводи название книги, конкретную цитату, что-ли... :ph34r:
                                    Возможно вы путайте их с теми числами, что прошли тест на случайность. Но эти тесты работают только в одну сторону, если тест провален, то это не случайные числа, если он пройден, то это ничего не означает.

                                    Еще раз, случайные величины - это мат. абстракция.
                                    Получать их реализацию мы можем используя аппаратные генераторы, которые используют те физические эффекты, про которые мы можем сказать, что они случайные, например, распад частиц.
                                    А ГПСЧ - это всего лишь способ симулировать случайность для неподготовленного наблюдателя, хотя есть и очень хорошие генераторы, которые и подготовленного могут обмануть, но из-за этого они не избавляются от своих недостатков.
                                      albom, Брайан Оверленд "C++ Без страха" стр.119. Пример 4.5 Генератор случайных чисел.
                                      Ну очень хороший пример!
                                        Цитата regedit2 @
                                        Брайан Оверленд "C++ Без страха" стр.119. Пример 4.5 Генератор случайных чисел.
                                        Ну очень хороший пример!
                                        Замечательный пример, который вызывает функцию rand(), которая, в подовляющем большинстве случаев реализуется через пресловутый линейный конгруэнтный метод. :ph34r: О чем, кстати, в книге сказано (не про реализацию, а про то, что последовательность получается самая что ни на есть псевдослучайная).

                                        Вам же посоветую в спорных ситуациях обращатся к первоисточникам, в книгах тоже есть ошибки, даже в том параграфе, на который вы сослались (допущена ошибка в описании возвращаемого значения функции rand()) и некорректности (плохая идея делать выбор на основе младших бит результата rand(), т.е. использовать операцию % ).
                                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                        0 пользователей:


                                        Рейтинг@Mail.ru
                                        [ Script execution time: 0,0391 ]   [ 16 queries used ]   [ Generated: 23.06.25, 09:48 GMT ]