Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2010, 10:56   #1
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию Рассчитать значение п на основании бесконечного ряда

У Дейтлов есть задача:
Цитата:
Рассчитайте значение п на основании бесконечного ряда
п 4 4/3 4/5 4/7 4/9 4/11
Напечатайте таблицу, которая покажет, как значение п аппроксимируется одним членом этого ряда, двумя членами, тремя и тд. Сколько членов ряда потребовалось для получения значения 3.14? 3.141? 3.1415? 3.14159?
Вот я нашел формулу
1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ... = П/4 (ряд Лейбница)

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

Я правильно понимаю?
fs444 вне форума Ответить с цитированием
Старый 24.02.2010, 14:21   #2
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Очевидно, да. Книга в электронном варианте? Может, скан некачественный, или ещё что-нибудь?

Последний раз редактировалось ds.Dante; 24.02.2010 в 14:23.
ds.Dante вне форума Ответить с цитированием
Старый 24.02.2010, 14:55   #3
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Да, книга в электронном варианте.

Цитата:
Может, скан некачественный, или ещё что-нибудь?
Привожу скрин скана


Вообще, согласен, качество оставляет желать лучшего в некоторых местах книги.
fs444 вне форума Ответить с цитированием
Старый 24.02.2010, 15:39   #4
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

А ещё там "Л" вместо Пи и пропущен знак равенства. В наши дни умение разобрать неразборчивый почерк уже не так важно, как умение разобраться в плохом скане. :)
ds.Dante вне форума Ответить с цитированием
Старый 25.02.2010, 08:26   #5
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

Цитата:
А ещё там "Л" вместо Пи и пропущен знак равенства.
Да, уже разобрался, спасибо

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

Написал код
Код:
#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. Соответственно, и ПИ не меняется. В чем дело? С типами переменных напутал?
fs444 вне форума Ответить с цитированием
Старый 25.02.2010, 08:48   #6
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Результат деления int на int однозначно будет int. Поменяйте их тип на double и все будет в порядке.
Ну и если еще немного подредактировать код:
Код:
#include <iostream>
#include <cmath>
#include<cstring>
#include <iomanip>
using namespace std;

int main()
{
   double p = 0;// çíà÷åíèå Ïè
   double delit = 1;// äåëèòåëü
   int chlenR = 1;// ÷ëåí ðÿäà

   cout << "PI" << setw(20) << "Chlen" << endl;
   cout << "4" << setw(20) << "4 / 1" << endl;

   for (int i = 0; i < 3000; i++)
//   while (p != 3.14159)
   {
      if (chlenR % 2 != 0)
         p += 4 / delit;

      else
         p -= 4 / delit;

      cout << p << setw(20) << 4.0 << " / " << delit << " = " << 4.0 / delit << endl;

      delit +=2;
      chlenR++;
   }

   system("pause");
   return 0;
}
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же

Последний раз редактировалось Гром; 25.02.2010 в 09:00.
Гром вне форума Ответить с цитированием
Старый 25.02.2010, 14:48   #7
fs444
Форумчанин
 
Регистрация: 18.08.2009
Сообщений: 289
По умолчанию

В задании сказано, что нужно найти количество членов ряда, при которых ПИ будет равно 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?
fs444 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление суммы бесконечного ряда sanela Помощь студентам 2 08.12.2009 18:45
Сумма бесконечного ряда random7 Паскаль, Turbo Pascal, PascalABC.NET 3 18.09.2009 20:41
Сумма бесконечного ряда (баг) Anarx Общие вопросы C/C++ 2 23.03.2009 15:29
Delphi. Вычислить сумму бесконечного ряда Alex1991 Помощь студентам 1 23.10.2008 22:39
Паскаль. Сумма бесконечного ряда Tream Помощь студентам 4 13.10.2007 23:42