Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/23: Рейтинг темы: голосов - 23, средняя оценка - 4.83
venox
1 / 1 / 0
Регистрация: 08.01.2013
Сообщений: 26
#1

Написать программу которая вычисляет число пи с заданной точностью

16.09.2013, 11:46. Просмотров 4136. Ответов 24
Метки нет (Все метки)

написать программу которая вычисляет число пи с заданной точностью, если известно 1-1/3+1/5-1/7+... при суммировании большого количества членов приближается к ПИ/4.Вывести сумму и количество членов ряда.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 11:46
Ответы с готовыми решениями:

Написать программу, которая вычисляет значение e^2 с точностью до 0,001
Помогите решить такое задание: 1. Написать программу, которая вычисляет...

Написать программу, которая вычисляет значение sin(6\o ) з точностью до 0,001
Помогите решить такую задачку: Написать программу, которая вычисляет...

Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика
Здравствуйте! Помогите пожалуйста написать программу на C++ согласно заданию....

Написать программу, которая вычисляет целую степень, в которую необходимо возвести число 2, чтобы получить число, ближайшее меньшее либо равное числу,
Написать программу, которая вычисляет целую степень, в которую необходимо...

Написать программу, которая вычисляет, сколько раз введенное с клавиатуры число встречается в массиве
2.Написать программу, которая вычисляет, сколько раз введенное с клавиатуры...

24
CheshireCat
Эксперт С++
2912 / 1261 / 114
Регистрация: 27.05.2008
Сообщений: 3,464
16.09.2013, 12:00 #2
Что конкретно у тебя не получается? Где код?
0
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
16.09.2013, 12:21 #3
Примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
 
int main()
{
    float presition;
    float sum = 1;
    int k = 1;
    system ("chcp 1251>0");
    std::cout << "Введите требуемую точность: " ; std::cin >> presition;
 
    do
                sum += (1.0 - 2.0 * (k%2)) / (2 * k + 1);
    while (1.0 / (2 * ++k + 1) > presition / 4);
 
    std::cout << 4 * sum << std::endl;
    system("pause");
    return 0;
}
1
Catstail
Модератор
23579 / 11679 / 2044
Регистрация: 12.02.2012
Сообщений: 19,057
16.09.2013, 13:20 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream.h>
 
double Piq(double eps, double s=0, int k=0,int g=1)
{
    double p;
    p=1.0/(2*k+1);
    s+=p*g;
    if (p < eps) 
    {
        cout <<  "Number of elemets = " << k << endl;
        return s;
    }
    return Piq(eps,s,k+1,-g); 
}
 
int main(int argc, char* argv[])
{
    double Pi=4*Piq(0.0001);
    cout << Pi << endl;
    return 0;
}
Добавлено через 58 минут
Цитата Сообщение от Ilot Посмотреть сообщение
presition
- не "presition", а precision
2
Raali
16.09.2013, 13:39
  #5

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
- не "presition", а precision
неточность в слове "точность" :)

1
Ilot
16.09.2013, 14:12
  #6

Не по теме:

поФиг. Главное мой алгоритм проще и наглляднее.

0
Catstail
Модератор
23579 / 11679 / 2044
Регистрация: 12.02.2012
Сообщений: 19,057
16.09.2013, 14:21 #7
Цитата Сообщение от Ilot Посмотреть сообщение
Главное мой алгоритм проще и наглляднее.
- (без обид) - не сказал бы...

У тебя каждый виток цикла выполняет (по сравнению с моим) лишнее умножение с плавающей точкой, лишнее вычитание и лишнее вычисление остатка. Правда, оперативной памяти твой код требует меньше.

Кстати, ТС просил еще напечатать к-во членов ряда.
0
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
16.09.2013, 14:37 #8
Catstail, никто не мешает ввести новую переменную, но замечание верное сам обратил внимание но из-за особенностей данного форума отредактировать пост не мог:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
 
int main()
{
    float presition;
    float sum = 0.0, pred = 1.0;
    int k = 0;
    system ("chcp 1251>0");
    std::cout << "Введите требуемую точность: " ; std::cin >> presition;
 
    do
    {
        sum += (1.0 - 2.0 * (k%2)) * pred;
    }
    while ( (pred = 1.0 / (2 * ++k + 1)) > presition / 4);
 
    std::cout << 4 * sum << std::endl;
    system("pause");
    return 0;
}
А вызов ф-и не требует машинного времени?
Кстати, ТС просил еще напечатать к-во членов ряда.
C++
1
    std::cout << k << std::endl;
1
User409368
191 / 168 / 32
Регистрация: 09.09.2013
Сообщений: 524
16.09.2013, 14:42 #9
Цитата Сообщение от Ilot Посмотреть сообщение
А вызов ф-и не требует машинного времени?
еще как требует. к тому же при каждом вызове функции все ее параметры помещаются в стек. а это тоже лишние затраты
0
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
16.09.2013, 14:43 #10
Цитата Сообщение от _ Посмотреть сообщение
еще как требует. к тому же при каждом вызове функции все ее параметры помещаются в стек. а это тоже лишние затраты
Вот и я о том же.
0
Catstail
Модератор
23579 / 11679 / 2044
Регистрация: 12.02.2012
Сообщений: 19,057
16.09.2013, 14:58 #11
Окончательный ответ, какой подход производительнее, может дать только развернутый тест.
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
16.09.2013, 15:14 #12
Современные компиляторы умеют производить оптимизацию хвостовой рекурсии. Так что никаких лишних затрат у рекурсивной реализации не будет
0
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
16.09.2013, 15:48 #13
Ну что начнем бадаться?
Во-первых у вас ряд синтаксических ошибок ну да ладно. Во-вторых, на моем компьютере ваша программа дохнет при точности 10-5, а моя ведет себя адекватно и при 10-30. А все потому, что стек ограничен и не столь лоялен к перерасходу памяти. За сим откланиваюсь или у вас есть еще аргументы?
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
16.09.2013, 16:01 #14
Какие тут могут быть аргументы-то? Все и так очевидно, рекурсия более декларативна и при этом так же эффективна как и циклы. Единственный её минус в том, что не все компиляторы поддерживают tail-call оптимизацию
0
Vasya2195
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 1
26.05.2014, 10:39 #15
А просто на СИ напишите пожалуйста эту программу)
0
zer0mail
2452 / 2089 / 216
Регистрация: 03.07.2012
Сообщений: 7,569
Записей в блоге: 1
26.05.2014, 12:48 #16
Цитата Сообщение от Ilot Посмотреть сообщение
моя ведет себя адекватно и при 10-30
Вести-то может, но точность только 7-8 знаков
По условию не вполне ясно, какая точность может понадобиться. Если, скажем, 100 или 10000 знаков...
Программа Super_PI считает 1млн знаков< 20 сек. Понятно, что там используется другой ряд, но все же...

Может кто кинуть ссылку на код, дающий 1000+ знаков Пи?

Цитата Сообщение от Vasya2195 Посмотреть сообщение
А просто на СИ напишите пожалуйста эту программу)
1. Зачем
2. На бейсик и сотню других языков не надо?
0
Ilot
Эксперт С++
1831 / 1189 / 342
Регистрация: 16.05.2013
Сообщений: 3,139
Записей в блоге: 5
Завершенные тесты: 1
29.05.2014, 08:49 #17
Цитата Сообщение от zer0mail Посмотреть сообщение
Вести-то может, но точность только 7-8 знаков
Суть не в этом, а в дизайне программы. В случае с рекурсией происходит переполнение стека.
А по вопросу точности это больше к алгоритмам нужно присматриваться. А тут без отличного знания математики никак.
0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
29.05.2014, 20:42 #18
Цитата Сообщение от Ilot Посмотреть сообщение
В случае с рекурсией происходит переполнение стека.
Лол, хватит уже всякое старье типа borland c++ 3.1 юзать. Напоминаю, что 2014 год на дворе, давно уже компиляторы выполняют оптимизацию хвостовой рекурсии
0
Ilot
30.05.2014, 08:18
  #19

Не по теме:

Voivoid, боже как вы меня достали. У меня стоит компилятор GCC 4.9.0. Так, что угамонитесь.

0
Voivoid
708 / 280 / 16
Регистрация: 31.03.2013
Сообщений: 1,339
30.05.2014, 09:05 #20
Цитата Сообщение от Ilot Посмотреть сообщение
Voivoid, боже как вы меня достали. У меня стоит компилятор GCC 4.9.0. Так, что угамонитесь.
Ну так зачем людей вводить в заблуждение. А то ведь начитаются советов доморощенных экспертов
0
30.05.2014, 09:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2014, 09:05

Написать программу, которая предлагает пользователю ввести число, вычисляет его разрядность и сумму всех цифр и выводить результаты в консоль
Help! Написать программу, которая предлагает пользователю ввести число,...

Напишите программу, которая по заданной входной последовательности вычисляет ее медиану
Кароче такое задание: Напишите программу, которая по заданной входной...

Написать программу, которая вычисляет условие
Помогите. Написать программу на С++, которая вычисляет условие.


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

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

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