Решаем задачи Абрамян на Паскале. Proc 41

Proc41. Описать функцию Sin1(x, $$\epsilon$$) вещественного типа (параметры $$x$$, $$\epsilon$$ — вещественные, $$\epsilon > 0$$), находящую приближенное значение функции sin($$x$$): $$sin(x) = x — x^3/(3!) + x^5/(5!) — … + (-1)^n*x^{2*n+1}/((2*n+1)!) + …$$ . В сумме учитывать все слагаемые, модуль которых больше $$\epsilon$$. С помощью Sin1 найти приближенное значение синуса для данного x при шести данных $$\epsilon$$.

Решение:

Решение olegst1975:

Другие задачи из раздела Proc можно посмотреть здесь.

Комментарии:

Комментарии 8

  • строку 17 необходимо поправить, чтобы работало и для отрицательных X

    [/crayon]

  • пока не объявлял result отдельно

    [/crayon]

  • Решение, схожее с предложенным Олегом, плюс немного дополнительной автоматизации, проверки и наглядности:

    • Да, оформление у вас красивое… но мой мозг не заточен, на столько пробелов между переменной… и её типом в строчке :

      Если их будет 3 таких строчки подряд, то без линейки не обойдёшься. 🙂
      К стати забавно выглядело бы это оформление в питоне, когда переменным a,b,c присваиваются значения 1, 2 и 3 соответственно:
      a,b,c = 1,2,3
      если это отдалить друг от друга, то всё будет плохо…
      Так что я рекомендую не пренебрегать читабельностью ради красоты….

      Ну это так… моё фи… возможно это даже дело привычки.
      Решение да действительно получилось, как у olegst1975.
      Надеюсь ваше решение поможет кому нибудь разобраться в нём.

  • Откуда взялась эта формула sin1_n:=-sin1_n*x*x/((2*i+1)*(2*i));??? Как её выразить?
    var
    sin1_n:real;
    i:integer;
    begin
    sin1_n:=x;
    result:=0;
    i:=0;
    while abs(sin1_n)>e do
    begin
    result:=result+sin1_n;
    inc(i);
    sin1_n:=-sin1_n*x*x/((2*i+1)*(2*i));
    end;
    end;

    var
    i:integer;
    x,e:real;
    begin
    read(x);
    for i:=1 to 6 do
    begin
    read(e);
    write(Sin1(x,e));
    end;
    end.

    • Это рекурсия. Она в самом конце учебника проходиться.
      ну и откуда взялась эта формула :sin1_n:=-sin1_n*x*x/((2*i+1)*(2*i));, Это немного другая запись вот этого: $$(-1)^n*x^{2*n+1}/((2*n+1)!)$$ где sin1_n это предыдущее значение с n-1 типо $$(-1)^(n-1)*x^{2*(n-1)+1}/((2*(n-1)+1)!)$$

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *