Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/68: Рейтинг темы: голосов - 68, средняя оценка - 4.72
1 / 1 / 0
Регистрация: 08.01.2013
Сообщений: 30
1

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

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

Author24 — интернет-сервис помощи студентам
написать программу которая вычисляет число пи с заданной точностью, если известно 1-1/3+1/5-1/7+... при суммировании большого количества членов приближается к ПИ/4.Вывести сумму и количество членов ряда.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.09.2013, 11:46
Ответы с готовыми решениями:

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

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

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

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

24
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
16.09.2013, 12:00 2
Что конкретно у тебя не получается? Где код?
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,505
Записей в блоге: 6
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
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,637
Записей в блоге: 13
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
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,637
Записей в блоге: 13
16.09.2013, 14:21 7
Цитата Сообщение от Ilot Посмотреть сообщение
Главное мой алгоритм проще и наглляднее.
- (без обид) - не сказал бы...

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

Кстати, ТС просил еще напечатать к-во членов ряда.
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,505
Записей в блоге: 6
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
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
16.09.2013, 14:42 9
Цитата Сообщение от Ilot Посмотреть сообщение
А вызов ф-и не требует машинного времени?
еще как требует. к тому же при каждом вызове функции все ее параметры помещаются в стек. а это тоже лишние затраты
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,505
Записей в блоге: 6
16.09.2013, 14:43 10
Цитата Сообщение от _ Посмотреть сообщение
еще как требует. к тому же при каждом вызове функции все ее параметры помещаются в стек. а это тоже лишние затраты
Вот и я о том же.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,637
Записей в блоге: 13
16.09.2013, 14:58 11
Окончательный ответ, какой подход производительнее, может дать только развернутый тест.
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
16.09.2013, 15:14 12
Современные компиляторы умеют производить оптимизацию хвостовой рекурсии. Так что никаких лишних затрат у рекурсивной реализации не будет
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,505
Записей в блоге: 6
16.09.2013, 15:48 13
Ну что начнем бадаться?
Во-первых у вас ряд синтаксических ошибок ну да ладно. Во-вторых, на моем компьютере ваша программа дохнет при точности 10-5, а моя ведет себя адекватно и при 10-30. А все потому, что стек ограничен и не столь лоялен к перерасходу памяти. За сим откланиваюсь или у вас есть еще аргументы?
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
16.09.2013, 16:01 14
Какие тут могут быть аргументы-то? Все и так очевидно, рекурсия более декларативна и при этом так же эффективна как и циклы. Единственный её минус в том, что не все компиляторы поддерживают tail-call оптимизацию
0
Vasya2195
26.05.2014, 10:39 15
А просто на СИ напишите пожалуйста эту программу)
2664 / 2239 / 240
Регистрация: 03.07.2012
Сообщений: 8,141
Записей в блоге: 1
26.05.2014, 12:48 16
Цитата Сообщение от Ilot Посмотреть сообщение
моя ведет себя адекватно и при 10-30
Вести-то может, но точность только 7-8 знаков
По условию не вполне ясно, какая точность может понадобиться. Если, скажем, 100 или 10000 знаков...
Программа Super_PI считает 1млн знаков< 20 сек. Понятно, что там используется другой ряд, но все же...

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

Цитата Сообщение от Vasya2195 Посмотреть сообщение
А просто на СИ напишите пожалуйста эту программу)
1. Зачем
2. На бейсик и сотню других языков не надо?
0
Эксперт по математике/физикеЭксперт С++
2048 / 1366 / 395
Регистрация: 16.05.2013
Сообщений: 3,505
Записей в блоге: 6
29.05.2014, 08:49 17
Цитата Сообщение от zer0mail Посмотреть сообщение
Вести-то может, но точность только 7-8 знаков
Суть не в этом, а в дизайне программы. В случае с рекурсией происходит переполнение стека.
А по вопросу точности это больше к алгоритмам нужно присматриваться. А тут без отличного знания математики никак.
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
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
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
30.05.2014, 09:05 20
Цитата Сообщение от Ilot Посмотреть сообщение
Voivoid, боже как вы меня достали. У меня стоит компилятор GCC 4.9.0. Так, что угамонитесь.
Ну так зачем людей вводить в заблуждение. А то ведь начитаются советов доморощенных экспертов
0
30.05.2014, 09:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2014, 09:05
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru