![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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;Цитата:
|
|
#7
|
|||
|
|||
|
Понятно.
А Random ? |