Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 20.07.2009, 09:16   #1
Zhamie
Пользователь
 
Регистрация: 20.07.2009
Сообщений: 17
Вопрос Период псевдослучайной последовательности

Доброе время суток!!!
Помогите плззз с программкой для нахождения периода ПСП.
Моя программка вычитывает последовательность чисел из файла, помещает их в Memo, затем должен найти есть период и какова его длина. Примерно кое-что написала:
Код:
for i:=1 to n do
     begin
     for j:=2 to n do
       label1:  if  e[i] = e[j]
             then
               begin
               k:=j-i; //длина периода
               inc(i); inc(j);
               goto label1
               end
               else Continue;
    end;
Помогите исправить ошибку...

Последний раз редактировалось Stilet; 20.07.2009 в 09:36.
Zhamie вне форума
Старый 20.07.2009, 09:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Я бы так попробовал:
Код:
for i:=1 to n do begin
 n:=e[i];
 k:=1;
 while (n<>e[i+k])and((i+k)<=Length(e)) do
   inc(k);
 // теперь в k длина от одного до второго равных значений
end;
I'm learning to live...
Stilet вне форума
Старый 20.07.2009, 09:54   #3
Zhamie
Пользователь
 
Регистрация: 20.07.2009
Сообщений: 17
По умолчанию

Я попробовала написать по вашему, и выдается значение 93. Хотя моя последовательность такая 56745674 и результатом должен стать ответ 4

Сама последовательность очень длинная и для проверки я взала эту...

Последний раз редактировалось Stilet; 20.07.2009 в 10:15.
Zhamie вне форума
Старый 20.07.2009, 10:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если я правильно понимаю то между повторяющимися элементами нет ничего, вот я так проверил:
Код:
var s:string; i,k:integer;n:char;
begin
 s:='5637456374';
 n:=s[1];
 k:=2;
 while (n<>s[k])and(k<=Length(s)) do
   inc(k);
dec(k);
caption:=inttostr(k);
end;
Вот еще для разнообразия такое можно:
Код:
var e,s:string; i,k:integer;n:char;
begin
 s:='5637456374';
 i:=1;
 while copy(s,1,i)<>copy(s,i+1,i) do
  inc(i);
caption:=inttostr(i);
end;
I'm learning to live...
Stilet вне форума
Старый 20.07.2009, 10:38   #5
Zhamie
Пользователь
 
Регистрация: 20.07.2009
Сообщений: 17
По умолчанию

) Спасибо большое!!!
Zhamie вне форума
Старый 20.07.2009, 10:43   #6
Zhamie
Пользователь
 
Регистрация: 20.07.2009
Сообщений: 17
По умолчанию

Извините не заметила, но ведь программа не проверяет действительно ли 56374 является периодом, если заменить последовательнось на 5637456378 то он уже периодом не является и программа должна дальше проверять...
Zhamie вне форума
Старый 20.07.2009, 10:48   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так подойдет?:
Код:
var e,s:string; i,k:integer;n:char;
begin
 s:='5633456374'; s:=s+' ';
 i:=1;
 while pos(copy(s,1,i),copy(s,i,length(s)-i))<>0 do
   inc(i);
 dec(i);
caption:=copy(s,1,i);
end;
I'm learning to live...
Stilet вне форума
Старый 22.07.2009, 08:01   #8
Zhamie
Пользователь
 
Регистрация: 20.07.2009
Сообщений: 17
По умолчанию

но 563 не период... если бы было 563563563563563563563563 допустим, то да он является периодом, а его длина 3. Или хотя бы 56334563745633456374 в этой последовательности 5633456374 и есть период, а его длина = 10.
Zhamie вне форума
Старый 22.07.2009, 08:30   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Zhamie
Я что все за тебя должен делать?
Ану бегом проверяй свое 56334563745633456374 на моем примере!
I'm learning to live...
Stilet вне форума
Старый 22.07.2009, 08:45   #10
Ser@Fim
Пользователь
 
Регистрация: 10.07.2009
Сообщений: 19
По умолчанию

Как я понимаю в примере Stilet'a у последовательности 5633456374 периода нет.
думаю просто добавить проверку
Код:
...
if (s[1] = s[i+1])
 then writeln(copy(s,1,i))
 else writeln('Последовательность не имеет периода');
Ser@Fim вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как устроится на работу прогером в период кризиса Tlegen Свободное общение 1 20.06.2009 17:13
Период дроби! prosport91 Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2009 15:57
Период дроби Магистраль Помощь студентам 7 06.04.2009 09:11
Определить k-ую цифру последовательности Фибоначчи и последовательности натуральных чисел. Med Помощь студентам 1 20.03.2009 11:40
Запрос на подсчет записей за период Luna_13 БД в Delphi 3 13.10.2008 23:58