Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2010, 06:14   #1
byte916
Пользователь
 
Регистрация: 04.03.2008
Сообщений: 75
По умолчанию

Почему, если программа постоянно использует рандомы, то получаются одинаковые значения. Например если в цикле запустить печать рандома в си шарпе, то будем получат например по десять раз одинаковые значения?

Я немного не так написал.
Если написать код так:
Код:
            
            for (int i = 1; i < 50; i++)
            {
                double x;
                Random ran = new Random();
                x = ran.NextDouble();
                Console.WriteLine(x);
            }
            Console.ReadLine();
то в результате будет много одинаковых цифры

Последний раз редактировалось Stilet; 18.01.2010 в 08:11.
byte916 вне форума Ответить с цитированием
Старый 18.01.2010, 06:50   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

перед использованием ГСЧ (генратора случайных чисел) - надо ОБЯЗАТЕЛЬНО иницилизировать генератор.
сейчас нет под рукой MSDN,
вот ответ из поиска:
Цитата:
Чтобы рандомные числа не повторялись можно указывать различные параметры при вызове конструктора Random(),
например, можно попробовать использовать int DateTime.Now.Milliseconds для задания параметра конструктора Random().
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.01.2010, 07:59   #3
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

в делфи есть ф-ия randomize которую надо вставить перед рандом может и в си такое есть
SERG1980 вне форума Ответить с цитированием
Старый 18.01.2010, 09:39   #4
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

#include <ctime>
...
srand(time(NULL));
Namolem вне форума Ответить с цитированием
Старый 18.01.2010, 09:41   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Namolem
Разве в СШарпе такое есть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2010, 11:26   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1-я (и главная!) ошибка - НЕ НАДО СОЗДАВАТЬ ОБЪЕКТ RAN (new Random() ) В ЦИКЛЕ!!!!!
2-я ошибка - при создании Random() надо указывать seed ("затравку" - иницилизация ГСЧ)

вот рабочий код.
Код:
            Random ran = new Random(DateTime.Now.Millisecond);
            double x;
            for (int i = 1; i < 50; i++)
            {
                x = ran.NextDouble();
                Console.WriteLine(x);
            }
            Console.ReadLine();

Последний раз редактировалось Serge_Bliznykov; 18.01.2010 в 11:30.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одинаковые действия на нескольких листах ruavia3 Microsoft Office Excel 6 10.04.2009 14:32
Считать одинаковые значения Волк Microsoft Office Excel 10 26.03.2009 11:18
Расчёты с выделением нескольких цифр из общего значения cand Microsoft Office Excel 4 21.03.2009 09:55
выполнение нескольких действий??? zzzzz HTML и CSS 2 11.12.2008 11:59
Убрать одинаковые значения D-mon БД в Delphi 1 23.08.2007 10:55