Есть ответ 👍

Синтезировать кодопреобразователь из 8-4-2-1 в 6-4-2-1​

242
462
Посмотреть ответы 1

Ответы на вопрос:

fgarhadg
4,6(87 оценок)

Объяснение:

Перед непосредственно кодом нужно объяснить немного математики, а конкретно формирование суммы ряда.

Начнём с того, что в самом задании логическая ошибка. n-ый член ряда вычисляется по формуле

p_n=(-1)^n\frac{x^{2n}}{(2n)!}

но в случае, если n=1, должно получится

p_1=(-1)^1\frac{x^{2}}{(2)!}=-\frac{x^{2}}{2!}

В то время как мы видим, что в задании этот член ряда имеет положительный знак. Но мы будем следовать заданию и оставим его положительным, вынеся в отдельное условие.

Далее, каждый раз пересчитывать факториал до n-ного члена нерационально, поэтому нам нужно вывести формулу, которая будет считать следующий член ряда из предыдущего. В нашем случае мы должны будем постоянно домножать предыдущий член на некоторую постоянную функцию. Вот и найдём её. Во-первых, нам нужно обеспечить чередование знака, то есть если наша "константа" будет отрицательной, этого будет достаточно. Во-вторых, числитель дроби каждый раз увеличивается в x² раз, значит на это значение мы и будем домножать. Уже получилось -x². И в-третьих, знаменатель и тут нужно было быть чуть внимательнее, поскольку (2n)! ≠ (2(n-1))! * 2n. Выражение имеет другой вид (2n)! = (2(n-1))!*(2n-1)*2n

Итого имеем формулу n-ного члена в зависимости от n-1

p_n=p_{n-1}(-1)\frac{x^{2}}{2n(2n-1)}

Вот эту формулу мы и будем использовать для нахождения членов последовательности начиная со второго.

Получается вот такой код (см. ниже). А так же скриншот. Обратите внимание на отступы, потому как ваш код в задании, очень плохо читается. Учитесь сразу программировать красиво.

#include <iostream>

#include <iomanip>

#include <math.h>

using namespace std;

int main()

{

double a = 0.1, b=1.0, h=(b-a)/10.0, S,Y,x,p;

int i, n = 80;

x = a;

do

{

 p = 1;

 S = p;

 for (i = 1; i <= n; i++)

 {

  if (i == 1) p *= pow(x, 2.0) / 2;

  else p *= (-1) * pow(x, 2.0) / (2*i*(2*i - 1.0));

  S += p;

 }

 Y = cos(x);

 cout << setw(15) << x << setw(15) << Y << setw(15) << S << endl;

 x += h;

}  

while (x <= b + h / 2.0);

system("pause");

}


Не Сходятся значения Y и S4 вариант

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

    otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.

Подпишись на наш телеграмм канал

GTP TOP NEWS