Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/26: Рейтинг темы: голосов - 26, средняя оценка - 4.92
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
1

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

19.02.2010, 08:12. Показов 5346. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У Дейтлов есть задача:
Рассчитайте значение п на основании бесконечного ряда
п 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 и т.д.?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2010, 08:12
Ответы с готовыми решениями:

Рассчитайте значение п на основании бесконечного ряда
Рассчитайте значение п на основании бесконечного ряда 4/1-4/3+4/5-4/7+4/9-4/11... Напечатайте...

Рассчитать значение Pi на основании бесконечного ряда
Помогите, пожалуйста, в консольном приложении написать.. Задание: Рассчитать значение Pi на...

Рассчитать сумму бесконечного ряда
Доброго времени суток) Возникла такая проблема... Задача такая - нужно рассчитать сумму...

Рассчитать сумму бесконечного ряда
1)Составить схему алгоритма, написать и отладить программу в соответствии с вариантом. Рассчитать...

7
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
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. Соответственно, и ПИ не меняется. В чем дело? С типами переменных напутал?
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,168
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);
0
9 / 13 / 3
Регистрация: 18.08.2009
Сообщений: 487
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?
0
125 / 123 / 0
Регистрация: 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)
0
3 / 3 / 1
Регистрация: 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,но просто интересно почему так
0
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 в действительности соответствует условию.
0
0 / 0 / 0
Регистрация: 11.07.2017
Сообщений: 1
11.07.2017, 21:35 8
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
#include <iostream>
 
using namespace std;
 
int main()
{
    double k,k1,t,a;
    int i;
    t = -1.0;
    a = 1.0;
    k1 = 0;
    for (i = 1; i <= 130658; i++)
    {
    cout << i <<"\t";
    k = t*(-4/a);
    cout << a <<"\t";
    a = a + 2;
    t = t*(-1);
    k1 = k1 + k;
    cout << k1 <<"\n";
 
    }
 //   cout << i-1 <<"\t";
 //   cout << k1 <<"\n";
 
    return 0;
}
0
11.07.2017, 21:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.07.2017, 21:35
Помогаю со студенческими работами здесь

Рассчитать сумму бесконечного ряда
помогите решить и если можно то с объяснением

Рассчитать сумму бесконечного ряда
Здравствуйте! Помогите написать код для VBA по следующему заданию. Прикреплю скрин задания и кода. ...

Рассчитать сумму бесконечного ряда
2) Рассчитать сумму бесконечного ряда с точностью до \varepsilon , где x -...

Рассчитать Пи, как сумму бесконечного ряда
Дана формула: Пи = 4 - 4 / 3 + 4 / 5 - 4 / 7 + 4 / 9 - 4 / 11 ... Правильно ли я понял, что...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru