Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Рассчитать значение п на основании бесконечного ря


Автор: Mastodont 19.2.2010, 08:12
У Дейтлов есть задача:
Цитата

Рассчитайте значение п на основании бесконечного ряда
п   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 и т.д.?

Автор: Mastodont 24.2.2010, 10:53
Вот я нашел формулу
1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ... = П/4

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

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

Автор: vivat 25.2.2010, 06:02
Я только что ответил примером на другом форуме

Автор: Mastodont 25.2.2010, 14:48
В задании сказано, что нужно найти количество членов ряда, при которых ПИ будет равно 3.14159.

Я исправил код так:
Код

#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?

Автор: vivat 26.2.2010, 06:31
Код

  double p      = 0.0; //значение Пи
  double delim  = 4.0; //делимое
  int    delit  = 1;   //делитель
  int    chlenR = 0;   //член ряда
  while(AnsiString(p).SubString(1,7) != "3,14159")
  {
    if(chlenR%2) p-=delim/delit;
    else p+=delim/delit;
    ++chlenR; delit+=2;
  }

Автор: Mastodont 18.3.2010, 22:20
vivat,
так, у тебя строки. Тут, по ходу, без них никуда. Почему ж Дейтлы про них еще ни слова не сказали, удивляюсь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)