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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2009, 13:29   #1
Магистраль
 
Регистрация: 27.03.2009
Сообщений: 5
Стрелка Период дроби

Все в принципе банально до безобразия, но у меня хоть убей не получается..

Задачка проста:

Дана дробь вида 1/n где n- всегда простое число. подобная дробь всегда переодическая. так вот нужно не только высчитать и вывести период этой дроби, но так же нужно посчитать сколько цифр в этом периоде.
язык Delphi, модули используемые не важно какие

Например
1/7 = 0,(142857).. итого шесть цифр периода,
1/3=0,(3).. итого одна цифра периода.

Буду рада помощи..

Последний раз редактировалось Магистраль; 27.03.2009 в 13:35.
Магистраль вне форума Ответить с цитированием
Старый 27.03.2009, 15:21   #2
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Код:
Остаток := 1;
Период := '';
repeat
  Остаток := Остаток * 10;
  Период := Период + IntToStr(Остаток div n);
  Остаток := Остаток mod n;
until Остаток = 1;
ЦифрВПериоде := Length(Период);

WriteLn('1/' + IntToStr(n) + '=0,(' + Период + ')... итого ' + ЦифрВПериоде + ' цифр в периоде');
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/

Последний раз редактировалось OCTAGRAM; 27.03.2009 в 15:24.
OCTAGRAM вне форума Ответить с цитированием
Старый 30.03.2009, 07:07   #3
Магистраль
 
Регистрация: 27.03.2009
Сообщений: 5
По умолчанию

Цитата:
Сообщение от OCTAGRAM Посмотреть сообщение
Код:
;
спасибо конечно, но это немного не то..
просто если посчитать то 1/7 = 0,142857142857142857142857.. и так далее и на сколько я поняла твой код выведет что то похожее на это...
Магистраль вне форума Ответить с цитированием
Старый 30.03.2009, 08:16   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Маги, если я правильно тебя понял то тебе нужно вот так:
Код:
var r:Extended; m,k,s:string;e,i:integer;
begin
r:=1/7;
s:=FloatToStr(r);
// Для проверки s:='0,142857142857142857142857';
k:=s;
delete(k,1,2);
i:=1; while (i<=length(k) div 2)and(copy(k,1,i)<>copy(k,1+i,i)) do inc(i);
m:=copy(k,1,i);
e:=0; while pos(m,k)<>0 do begin delete(k,1,length(m)); inc(e); end;
caption:=s+'   -   '+copy(s,1,pos(',',s))+'('+m+') '+'кол-во='+Inttostr(e);;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.03.2009, 10:46   #5
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

длина периода может быть даже например больше 10000!
extended - не пойдет!
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 30.03.2009, 10:49   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
extended - не пойдет!
Не спорю, но тогда длинную арифметику.
Я просто смысловой пример привел.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.03.2009, 11:17   #7
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

если n-простое то дробь почти всегда чисто периодическая (кроме n=2,n=5), предпериод значит вычислять не надо. длина периода равна показателю 10 по модулю знаменателя.

Код:
function p(z:longint):longint;
var x,y,k:longint;
begin
  y:=1;
  k:=0;
  if z<>1 then
  repeat
   x:=10*y mod z;
   k:=k+1;
   y:=x;
  until x=1;
  p:=k;
end;
var n,a,b,i:longint;
begin
  read(n);
  a:=10;
  write('0.(');
  for i:=1 to p(n) do
    begin
      b:=a div n;
      write(b);
      a:=(a-b*n)*10;      
    end;
  write(')');
end.
не работает для чисел деляшихся на 2 и(или) на 5.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана

Последний раз редактировалось Stilet; 30.03.2009 в 11:40.
Plague вне форума Ответить с цитированием
Старый 06.04.2009, 09:11   #8
Магистраль
 
Регистрация: 27.03.2009
Сообщений: 5
По умолчанию

Спасибо огромное))) очень выручили ))
Магистраль вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отображать дроби в стандартном виде RamireZ Общие вопросы Delphi 4 20.10.2008 21:31
Запрос на подсчет записей за период Luna_13 БД в Delphi 3 13.10.2008 23:58
Класс дроби на C# Лубышев Помощь студентам 6 11.10.2008 10:00
Простые дроби 4aineg Паскаль, Turbo Pascal, PascalABC.NET 5 09.12.2006 15:01