IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> random(49) +1, не понятное +1
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Добрый 21 век! smile.gif

program sportlotto;

type num=1..49;
var i:1..6;loto:num;

begin randomize;
for i:=1to 6do
begin
loto:=random(49)+1;
writeln('Nr.',i:2,loto:6)
end
end.

В общем эта программа имеет недостаток в том, что не все числа могут выпасть разными. Но не это мне важно!
Мне важно узнать о функции "random". Мне не понятно почему "+1"? Для чего "+1"?
P.S. Программа из университетского учебника.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


А мне очень нравится пример из DRKB. Правда он здесь уже в моей интерпритации. smile.gif
procedure FillVariation(var variation:string);
var
i: integer;
begin
variation := '';
for i := 1 to 6 do
begin
insert(chr(i), variation, random(i));
end;
end;

В строку Variation записываются различные символы в различные места. А потом для того чтобы получить рандомные неповторяющиеся значения достаточно сделать так: ord(Variation[i]);
Для твоего примера это может выглядеть так:


program sportlotto;

{$APPTYPE CONSOLE}

var i:1..6;q,previous: byte;
variation:string;

begin
randomize;
variation := '';
previous:=0;
for i := 1 to 6 do
begin
if i=6 then
q := previous+random((i-1)*8+9-previous)+1
else q := previous+random(i*8-previous)+1;
previous:=q;
insert(chr(q), variation, random(i));
end;

for i:=1to 6do
writeln('Nr.',i:2,ord(Variation[i]):6);
readln;
end.


Хотя они тут не очень уж и случайные получились...

Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Да, и еще один важный момент (кстати, в тему)).. Вот тут:
Цитата(sheka @ 10.04.2010 1:37) *

пример из DRKB. Правда он здесь уже в моей интерпритации. smile.gif
  ...
insert(chr(i), variation, random(i));

- по идее надо делать так:
      insert(chr(i), variation, random(i)+1);

Эту ошибку легко пропустить, поскольку Insert(c,s,0) дает ровно такой же результат, как и Insert(c,s,1). Sheka, скажи - это ошибка из твоей интерпретации или оригинальная?
С одной стороны, может показаться, что разницы нет - позиции же все равно случайные! Но на самом деле, это компрометирует случайность. Например, последним элементом в строке всегда будет #1 - а это неправильно. В процессах, где случайность является ключевой, это может привести к странным эффектам, и найти их причину будет непросто..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Студент*21в.   random(49) +1   9.04.2010 12:44
TarasBer   Потому что рандом(н) даёт число от 0 до н-1   9.04.2010 13:13
Студент*21в.   Потому что рандом(н) даёт число от 0 до н-1 Спас…   10.04.2010 13:26
sheka   А мне очень нравится пример из DRKB. Правда он зде…   10.04.2010 4:37
Lapp   Да, и еще один важный момент (кстати, в тему)).. …   10.04.2010 14:22
volvo   По мне - так вот это проще будет: var s: set of …   10.04.2010 5:16
Студент*21в.   По мне - так вот это проще будет: [code=pas]var …   10.04.2010 15:38
Lapp   Мне тоже очень нравится пример из DRKB, который Sh…   10.04.2010 11:13
Lapp   на большем диапазоне эффективность второго метода …   10.04.2010 14:49
sheka   Я так тоже делал, пока не нашел Реализацию через …   10.04.2010 15:29
sheka   Ого, как намудрили)   10.04.2010 15:40
TarasBer   Дык это ж потенциально бесконечный алгоритм. Кто…   12.04.2010 13:50
Archon   Для твоего примера это может выглядеть так: [cod…   12.04.2010 13:54
volvo   Не надо вырывать строки из программы. Там было нап…   12.04.2010 17:15
TarasBer   > Где потенциальная бесконечность? Где гаранти…   12.04.2010 17:28
Client   Сори что вмешиваюсь, НО... TarasBer, а что ты не п…   12.04.2010 18:31
TarasBer   > TarasBer, а что ты не привел код, которому до…   12.04.2010 19:01
volvo   Я про компьютерный рандом ничего не знаю и знать н…   12.04.2010 19:15
TarasBer   > Я про компьютерный рандом ничего не знаю и зн…   12.04.2010 19:33


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 10.09.2025 16:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name