1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
begin randomize; for i:=1to 6do begin loto:=random(49)+1; writeln('Nr.',i:2,loto:6) end end.
В общем эта программа имеет недостаток в том, что не все числа могут выпасть разными. Но не это мне важно! Мне важно узнать о функции "random". Мне не понятно почему "+1"? Для чего "+1"? P.S. Программа из университетского учебника.
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 элементов).