
Добрый денек!!!
Помогите с программкой для нахождения периода псевдослучайной последовательности.
Моя программка вычитывает последовательность чисел из файла, помещает их в Memo, затем должен найти есть ли период и какова его длина. Я начала реализацию вот так:
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | var i,j,k: integer ;
q,t: integer ;
n: integer ;
e: array [ 1..100 ] of integer ;
begin
n:=Memo1 . Lines . Count;
for i:= 1 to n do
begin
e[i]:= StrToInt(Memo1 . Lines . Strings[i- 1 ]);
end ;
begin
k:= 1 ;
for i:= 1 to n do
begin
for j:= 2 to n do
if e[i] = e[j]
then
for q:=i+ 1 to j- 1 do
begin
t:=j+ 1 ;
if (e[q] = e[t]) then
k:=k+ 1 ;
inc(t);
end
else Continue;
end ;
end ;
Memo2 . Lines . Add( 'dlina perioda: ' +IntToStr(k));
Memo2 . Lines . Add( 'period: ' );
for i:= 1 to k do
Memo2 . Lines . Add(IntToStr(e[i]));
end ;
end .
|
Но для последовательности (возмем простую последовательность) 1584015840 он находит правильно длина - 5 а период - 15840. А если перид повторяется >3 раз (напр., 123412341234) то появляются непонятные цифры.

(ответ для этой посл. длина 4, период 1234).