Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Период дроби

Страницы: 1
Период дроби
Всем привет, подскажите как можно определить период дроби? Может быть функция какая есть?
Изменено: Виктор Кузьмин - 07.02.2010 17:59:14
А что такое период дроби? В принципе его, наверное, не сложно вычислить?
Период - это повторяющаяся часть дроби. Например, для дроби 1/7 период будет 142857.
Функции, скорее всего, нет, но можно определить примерно так. Сначала получить остаток от деления, потом записать все цифры в массив типа char и дальше сравнивать первую цифру с оставшимися, если совпадение есть тогда это и будет период, а если нет то сравнивать уже два числа сразу и т.д. пока не будет найдено совпадение.
Алексей прав, только нужно не обработать весь массив, чтобы в случаи если дробь будет вида 0,555545554 результат был 5554, а не 5.
Я тоже когда-то решал эту задачу. Такое решение это не лучший выход, потому что при большом периоде программа его очень долго определяет. Но другого решение мне найти не удалось.
Вот вам исходник из моей программы
Код
{ найти минимальный период дроби n/m }
{ $DEFINE dialog}

const
  MaxPer = 100; { максимальная длина периода }
var
  { массивы остатков от деления и массив цифр периода }
  d,digit:array[1..MaxPer] of Integer;
  n,m,i,start:Integer;
  Found:Boolean;
  f:TEXT;
begin
{$IFDEF dialog}
  Write('Числа n и m:');ReadLn(n,m);
{$ELSE}
  Assign(f,'INPUT.TXT');
  Reset(f);
  ReadLn(f,n,m);
  Close(f);
{$ENDIF}
  i:=1;
  While n>=m do
    m:=m*10; { сдвигаем число m к числу n }
  Found:=FALSE; { флаг того, что остаток повторился }
  While Not Found do
  begin
    d[i]:=n;

     { проверка: повторяется ли остаток n? }
    start:=1;
    while (start<i) AND (not Found) do
    begin
      Found:=d[start]=n;
      Inc(start);
    end;

    digit[i]:=(n * 10) div m; { результат деления - цифра }
    n:=(n * 10) mod m; { остаток от деления }
    Inc(i)
  end;
  for n:=start to i-1 do Write(digit[n]);
  WriteLn;
end.
Спасибо, выручили. Только я не понял, зачем нужен вот этот код и кстати с ним у меня почему то не работает.
Код
Assign(f,'INPUT.TXT');
Reset(f);
ReadLn(f,n,m);
Close(f);
Да, этот код не нужен. Просто это вырезка из большого проекта.
Цитата
Виктор Кузьмин пишет:
Спасибо, выручили. Только я не понял, зачем нужен вот этот код и кстати с ним у меня почему то не работает.
Код
Assign(f,'INPUT.TXT');
Reset(f);
ReadLn(f,n,m);
Close(f);
вообще, это код работы с файлом
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)