Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

У Дейтлов есть задача:
Рассчитайте значение п на основании бесконечного ряда
п 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2010, 08:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рассчитать значение п на основании бесконечного ряда (C++):

Рассчитать сумму бесконечного ряда - C++
2) Рассчитать сумму бесконечного ряда с точностью до \varepsilon , где x - \frac{x^3}{3!}+\frac{x^5}{5!}- ...\; ,\; x\in \left( -1;\,...

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

Вычислить значение суммы бесконечного ряда с заданной точностью e=10^-5 - C++
Вычислить значение суммы бесконечного ряда с заданной точностью e=10^-5 (представлено ниже в png),и значение функции (для проверки)...

Вычислить с заданной точностью значение функции, представленной в виде суммы бесконечного ряда - C++
Всем привет. Я делаю лабу по программированию,но у меня не выходит,так как я только начинаю знакомиться с языком С++.Помогите...

Сумма бесконечного ряда - C++
Есть формула , которую нужно расчитать:\xi =\frac{Q}{\pi x}M(w) . Тут M(w)=\sum_{n=1}^{\propto }{(-1)}^{n+1}\frac{{w}^{2n-1}}{(4n-3)!!},...

Сумма бесконечного ряда - C++
Задание : Ввести с клавиатуры х и точность вычисления Eps. Вычислить с заданной точностью сумму: S=сумма с к=1 до бесконечности( ...

7
fs444
7 / 11 / 0
Регистрация: 18.08.2009
Сообщений: 485
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
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
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
fs444
7 / 11 / 0
Регистрация: 18.08.2009
Сообщений: 485
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
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)
0
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,но просто интересно почему так
0
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 в действительности соответствует условию.
0
Robtr
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2017, 21:35
Привет! Вот еще темы с ответами:

Сумма бесконечного ряда - C++
Дана такая задача. Найти сумму бесконечного ряда с точностью Е где x принадлежит интервалу (-1;1) а сам ряд я пишу словами :ИКС минус дробь...

Вычисления бесконечного ряда - C++
Вот само задание http://cs310727.vk.me/v310727546/ae4f/W-C2A0gLQls.jpg Извините за ссылку, не понимаю как вставить картинку

Сумма бесконечного ряда - C++
Поступил в этом году в вуз, а там с первых дней программирование на уровне, мне недоступном. Первые пару заданий еще сделал, а тут совсем...

Нахождение бесконечного ряда с точностью - C++
Господа, снова я. Требуется написать программу для вычисления суммы бесконечного ряда с точностью ε=10-3 . Процес суммирования...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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