Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
#1

Рассчитать значение п на основании бесконечного ряда - C++

19.02.2010, 08:12. Просмотров 1469. Ответов 6
Метки нет (Все метки)

У Дейтлов есть задача:
Рассчитайте значение п на основании бесконечного ряда
п 4 4/3 4/5 4/7 4/9 4/11
Напечатайте таблицу, которая покажет, как значение п аппроксимируется одним членом этого ряда, двумя членами, тремя и тд. Сколько членов ряда потребовалось для получения значения 3.14? 3.141? 3.1415? 3.14159?
Это программа должна вывести
п = 4 + 4/3 = 4*(4/3) = 16/3
16/3 * 4/5 = 48/15 и т.д.?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2010, 08:12     Рассчитать значение п на основании бесконечного ряда
Посмотрите здесь:
C++ Рассчитать сумму бесконечного ряда
C++ Рассчитать Пи, как сумму бесконечного ряда
C++ Вычислить значение суммы бесконечного ряда с заданной точностью e=10^-5
Вычислить с заданной точностью значение функции, представленной в виде суммы бесконечного ряда C++
C++ Вычисления бесконечного ряда
Сумма бесконечного ряда C++
C++ Сумма бесконечного ряда
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
25.02.2010, 08:23  [ТС]     Рассчитать значение п на основании бесконечного ряда #2
Вот я нашел формулу
1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ... = П/4

А Дейтлы имеют в виду
4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + ... = П

Я правильно понимаю?

Добавлено через 21 час 29 минут
Написал код
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
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <cmath>
#include<cstring>
#include <iomanip>
using namespace std;
 
int main()
{
   double p = 4;// значение Пи
   int delim = 4;// делимое
   int delit = 3;// делитель
   int chlenR = 1;// член ряда
 
   cout << "PI" << setw(20) << "Chlen" << endl;
   cout << "4" << setw(20) << "4 / 1" << endl;
 
   for (int i = 0; i < 10; i++)
//   while (p != 3.14159)
   {
      if (chlenR % 2 != 0)
      {
         p += delim / delit;
 
         cout << p << setw(20) << delim << " / " << delit << " = " << delim / delit << endl;
 
         delit +=2;
         chlenR++;
      }
      else
      {
         p -= delim / delit;
 
         cout << p << setw(20) << delim << " / " << delit << " = " << delim / delit << endl;
 
         delit +=2;
         chlenR++;
      }
   }
 
   system("pause");
   return 0;
}
Но почему то все члены начиная с 4/5 равны 0. Соответственно, и ПИ не меняется. В чем дело? С типами переменных напутал?
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.02.2010, 13:16     Рассчитать значение п на основании бесконечного ряда #3
Цитата Сообщение от fs444 Посмотреть сообщение
C++
1
p += delim / delit;
C++
1
p += delim / (double)delit;
или
C++
1
p += delim / static_cast<double>(delit);
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
25.02.2010, 14:48  [ТС]     Рассчитать значение п на основании бесконечного ряда #4
Так, деление получилось.

Идем дальше. В задании сказано, что нужно найти количество членов ряда, при которых ПИ будет равно 3.14159.

Я исправил код так:
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
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <cmath>
#include<cstring>
#include <iomanip>
using namespace std;
 
int main()
{
   double p = 0;// значение Пи
   int delim = 4;// делимое
   int delit = 1;// делитель
   int chlenR = 1;// член ряда
 
   cout << "PI" << setw(20) << "Slagaemoe" << endl;
//   cout << "4" << setw(20) << "4 / 1" << endl;
 
//   for (int i = 0; i < 3000; i++)
   while (p != 3.14159)
   {
      if (chlenR % 2 != 0)
      {
         p += delim / (double)delit;
 
         cout << p << setw(20) << delim << " / " << delit << endl;
 
         delit +=2;
         chlenR++;
      }
      else
      {
         p -= delim / (double)delit;
 
         cout << p << setw(20) << delim << " / " << delit << endl;
 
         delit +=2;
         chlenR++;
      }
   }
 
   system("pause");
   return 0;
}
И заметил, что значение ПИ циклично перебирается между несколькими числами, и как оно тогда дойдет до нужной мне 3.14159?
Lolcht0
123 / 121 / 5
Регистрация: 30.03.2009
Сообщений: 766
25.02.2010, 16:17     Рассчитать значение п на основании бесконечного ряда #5
вместо
C++
1
while (p != 3.14159)
C++
1
while (fabs(p - 3.14159)>5e-6)
System16v
3 / 3 / 0
Регистрация: 19.02.2014
Сообщений: 115
16.03.2015, 15:20     Рассчитать значение п на основании бесконечного ряда #6
Так, а может пояснить кто,написал код этой программы,программа считает пи,но цикл не завершается все равно,она продолжает считать дальше.Почему так?
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
33
//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream>
#include <cstdlib>
#include <math>
#include <iomanip>
 
using namespace std;
 
int main()
{
        double pi=0;
        double x=4;
        int a=1,b=1;
        while(pi!=3.14159)
        {
          if(b%2!=0)
           {
           pi+=x/a;
           a+=2;
           b++;
           }
          else
            {
            pi-=x/a;
            a+=2;
            b++;
            }
         cout << setprecision(5) << fixed  << pi << "   -   " << b <<endl;
        }
        system("pause");
        return 0;
}
3.14159 - получается где-то на 130658 итерации,но программа не завершает цикл. Можно конечно в цикле while просто изменить условие на while(b<=130660) и просто увидеть конец где получается 3.14159,но просто интересно почему так
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2016, 17:08     Рассчитать значение п на основании бесконечного ряда
Еще ссылки по теме:
C++ Сумма бесконечного ряда
Найти сумму бесконечного ряда C++
Найти сумму бесконечного ряда C++
C++ Найти сумму бесконечного ряда
Вычисление суммы бесконечного ряда C++

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

Или воспользуйтесь поиском по форуму:
LemonMuffin
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 12
14.12.2016, 17:08     Рассчитать значение п на основании бесконечного ряда #7
Решал эту задачку, решил себя проверить и наткнулся на тему)

Если кому интересное будет
- "3.14159 - получается где-то на 130658 итерации,но программа не завершает цикл. Можно конечно в цикле while просто изменить условие на while(b<=130660) и просто увидеть конец где получается 3.14159,но просто интересно почему так "

То всё просто, 3.14159 подразумевает конечное число, т.е. что у вас будет 3.14159000000000... и т.д.
В действительности же число Пи бесконечное и оно не соответствует какому-то конкретному числу, в связи с чем цикл продолжается и продолжается. Я останавливал программу изменениями в операторе повторения while (p<3.14159 || p>3.14160)

Т.е. пк не отображает дальнейшие знаки и кажется, что это 3.14159 в действительности соответствует условию.
Yandex
Объявления
14.12.2016, 17:08     Рассчитать значение п на основании бесконечного ряда
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru