|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.05.2016, 14:41 | #1 |
Регистрация: 12.05.2016
Сообщений: 5
|
Поиск решения упражнения по вычислению значения числа pi с помощью бесконечного ряда из книги Дейтелов "Как программировать на C"
Изучаю C по книге Харви и Пола Дейтелов "Как программировать на C", IDE Code::Blocks, OS Win7x64.
В упражнениях для самоконтроля есть такое задание: Вычислите значение pi с помощью бесконечного ряда pi = 4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + k. Выведите таблицу, которая показывает значение pi, аппроксимированное одним членом этого ряда, двумя членами, тремя членами и т.д. Сколько членов этого ряда нужно использовать, прежде чем вы впервые получите 3.14? 3.141? 3.1415? 3.14159? Написал основу программы: Код:
Конструкция if (dPi == 3.14) ... напрямую не работает, т.к. значение dPi каждый раз в цикле будет отличаться от 3.14 и вряд ли когда совпадёт. Реализация if (fabs(dPi - 3.14) < 0.009999) ... также не даёт желаемого результата, т.к. существует ряд значений dPi, удовлетворяющих условию, но не содержащих в себе 3.14. Прошу подтолкнуть на правильный алгоритм решения этой задачи. В процессе поиска решения возник более общий вопрос: как на C осуществляется сравнение данных вещественного типа, какие для этого существуют механизмы? |
12.05.2016, 14:58 | #2 |
Форумчанин
Регистрация: 14.02.2013
Сообщений: 222
|
А слабо вывести в один столбик номер члена, а во второй значение, и тупо глазками посмотреть... Или задача рассчитать количество членов программно?
Конечно, тебе нужно искать разницу между Pi(k) и Pi(k-1).... Дальше понятно? Последний раз редактировалось Аватар; 12.05.2016 в 15:47. |
12.05.2016, 15:43 | #3 |
Регистрация: 12.05.2016
Сообщений: 5
|
Анализировал вывод так:
... printf("%ld\t%f\t%f\n", liOddNumbers, dPi, fabs(dPi - 3.14)); ... И так: ... printf("%ld\t%e\t%e\n", liOddNumbers, dPi, fabs(dPi - 3.14)); ... Значение в списке присутствует, оно очевидно , но как это всё реализовать программно? По какому критерию выделить из списка именно это значение? Каким образом C-программисты сравнивают две вещественные переменные? |
12.05.2016, 15:48 | #4 |
Регистрация: 12.05.2016
Сообщений: 5
|
... тебе нужно искать разницу между Pi(k) и Pi(k-1) ...
Спасибо, есть пища для размышлений. |
13.05.2016, 04:38 | #5 |
Регистрация: 12.05.2016
Сообщений: 5
|
Ввёл дополнительную переменную для сохранения предыдущего значения ряда, код получился такой:
Код:
... 231 3.132972 0.017316 233 3.150140 0.017167 235 3.133118 0.017021 237 3.149996 0.016878 239 3.133259 0.016736 241 3.149857 0.016598 243 3.133396 0.016461 ... Т.е. , 237 ряд даёт значение dPi = 3.149996, разница с предыдущим значением dPi составляет 0.016878. Какое условие отделит 237 ряд от других значений? |
13.05.2016, 10:40 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
что-то у меня с вами результаты не сходятся.
я набросал такую программку на Паскале: Код:
Код:
а вот для сравнения первые 30 членов ряда: Код:
|
13.05.2016, 11:41 | #7 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
первые знаки =3.14 это попадание в диапазон [3.14; 3.15) 3.14<= p(i) <3.15 =3.14 +0.01
или учесть переменность знакоряда (+/-) (аппроксимация сверху/снизу) i=2k p(i)<3.14 +0.01 i=2k+1 3.14 <=p(i)
программа — запись алгоритма на языке понятном транслятору
|
13.05.2016, 15:02 | #8 |
Цифровой кот
Старожил
Регистрация: 29.08.2014
Сообщений: 7,629
|
Чо-то мне подумалось, что искаться должно как-то так:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
Последний раз редактировалось min@y™; 13.05.2016 в 15:14. |
13.05.2016, 15:10 | #9 |
Регистрация: 12.05.2016
Сообщений: 5
|
Рабочий вариант программы получился таким:
Код:
119 3.149996 1688 3.141000 10794 3.141500 136121 3.141600 Огромная благодарность всем, кто принял живое участие в обсуждении и оказал действенную помощь в решении этого упражнения . |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
"Поиск решения" для больше чем 100 ограничений | Анастасия25 | Microsoft Office Excel | 3 | 01.04.2016 23:11 |
решение задачи методом "поиск решения" в Excel | FullhDi | Microsoft Office Excel | 19 | 03.03.2015 16:20 |
Не компилируется программа из книги Дейтела "Как программировать на с++" | Aaron Cash | Помощь студентам | 0 | 11.10.2011 15:16 |
Решение задачи, используя "Поиск решения" | MilaSlava | Microsoft Office Excel | 4 | 03.04.2011 14:08 |
"Транспортная задача", "Поиск решения" | Perroman | Microsoft Office Excel | 3 | 12.12.2007 17:12 |