Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/55: Рейтинг темы: голосов - 55, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 74

Генератор случайных чисел без random

19.01.2015, 06:07. Показов 10275. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, надеюсь на вашу помощь. Нужно сделать ГСЧ в С# но не использовать при этом команду random. Много искал в инете, но ни чего не нашел. Так как я в этом вообще не разбираюсь, большая просьба помочь с этим вопросом(желательно полностью рабочий код, что бы скопипастить)
Цитата Сообщение от insite2012 Посмотреть сообщение
Вот вполне надежный генератор случайных чисел.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
namespace RandomGenerator
{
* * class Program
* * {
* * * * static void Main(string[] args)
* * * * {
* * * * * *byte[] randomByte=new byte[100];
* * * * * * RNGCryptoServiceProvider random=new RNGCryptoServiceProvider();
* * * * * * string input="";
while(input!="Exit")
* * * * * * {
* * * * * * * * random.GetBytes(randomByte);
* * * * * * * * for(int i=0;i<=randomByte.Length-1;i++)
* * * * * * * * {
* * * * * * * * * * Console.WriteLine(randomByte[i].ToString());
* * * * * * * * }
* * * * * * * * Console.WriteLine("Exit для выхода...\n");
* * * * * * * * input=Console.ReadLine();
* * * * * * }
}
* * }
}
является ли это ответом на мой вопрос?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.01.2015, 06:07
Ответы с готовыми решениями:

