Laster_Alex

Z2-NO3

Feb 16th, 2022
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.38 KB | None | 0 0
  1. var iter, max_iter: longint;  // Длина ряда и максимальная длина ряда
  2. var multiplyer, sign, tmp1, tmp2, tmp_iter: longint;
  3. var pi, pi_calc: real;
  4. begin
  5.     pi := 3.1415926535897932;  // Настоящее значение пи для сравнения.
  6.     max_iter := 1;
  7.     while (trunc(pi_calc*10000) <> trunc(pi*10000)) do begin  // Это, опять же, в теории должно сработать, но...
  8.     // У паскаля свои ограничения на Longint + этот метод невероятно неэффективный и медленный.
  9.     // По - моему он даже хуже первого метода (честно, не ожидал этого от такого сложного ряда.
  10.     // Думал он за 9 итераций сделает 4 знака после запятой или что - то в этом роде.)
  11.     // Тестировать можно так же, как и прошлые пункты.
  12.         max_iter := max_iter+1;
  13.         pi_calc := 1;
  14.         multiplyer := 5;  // Начнём со 2 члена для удобства (со 2 члена начинает видеться закономерность),
  15.         // так что от max_iter, для более аккуратного значения, надо отнять 1. Выше я уже добавил к pi_calc первый пропущенный член.
  16.         sign := -1;  // Так как знак там осциллируется, введем для него отдельную переменную.
  17.         for iter:=1 to max_iter-1 do begin
  18.             tmp1 := 1;  // Временные значения для числителя и знаминателя дроби, которая будет возводиться в квадрат.
  19.             tmp2 := 1;
  20.             for tmp_iter := 1 to iter do begin
  21.                 tmp1 := tmp1*(tmp_iter*2-1);  
  22.                 tmp2 := tmp2*(tmp_iter*2);
  23.             end;
  24.             pi_calc := pi_calc + sign*multiplyer*(tmp1/tmp2)*(tmp1/tmp2)*(tmp1/tmp2);
  25.             sign := sign*-1;  // Что бы оно осциллировало
  26.             multiplyer := multiplyer + 4;  // Видно из закономерности.
  27.         end;
  28.         pi_calc := 2/(pi_calc);  // Конечные вычисления.
  29.     end;
  30.     writeln(max_iter);
  31. end.
  32.  
Add Comment
Please, Sign In to add comment