Помогите решить задачу по информатике, Паскаль 10 класс

0 голосов
35 просмотров

Помогите решить задачу по информатике, Паскаль 10 класс


image

Информатика (15 баллов) | 35 просмотров
Дан 1 ответ
0 голосов
Правильный ответ
\displaystyle \sum_{k=1}^{10}\sum_{n=1}^k \frac{\sin(kn)}{k!}= \sum_{k=1}^{10} \left(\frac{1}{k!} \sum_{n=1}^k \sin(kn)\right)
Внешний цикл образует накопление "внешней" суммы, внутренний - накопление "внутренней", т.е. суммы sin(nx).

// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var s1:=0.0;
  var fact:=1.0;
  for var k:=1 to 10 do begin
    fact:=fact*k;
    var s2:=0.0;
    for var n:=1 to k do s2:=s2+sin(n*k);
    s1:=s1+s2/fact
    end;
  Writeln('S=',s1)
end.

Результат
S=0.932015550043079

Можно еще дать на первый взгляд менее наглядное, но более короткое современное решение в стиле функционального программирования (примерно так пишут на языке Python, но у нас все же Паскаль)

begin
  var fact:integer->real; begin fact:=n->n=1?1.0:n*fact(n-1) end;
  Writeln('S=',Range(1,10).Select(k->Range(1,k).Select(n->sin(n*k))
      .Sum/fact(k)).Sum)
end.
(150k баллов)
0

Огромное спасибо!!!