Random.Next, генератор случайных чисел
using System; class MyClass { static public int lengthPas; // длина пароля static public bool numberPas; // будут ли цифры в...

Генератор случайных чисел - Без повторений
Как можно сгенерировать 10 случайных цифр из 20. Без повторений. и записать их в масив

Генератор случайных чисел
Здравствуйте! У меня большая просьба. Вот инициализация генератора случайных чисел. Прокомментируйте пожалуйста каждую строчку в нем, ну,...

8
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
19.01.2015, 06:22
Цитата Сообщение от Romanenko Посмотреть сообщение
является ли это ответом на мой вопрос?
Это вряд ли, Random тут все-таки использован. Другой вопрос, что тут генератор дает более устойчивую последовательность (менее предсказуемую).
0
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 74
19.01.2015, 06:30  [ТС]
Но все же, это уже не стандартная команда рандом, то есть уже хорошо, а есть ли какие-нибудь предложения-альтернативы?
0
167 / 106 / 30
Регистрация: 19.01.2013
Сообщений: 847
19.01.2015, 13:14
Возможно поможет. Это книга- стандарт по C#. Я там не вдавался в перевод и суть вопроса, но чем смог, как говориться.
Миниатюры
Генератор случайных чисел без random  
Вложения
Тип файла: pdf Ecma-334.pdf (5.60 Мб, 15 просмотров)
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
19.01.2015, 14:38
В механизме Random используется cубтрактивный алгоритм генерации псевдослучайных чисел Кнута.
можно либо самому его реализовать, либо написать простой линейный конгруэнтный генератор псевдослучайных чисел:
Xn = (a*Xn-1 + b) mod m
в которых Xn - это n-ый член последовательности, а Xn-1 - предыдущий член последовательности. Переменные a, b и m - постоянные: a - множитель, b - инкремент, и m - модуль. Ключом служит значение X0.
Для ключа можно использовать системное время, тогда генерация будет более случайной. для рамок числа используется модуль(если он равен 2м, то будет двоичная последовательность)
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.01.2015, 16:13
Вот вам адаптированная для шарпа версия, честно спертая из распотрошенных исходников на F# и Javascript

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
 
namespace RandomTest
{
    internal class Program
    {
        private static void Main()
        {
            var rand = new MTRandom();
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(rand.NextDouble());
            }
        }
    }
 
    public class MTRandom
    {
        private const int M = 397;
        private const int N = 624;
        private const uint LOWER_MASK = 0x7fffffff; /* least significant r bits */
        private const uint UPPER_MASK = 0x80000000; /* most significant w-r bits */
        private const uint MATRIX_A = 0x9908b0df; /* constant vector a */
        private readonly uint[] mt = new uint[N]; /* the array for the state vector */
        private uint mti = N + 1; /* mti==N+1 means mt[N] is not initialized */
 
        public MTRandom() : this((uint) Environment.TickCount) {}
 
        private MTRandom(uint seed)
        {
            uint s = seed;
            unchecked
            {
                mt[0] = s >> 0;
                for (mti = 1; mti < N; mti++)
                {
                    s = mt[mti - 1] ^ (mt[mti - 1] >> 30);
                    mt[mti] = ((((((s & 0xffff0000) >> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253)
                               + mti);
                    /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
                    /* In the previous versions, MSBs of the seed affect */
                    /* only MSBs of the array mt[]. */
                    /* 2002/01/09 modified by Makoto Matsumoto */
                    mt[mti] >>= 0;
                    /* for >32 bit machines */
                }
            }
        }
 
        public uint Next()
        {
            unchecked
            {
                uint y;
                var mag01 = new[] { 0u, MATRIX_A };
 
                /* mag01[x] = x * MATRIX_A for x=0,1 */
 
                if (mti >= N)
                {
                    /* generate N words at one time */
                    uint kk;
 
                    if (mti == N + 1) /* if Init() has not been called, */
                    {
                        uint s = 5489;
                        unchecked
                        {
                            mt[0] = s >> 0;
                            for (mti = 1; mti < N; mti++)
                            {
                                s = mt[mti - 1] ^ (mt[mti - 1] >> 30);
                                mt[mti] = ((((((s & 0xffff0000) >> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253)
                                           + mti);
                                /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
                                /* In the previous versions, MSBs of the seed affect */
                                /* only MSBs of the array mt[]. */
                                /* 2002/01/09 modified by Makoto Matsumoto */
                                mt[mti] >>= 0;
                                /* for >32 bit machines */
                            }
                        }
                    }
 
                    for (kk = 0; kk < N - M; kk++)
                    {
                        y = ((mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK));
                        mt[kk] = mt[kk + M] ^ (y >> 1) ^ mag01[y & 0x1];
                    }
                    for (; kk < N - 1; kk++)
                    {
                        y = ((mt[kk] & UPPER_MASK) | (mt[kk + 1] & LOWER_MASK));
                        mt[kk] = mt[kk + (M - N)] ^ (y >> 1) ^ mag01[y & 0x1];
                    }
                    y = ((mt[N - 1] & UPPER_MASK) | (mt[0] & LOWER_MASK));
                    mt[N - 1] = mt[M - 1] ^ (y >> 1) ^ mag01[y & 0x1];
 
                    mti = 0;
                }
 
                y = mt[mti++];
 
                /* Tempering */
                y ^= (y >> 11);
                y ^= (y << 7) & 0x9d2c5680;
                y ^= (y << 15) & 0xefc60000;
                y ^= (y >> 18);
 
                return y >> 0;
            }
        }
 
        public int NextInt()
        {
            return (int) Next();
        }
 
        public double NextDouble()
        {
            return (double) Next()/uint.MaxValue;
        }
    }
}
0
 Аватар для sysrepos
83 / 77 / 30
Регистрация: 08.08.2013
Сообщений: 461
Записей в блоге: 1
19.01.2015, 17:14
используйте дату, минуты, секунды, доли секунд. (секундомер может быть тоже можно задействовать) -делайте с этими значениями различные действия (деление, умножение и т.п.) -полученный результат можно использовать как рандомная величина.
0
12 / 12 / 11
Регистрация: 25.12.2014
Сообщений: 80
19.01.2015, 22:41
Добрый день Если в задании сказано что нельзя использовать только Random(); То могу предложить свой вариант:
C#
1
using System.Security.Cryptography;
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Program
    {
            public static byte RND ()
    {
            RNGCryptoServiceProvider Rand = new RNGCryptoServiceProvider();
                byte[] randomNumber = new byte[1];
                Rand.GetBytes(randomNumber);
                return (randomNumber[0]);
    }
 
        static void Main(string[] args)
        {
            
            for (int i = 0; i < 100; i++)
            {
                double R = RND();
                Console.Write(R);
                Console.Write(" ");
            }
            Console.ReadLine();
          
        }
    }
Это встроенный криптоустойчивый рандом. Возвращает случайные числа от 0 до 255
1
0 / 0 / 0
Регистрация: 13.09.2010
Сообщений: 74
20.01.2015, 00:00  [ТС]
Ребят, всм спасибо большое, очень помогли что нибудь выберу, надеюсь примут)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.01.2015, 00:00
Помогаю со студенческими работами здесь

Генератор случайных чисел
Написал программу для генерирования случайных чисел через линейный конгруэнтный метод. Как можно сделать тест на однородность и вообще ли...

Генератор случайных чисел
Здравствуйте, помогите пожалуйста переделать код из си в C# ( ((float)rand() / (float)RAND_MAX) - 0.5) Добавлено через 4 минуты ...

Генератор случайных чисел в C#
Как пользоваться генератором случайных чисел? Прочитала вот такое: 1. System.Random Пожалуй, самый простой способ получить “вполне...

Генератор случайных букв и чисел
1 случайное число = x 1 случайная буква = d помогите написать код textBox1.Text = &quot;блабла&quot; + d + x + x + d + x

Генератор случайных чисел в пределах [-1;1]
Здравствуйте. Подскажите плиз как мне загнать в массив случайные значения распределенные на интервале . Вот что я пока сделал: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru