|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Всегда одинаковые "случайные" фразы
Здравствуйте!
Не могу разобраться с одной странной особенностью: PHP код:
Если перезапустить программу и начать генерацию, все фразы генерируются в том же самом порядке, что и в прошлый запуск программы. И еще - программа иногда генерирует не восьмизначные, как задумано, а и трёх и пятизначные и даже иногда однозначные. От чего всё это зависит? Заранее благодарю! |
#2
|
|||
|
|||
При старте программы вызови Randomize;
|
#3
|
||||
|
||||
Всё решено
Ага, понял. Спасибо!
Проблему генераций решил так: PHP код:
Последний раз редактировалось RoboStudent, 11.08.2010 в 05:15. |
#4
|
||||
|
||||
Код:
procedure TForm1.Button1Click(Sender: TObject); var FBoundary: String; begin Randomize; FBoundary:=''; while Length(FBoundary)<8 do FBoundary:=FBoundary+Chr(Random(26)+97); // Ord('a') = 97 Memo1.Lines.Add(FBoundary); end; |
#5
|
|||
|
|||
Вообще-то, чтобы уменьшить шансы на повтор псевдослучайных последовательностей, лучше Randomize поместить где-то в OnCreate формы.
|
#6
|
||||
|
||||
Цитата:
Код:
procedure Randomize; {$IFDEF LINUX} begin RandSeed := _time(nil); {$ENDIF} {$IFDEF MSWINDOWS} var systemTime : record wYear : Word; wMonth : Word; wDayOfWeek : Word; wDay : Word; wHour : Word; wMinute : Word; wSecond : Word; wMilliSeconds: Word; reserved : array [0..7] of char; end; asm LEA EAX,systemTime PUSH EAX CALL GetSystemTime MOVZX EAX,systemTime.wHour IMUL EAX,60 ADD AX,systemTime.wMinute { sum = hours * 60 + minutes } IMUL EAX,60 XOR EDX,EDX MOV DX,systemTime.wSecond ADD EAX,EDX { sum = sum * 60 + seconds } IMUL EAX,1000 MOV DX,systemTime.wMilliSeconds ADD EAX,EDX { sum = sum * 1000 + milliseconds } MOV RandSeed,EAX {$ENDIF} end; Цитата:
|