Advertisement
Laster_Alex

Z2-NO1

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