Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal]Сложение дробей


Автор: MegaFill 14.7.2010, 16:38
Здравствуйте.
Задача звучит так
Цитата

Написать программу вычисления суммы p/q = 1 - 1/2 + 1/3 - ... + ((-1)^(n+1))/n  для заданного числа n. Дробь  p/q  должно быть несократимой (p, q – натуральные).

Я вроде что-то написал, но если n = 5, то дробь получается (в идеале) 95/120, но у меня выдается 94/120 и при 6 получается 444, вместо 450... Дальше не проверял, замучился считать на листочке smile

Вот моя процедурка. N вводим с клавиатуры в другом куске кода, он тут не важен и я его не выкладываю...

Код

 p:=0;
   q:=1;
   for k := 1 to n do begin

      if (k+1) mod 2 = 0 then {Определеям степени и знак числителя}
         pNew := 1
      else
         pNew := -1;

      qNew := k;
      p := p*qNew + pNew*q;
      q := qNew*q;

      for i := 2 to 7 do {Сокращение дроби}
         while ((p mod i) = 0) and ((q mod i) =0) do begin
            p := p div i;
            q := q div i;
         end;
   end


Автор: t_gran 15.7.2010, 09:45
Цитата

... то дробь получается (в идеале) 95/120 ...


1-(1/2)+(1/3)-(1/4)+(1/5) приводим знаменатель, как вы говорите, к 120.

Получаем:
(120/120)-(60/120)+(40/120)-(30/120)+(24/120), так?

В результате, считаем:
120-60+40-30+24=94

Цитата

... при 6 получается 444, вместо 450 ...


Опять не верно.

1-(1/2)+(1/3)-(1/4)+(1/5)-(1/6) машина приведёт знаменатель (без сокращений) к 720.

Получем:
(720/720)-(360/720)+(240/720)-(180/720)+(144/720)-(120/720), так?

В результате, считаем:
720-360+240-180+144-120=144


А теперь поясните, как Вы считали. smile

Автор: MegaFill 15.7.2010, 16:53
Ну что я могу сказать, стыдно...
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)