Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Генератор случайных чисел. Как сделать свой генератор случайных чис 
:(
    Опции темы
KACATuK
Дата 21.11.2004, 20:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет всем.
Я начал изучать С++, вот, добрался до того момента, когда мне понадобился генератор случайных чисел, но прикол в том, что у меня при каждом новом запуске проги rand() выдаёт одну и ту же последовательность случайных чисел, начинающих с одного и того же числа.

Вопрос, как новичку smile написать свою функцию для генерации случайного числа, что надо и КАК! smile

Заранее спасибо, и звиняйте за наивность, но я просто учусь smile
  Вверх
maxim1000
Дата 21.11.2004, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: нет
Всего: 110



генератор случайных чисел работает следующим образом:
1. в начале работы происходит инициализация генератора
2. при каждом вызове над числом проводится некоторое преобразование
так вот для нормальной работы генератора нужно сначала инициализировать его, например, временем
Добавлено @ 20:33
генератор случайных чисел работает следующим образом:
1. в начале работы происходит инициализация генератора
2. при каждом вызове над числом проводится некоторое преобразование
так вот для нормальной работы генератора нужно сначала инициализировать его, например, временем
пример из MSDN:
Код

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
  int i;

  /* Seed the random-number generator with current time so that
   * the numbers will be different every time we run.
   */
  srand( (unsigned)time( NULL ) );

  /* Display 10 numbers. */
  for( i = 0;   i < 10;i++ )
     printf( "  %6d\n", rand() );
}



--------------------
qqq
PM WWW   Вверх
KACATuK
Дата 21.11.2004, 20:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо. Заработало.
Но, как я понял со своим корявым знанием английского, в stdio.h установлены какие-то пороговые значения для максимального и минимального значения случайного числа, если я не ошибаюсь, как мне их поменять?

  Вверх
JackYF
Дата 22.11.2004, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 4
Всего: 162



Работать со случайными числами надо так, например:

Код

#include <stdlib.h> //Если не ошибаюсь

void main()
{
  randomize;
  int x=random(100); //Выходит число от 0 до 99
}




--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Hroft
Дата 8.12.2004, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 20.10.2003
Где: Москва

Репутация: 1
Всего: 3



Если тебе нужны случайные числа из определенного интервала, то нужно масштабировать.
Например, у тебя есть сл. число из [0; b]. Тогда для получения сл. числа из [0; d] надо первое умножить на d/b.
PM MAIL ICQ   Вверх
Voker57
Дата 8.12.2004, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 18.2.2003
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(JackYF @ 21.11.2004, 17:03)
Работать со случайными числами надо так, например:


Код 

#include <stdlib.h> //Если не ошибаюсь

void main()
{
  randomize;
  int x=random(100); //Выходит число от 0 до 99
}

Не, это уже что то из паскаля smile


--------------------
Но кто из вас не прав, кто виноват во всей создавшейся никчёмной сложности
Судить об этом не имею никакой возможности.
При следующем свидании вы сами выйдете из тупика.
Ну, до свидания, пока. :-)
Д.И. Хармс
Самый радиоактивно загрязненный сайт 2004
PM MAIL WWW ICQ YIM   Вверх
legwar
Дата 4.2.2005, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 24.12.2004
Где: Москва

Репутация: нет
Всего: нет



Код

#include <stlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
   int i;
   randomize();
   for (i=0; i<10;i++)
        printf("%d\n", rand() % 100);
   return 0;
}

PM MAIL ICQ   Вверх
cardinal
Дата 4.2.2005, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



Цитата(Hroft @ 8.12.2004, 12:13)
Если тебе нужны случайные числа из определенного интервала, то нужно масштабировать.

Только аккуратно это делать надо, см.
http://forum.vingrad.ru/index.php?showtopic=40164


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Fixin
Дата 4.2.2005, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: нет
Всего: 18



Можно так:
Код
#include <stdlib.h>
#include <time.h>
inline int random(int __num) { return(int)(((long)rand()*__num)/(RAND_MAX+1)); }
inline void randomize(void) { srand((unsigned)time(NULL)); }

В смысле сделать заголовник такой.

PM MAIL ICQ   Вверх
InfMag
Дата 5.2.2005, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Цитата(Voker57 @ 8.12.2004, 17:29)
Цитата(JackYF @ 21.11.2004, 17:03)
Работать со случайными числами надо так, например:


Код 

#include <stdlib.h> //Если не ошибаюсь

void main()
{
   randomize;
   int x=random(100); //Выходит число от 0 до 99
}

Не, это уже что то из паскаля smile

Работает, но рандомиз как таковой не действует... Сначала выдает 49, потом 4 и т.д. Причем всегда.
PM   Вверх
InfMag
Дата 5.2.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 21.11.2004

Репутация: 1
Всего: 4



Не понял! Куда делась моя мессага?
Вобщем:
Код

randomize();
int x=random(100);
ShowMessage(IntToStr(x));

PM   Вверх
nooob
Дата 30.3.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



хм а если  надо чтобы генератор был для двоичных чисел. ну и скажем 100 комбинаций  различных. чтобы дальше применить например манчестерский  код сделать быстрое преобразование Фурье и рассмотреть спектр получаемый
PM MAIL   Вверх
cardinal
Дата 30.3.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



nooob, а что десятичное число в двоичное преобразовать нельзя?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
JackYF
Дата 30.3.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 4
Всего: 162



некрофилы...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
nooob
Дата 31.3.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



ну вот я парюсь. сказали чтобы выдавал  двоичные. подскажите пожалуйста
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1165 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.