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

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

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

> random(49) +1, не понятное +1
Студент*21в.
сообщение 9.04.2010 8:44
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Archon
сообщение 12.04.2010 9:54
Сообщение #2


Профи
****

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

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


Цитата(sheka @ 10.04.2010 3:37) *

Для твоего примера это может выглядеть так:


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.


Хотя они тут не очень уж и случайные получились...
Они действительно не очень случайные. За счет того, как ты генерируешь q. На первой итерации, оно не может быть больше 8, например. То есть число до 8 в выборке есть всегда, а это ошибка. Но этот алгоритм из DRKB можно использовать для того, что-бы перемешать числа от 1 до 49 и взять первые 6 =)

Кстати, для перемешивания чисел можно использовать вот такой алгоритм (в нем нет ресурсоемких insert-ов):
procedure Shuffle(var Arr: array of Integer);
var
i, k, Temp: Integer;
begin
for i := High(Arr) downto 0 do begin
k := Random(i + 1);
Temp := Arr[i];
Arr[i] := Arr[k];
Arr[k] := Temp;
end;
end;
Если функцию немного подправить, можно перемешивать только часть массива (например, сделать выборку из 6 элементов).


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 



- Текстовая версия 20.07.2025 10:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"