Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > и опять про случайные числа


Автор: 12usver12 27.3.2007, 21:29
скока было статей про случайные числа но так нигде и не увидел

как выбрать случайное число из диапазона
например от 1000 до 9000

Автор: Данкинг 27.3.2007, 21:39
Код

var r:integer;

begin
randomize;
r:=random (8000)+1000;
end;


Автор: VICTAR 27.3.2007, 21:41
Что-нибудь типа
Код

var a: integer;

randomize;
a:=random(9000)+1;
if a<1000 then a:=a+1000;

Автор: Yanis 27.3.2007, 22:42
Так на всякий случай упомяну:
Цитата
Unit 
Math 

Syntax 
[Delphi] function RandomRange(const AFrom: Integer; const ATo: Integer): Integer;

Автор: 12usver12 27.3.2007, 23:03
пасиба всем !

Автор: Sunvas 28.3.2007, 19:20
Цитата(VICTAR @  27.3.2007,  21:41 Найти цитируемый пост)
a:=random(9000)+1;

Лучше уж 
Код

a:=random(9001);
 smile 

Автор: Snowy 28.3.2007, 19:25
Sunvas, ответ неверный. Садись, два  smile 
Это 2 разных кода и дают разный результат.
А по сабжу - верный код во втором посте.

Автор: Sunvas 28.3.2007, 19:50
Цитата(Snowy @  28.3.2007,  19:25 Найти цитируемый пост)
Sunvas, ответ неверный. Садись, два   

Хм. Эт почему?
Код

{1}a:=random(9000)+1;
{2}a:=random(9001);

При {1} значения а возможны от 1 до 9000, при {2} от 0 до 9000. Действительно разница есть, но смотрим код VICTAR-а дальше:
Код

if a<1000 then a:=a+1000;

в первом случае мы получаем диапазон от 1001 до 9000 т.к. а не может быть 0, а во втором получаем то, что хотел автор от 1000 до 9000.

Или в чем моя ошибка? smile

Добавлено через 9 минут и 57 секунд
Вообще код VICTAR-а имеет недостаток: диапазон от 1000 до 2000 имеет более высокий приоритет нежели остальные - ведь 1100 получается и когда загадывается 100 и когда 1100.
Кода 
Данкинг избавлен от предыдущего недостатка, но r лучше сделать типа word, и random(8000) заменить на random(8001).

Автор: VICTAR 28.3.2007, 21:08
 smile 
Цитата(Sunvas @  28.3.2007,  19:50 Найти цитируемый пост)
Вообще код VICTAR-а имеет недостаток: 

ладно, только ногами не бейте  smile 

У Данкинг, получилось всех лучше, но все же и он не до конца прав: макс значение получается 8999  smile 

Автор: Sunvas 28.3.2007, 21:31
Цитата(VICTAR @  28.3.2007,  21:08 Найти цитируемый пост)
 макс значение получается 8999  

Я уже об этом писал:
Цитата(Sunvas @  28.3.2007,  19:50 Найти цитируемый пост)
random(8000) заменить на random(8001).


Остается только загадкой, почему Snowy, на меня наехал?..

Автор: VICTAR 28.3.2007, 21:38
 smile 
Цитата(Sunvas @  28.3.2007,  21:31 Найти цитируемый пост)
Я уже об этом писал:

да, я проглядел....

Цитата(Sunvas @  28.3.2007,  21:31 Найти цитируемый пост)
Остается только загадкой, почему Snowy, на меня наехал?.. 

все ошибаются, даже гуру  smile 

Автор: Snowy 29.3.2007, 01:33
Наехал, потому что ты приравниваешь разный код, дающий разный результат.
Да и не наезд это был. Замечание высказано в виде шутки smile
Никого не хочу обидеть. Обычное дело. Просто указал на некорректность.
Насчёт ошибаюсь... Не верно.
В условии сказано 
Цитата(12usver12 @  27.3.2007,  21:29 Найти цитируемый пост)
 от 1000 до 9000
Не указано, включая или нет.
Так что верны все значения от 1000 до 9000, включая и не включая границы. Таких 4 варианта. И все правильные smile
Смещать по условию - прямое нарушение распределения. Смещать нужно весь диапазон.
Поэтому правильный вариант номер 2.
И вообще не понятно, почему такой простой вопрос, породил такое количество реплик.
Его решение дано ещё 30 лет назад. Стандарт, можно сказать...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)