Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 21.12.2017
Сообщений: 51

Вычисление факториала

05.01.2018, 21:06. Показов 2750. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, добрые люди.
Получил задачу изготовить приложение для вычисления суммы ряда.
В условии имеется факториал - k!.
Подскажите, пожалуйста, как его обозначить в программе.

кратко задание:
Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры.
a=0,1
b=1,0
h=0,1
n=30

S(x) = E(k=0,n) cos(kPi/4)*x^k/k!
Y(x) = e^xcosPi/4*(cos(xsinPi/4)

кратко код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void __fastcall TForm1::Button1Click(TObject *Sender)
{
double a,b,x,h,Pi,e,y,s,r;  
int n,k;
Pi=3.14159265359;
e=2,718281828459045;
                a = StrToFloat(Edit1->Text);
        b = StrToFloat(Edit2->Text);
        n = StrToInt(Edit3->Text);
        h = StrToFloat(Edit4->Text);
 
      for (x = a; x<=b; x+=h)
      {
      y=pow(e,cos(Pi/4))*cos(x*(sin(Pi/4)));
      r=fabs(y-s);
                 for(k = 1; k<=n; ++k)
   {
       s+=(cos(k*Pi/4)*pow(x,k))/k ; 
 
                      }
      Memo1->Lines->Add("При x= "+FloatToStrF(x,ffFixed,8,2)
                        +"\t Y(x)= "+FloatToStrF(y,ffFixed,8,5)
                       +"\t S(x)= "+FloatToStrF(s,ffFixed,8,5)
                       +"\t |Y(x)-S(x)|= "+FloatToStrF(r,ffFixed,8,5));
 }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.01.2018, 21:06
Ответы с готовыми решениями:

Вычисление факториала
Вычислить 7! каждым из трёх вариантов цикла(for, while, do …while) помогите пожалуйста...только начали изучать с++ builder

Вычисление факториала в С++ Builder 6
Надо помочь написать часть кода для вычисления факториала.

Вычисление факториала и вычисление степени числа
Нужно проверить правильность сделанной программы если не правильно помогите исправить. Var a,a1,a2,a3,x,c,st,otvet:real; ...

7
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
05.01.2018, 22:28
C++
1
2
3
4
5
6
7
unsigned __int64 fact (unsigned int num)
{
  unsigned __int64 result = 1;
  for (int i = 2; i <= num; i++)
    result *= i;
  return result; 
}
0
0 / 0 / 0
Регистрация: 21.12.2017
Сообщений: 51
05.01.2018, 23:17  [ТС]
gunslinger,
простите, где объявлять сию функцию? в теле buttonClick?
что за переменная num? крайнее число счётчика ряда? в моём случае такое число n=30,
как использовать result в цикле?
0
0 / 0 / 0
Регистрация: 21.12.2017
Сообщений: 51
06.01.2018, 00:56  [ТС]
Вот такой цикл получается. но ответ не сходится.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
double a,b,x,h,Pi,e,y,s,r,f,t,v,m; 
int n,k;
Pi=3.14159265359;
e=2,718281828459045;
t=cos(Pi/4);
v=sin(Pi/4);
 
      for (x = a; x<=b; x+=h)
      {
      y=pow(e,t)*cos(x*v);//y=pow(e,cos(Pi/4))*cos(x*(sin(Pi/4)));
 
                 for(k=1,f=1; k<=n; k++)
   {
              f=f*k;                                   //факториал
             m=(cos(k*Pi/4)*pow(x,k))/f ; //член ряда
             s=s+m;                                //сумма
             r=fabs(y-s);
                      }
https://www.cyberforum.ru/cgi-bin/latex.cgi?S(x) = \sum_{k=0}^{n}cos(k*\pi/4)*{x}^{k} /k!
Миниатюры
Вычисление факториала  
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
06.01.2018, 01:50
Функцию можно объявлять для простоты в любом "свободном" отдельном месте cpp-файла до вызова (использования) самой функции. num - факториал какого числа считается. n у тебя - количество членов ряда (+1). result - значение факториала, используется внутри функции. Прочитай про вызов функции, тебе нужно использовать fact(num), где num - число.
Ошибка в вычислении суммы ряда - значит, где-то подсчет идет неправильно.
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
06.01.2018, 05:26
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
unsigned __int64 fact (unsigned int num)
{
  unsigned __int64 result = 1, i;
  for (i = 2; i <= num; i++)
    result *= i;
  return result;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  double a = 0.1, b = 1.0, h = 0.1, e = exp(1), y, s, r, t = cos(M_PI / 4), v = sin(M_PI / 4), m;
  int k, n = 30;
  for (double x = a; x <= b; x += h)
  {
    y = pow(e, x * t) * cos(x * v);  // ты тут вроде x забыл в pow
    k = 0;
    // первый член ряда m (при k = 0) равен 1, можно сразу присвоить 1 и тогда не нужна функция fact
    m = cos(k * M_PI / 4) * pow(x ,k) / fact(k);
    s = m;  // вначале сумма ряда s равна значению первого члена ряда
    for (k = 1; k <= n; k++)
    {
      // вычисление члена ряда в зависимости от k (математика - наше всё)
      m *= cos(k * M_PI / 4) / cos((k - 1) * M_PI / 4) * x / k;
      s += m;  // суммируем
    }
    r = fabs(y - s);
    Memo1->Lines->Add("При x= "+FloatToStrF(x,ffFixed,8,2)
                      +"\t Y(x)= "+FloatToStrF(y,ffFixed,8,5)
                      +"\t S(x)= "+FloatToStrF(s,ffFixed,8,5)
                      +"\t |Y(x)-S(x)|= "+FloatToStrF(r,ffFixed,8,5));
  }
}
Миниатюры
Вычисление факториала  
1
0 / 0 / 0
Регистрация: 21.12.2017
Сообщений: 51
06.01.2018, 15:40  [ТС]
gunslinger,
класс. работает.
не понял немного почему так m *= cos(k * M_PI / 4) / cos((k - 1) * M_PI / 4) * x / k;
преобразование формулы с учётом свойств факториала?
хорошо, разберусь.спасибо.
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
06.01.2018, 16:09
Чтобы не вычислять каждый раз степень и факториал, нужно понять, как следующий член ряда получается из предыдущего.
Так как k увеличивается на единицу, то нам нужно для получения нового значения умножать на x и делить на k, что формула и демонстрирует. Тут скорее не свойство факториала, а его формула, но суть не меняется. Плюс разница в множителе с косинусом (учитываем изменение k).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.01.2018, 16:09
Помогаю со студенческими работами здесь

Вычисление факториала
Как исправить программу, что б факториал с 9 считал правильно? Фрагмент программы вычисления факториала: mov ax,1 mov cx,N mov...

Вычисление факториала
ребята помогите решить. составьте пожалуйста код!) а) (m+1)!

Вычисление факториала
Помогите разобраться! Нужно посчитать факториал 25, а у меня при вводе 21 вылетает ошибка в чем дело не пойму! program Project1; ...

Вычисление факториала
помогите вычислить фокториал! вот что я придумал, вот только ни как не дам ума факториалу! #include &lt;iostream&gt; #include...

Вычисление факториала
Нужно написать интерфейс для подсчета факториала. Метод для кнопки Button : using System; using System.Collections.Generic; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru