zadach218.PAS

{* Задача 218 *}

Unit ZADACH218;
Interface
Implementation
Begin
 writeln('Используя вспомогательное нахождения функции sin(x)=x-x**3/3!+x**5/5!-x**7/7!+... процесс суммирования остановить, если очередной член станет меньше 0.001. Вычислить для заданного N значение выражение: 1/sin1+1/(sin1+sin2)+1/(sin1+sin2+sin3)+...');
End.

Program zadach218;

Uses zadach218.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключаем внешние файлы *}
Var {* Объявление переменных *}
  s                 : real;
  z                 : real;
  i                 : longint;
  n                 : longint;
Function sinus( x : real );
Var {* Объявление переменных *}
  ot : real;
  dr : real;
  ch : real;
  zn : longint;
  k  : longint;
Begin
  ot := 0;
  dr := x;
  zn := 1;
  k := 1;
  While abs(dr) > 0.001 Do
  Begin
    ot := ot + dr;
    ch := - dr * x * x;
    zn := zn * (k + 1) * (k + 2);
    k := k + 2;
    dr := ch / zn;
  End;
  sinus := ot;
End;
Begin
  clrscr; {* Очистка экрана *}
  write('n=');
  readln(n);
  s := 0;
  z := 0;
  For i := 1 To n Do {* Увеличиваем i от 1 до n с шагом 1 *}
  Begin
    z := z + sinus(i);
    If z = 0 Then
      halt;
    s := s + 1 / z;
  End;
  writeln('Ответ:', s : 5 : 4);
  readln; {* Приостановка программы. Ожидание Enter *}
End.