Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Rocbis
1 / 1 / 0
Регистрация: 05.10.2013
Сообщений: 75
#1

Вычислить бесконечное суммирование - C++

30.11.2013, 10:57. Просмотров 448. Ответов 3
Метки нет (Все метки)

Надо вычислить бесконечное суммирование с точностью "e", записать в таблицу полученные результаты.
Название: Безымянный.png
Просмотров: 60

Размер: 25.9 Кб
Ну вроде как я понял надо вводить шаг и точность е. Для меня это задание является не понятным
Прошу помочь кому не сложно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2013, 10:57     Вычислить бесконечное суммирование
Посмотрите здесь:

Бесконечное суммирование - C++
Получил задание по бесконечному суммированию но не как не могу разобраться как же это делается. Вот то что нам дал препод чтобы...

Вычислить сумму бесконечного сходящегося ряда. Суммирование прекратить при появлении в сумме слагаемых, имеющих абсолютную величину, меньшую заданной - C++
Вычислить сумму бесконечного сходящегося ряда. Суммирование прекратить при появлении в сумме слагаемых, имеющих абсолютную величину,...

Бесконечное чтение - C++
Доброго всем времени суток. Я уже давно рыскаю по гуглу, форуму и книгам, но меня все же мучит вопрос: а как вот так взять и прочитать из...

Бесконечное считывание строки - C++
Здравствуйте! Столкнулся со странной проблемой...Есть функция,которая считывает данные из файла, там есть такой кусок кода: ...

Бесконечное количество аргументов - C++
#include<iostream> #include<conio.h> using namespace std; void writeln(int count, ...) { int *p = &count; ...

Игра жизнь (бесконечное пространство) - C++
Надо сделать бесконечное пространство для игры "жизнь", примерно понимаю как это сделать, но что то не получается,надо в подпрограмму rules...

Проверка на бесконечное множество решений - C++
Написана проверка на бесконечность множества решений и решений не имеет для решения СЛАУ методом Гаусса. Проблема состоит в том, что когда...

Бесконечное появление меню в консоли - C++
При попытке добавления записи через меню, меню начинает появляться в бесконечном количестве в консоли. Как исправить? Вроде проблема в...

Бесконечное выполнение одного и того же действия - C++
Аля Ваас! :-) А теперь к делу, есть код: #include <iostream> #include "Windows.h" using namespace std;

Написать цикл (перечисление от 10 до 0 повторялось бесконечное количество раз) - C++
Подскажите, что нужно дописать в программу,чтобы перечисление от 10 до 0 повторялось бесконечное количество раз (после нуля надо, чтобы a...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
30.11.2013, 13:45     Вычислить бесконечное суммирование #2
http://www.cyberforum.ru/attachments/335323d1385803439
Задаёшь цикл и каждый следующий член сравниваешь с e.

Добавлено через 4 минуты
Я так понял под e понимается нечто вроде 0.0001 или 0.00000001.
Под членом пониается выражение, делёное на факториал (то, что между плюсами).
Rocbis
1 / 1 / 0
Регистрация: 05.10.2013
Сообщений: 75
30.11.2013, 14:42  [ТС]     Вычислить бесконечное суммирование #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# include<stdio.h>
# include<conio.h>
# include<math.h>
int main()
{
    int k;
    double h,y,x,e,a,S;
        do{ 
            printf("Vvedite shag i tochnost'\n");
            scanf("%lf%lf",&h,&e);
        } while(h<0&&e<0);
puts("\xC9\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCB\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCB\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBB\n"
"\xBA x \xBA y \xBA \xBA\n"
"\xCC\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCE\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCE\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xB9");
    for (x=1;x<=2;x=x+h){ 
    y=0;
    k=x*x;
    S=x;
    while (fabs(a)>=e){
    y=y+a;
    S=S*x*x;
    a=1+(k/S);}
    printf("\xBA %lf \xBA %lf \xBA \xBA\n",x,y);} 
puts("\xC8\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCA\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCA\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xBC");
    return 0;
}
Вот текст программы, после ввода шага и точности выводит только верх таблицы. Почему так?
katsidelin
60 / 21 / 2
Регистрация: 15.11.2013
Сообщений: 112
Записей в блоге: 3
30.11.2013, 19:26     Вычислить бесконечное суммирование #4
Однако мне показалось, что смысл задачи - возвести число в определённую степень с заданной точностью.
Пока у меня мой код не работает, выкладывать нечего...

Добавлено через 3 часа 19 минут
Нижеприведённый код содержит ошибки вычисления, связанные с тем, что числа в C++ хранятся в двоичном формате,
а не в десятичном и при вычислениях постоянно округляются.
Однако это уже шаг к решению поставленной задачи в том смысле, в котором я её понял.
Т.е. пользователь возводит e в степени с заданной точностью вычисления.
В файл выводятся результаты.
Для более точных результатов, возможно вместо long double использовать строки string (библиотека <string>) или
массивы символов char*. Там надо в начале отсекать всё что до точки, точку, а потом считать число знаков после точки.
Запара!

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// [url]http://www.cyberforum.ru/cpp-beginners/thread1023680.html[/url]
// c++, gcc 4.8.2, linux.
 
#include <iostream> // Стандартный консольный ввод-вывод на(с) экран(а).
#include <cmath> // Математические функции. Можно math.h
#include <fstream> // Файловый ввод-вывод.
#include <stdlib.h> // Для конвертирования.
#include <iomanip> // Округление до заданного значения.
 
using namespace std;
 
int main(int, char**);
long double Y(long double, long double); // e в степени с заданной точностью.
long int Factorial(long int);
 
int main(int argc, char* argv[])
{
    long double z = 1.0;        // Знаяение по умолчанию. Степепь числа.
    long double e = 0.0001;     // Значение по умолчанию. Точность.
    long int ie; // Для рассчёта числа знаков после точки.
    long double Result = 0.0;   // Результат вычисления.
    char szContinue = 'n';      // Желает ли пользователь продолжать.
    long int szN = 0;               // Число повторов ввода чисел.
 
    const char FileName[10] = "file.data"; // Имя файла для выгрузки данных.
 
    cout << "\n\tНаша задача возвести в степень число e с заданной точностью." << endl << endl;
 
    // Открываем файловый поток на вывод данных в файл.
    ofstream szOFS; // Затираем ранее введённые данные.
    szOFS.open(FileName, ios_base::out);
 
    do // Начинаем цикл.
    {
        if ( argc > 2 + 2*szN ) // Если все данные введены в командной строке после имени программы через пробел.
        {
            z = atof(argv[1]);
            e = atof(argv[2]);
        }
        else if ( argc > 1+ 2*szN)
        {
            z = atof(argv[1]);
            cout << "Введите точность, до которой вычислять: ";
            cin >> e;
            // [url]http://www.cyberforum.ru/cpp-beginners/thread692420.html[/url] - Конвертация символов в числа.
        }
        else
        {
            cout << "Введите степерь числа: ";
            cin >> z;
 
            cout << "Введите точность, до которой вычислять: ";
            cin >> e;
        };
        if ( e < 1 )
        {
            ie = log10(e) * (-1);   // Этот метод не точный. Как по другому пока не понял.
            // Проблема в том, что long double - двоичное число, а не десятичное и оно уже изначально округлено.
        }
        else
        {
            ie=0;
        };
//    cout << e << '\t' << ie << endl;
        Result = Y(z, e); // Считаем.
 
        // Выводим на консоль экрана.
        cout
            << "возвели e в степень " << z << ", "
            << "задана точность " << e << ", "
            << setprecision(ie) << Result << endl;
        // Выводим в файл.
        szOFS
             << "возвели e в степень " << z << ", "
             << "задана точность " << e << ", "
             << setprecision(ie) << Result << endl;
 
        cout << "Если хотите продолжить, введите \"y\" или \"Y\" и нажмите \"Enter\": ";
        cin >> szContinue;
        szN++;
    }
    while (szContinue == 'y' || szContinue == 'Y');
 
    // Закрываем файловый поток.
    szOFS.close();
 
    return 0;
}
 
long double Y(long double z, long double e)
{
    long double Result = 1.0;   // Предопределённое значение - Результат.
    long int i = 1.0;               // Счётчик для цикла.
 
    Result = 1.0; // По формуле сначала идёт еденица.
    while ( (pow(z,i)/Factorial(i)) >= e )  // Если условие удовлетворяется,
    {
        Result += pow(z,i)/Factorial(i);  // то добавляем к результату.
        i++;
 
    };
/* // Этот блок только для отладки.
    cout << "возвели e в степень " << z << ", "
         << "задана точность " << e << ", "
         << "знаков после разделителя - " << i-4
         << ", результат = " << setprecision(i-3) << Result << endl << endl; // Почему так, не знаю!
*/
//    cout << '\t' << z << '\t' << e << endl;
 
    return Result;
}
 
long int Factorial(long int x)
{ // [url]http://www.cyberforum.ru/cpp/thread31681.html[/url]
    long double Result = 1.0;   // Предопределённое число. Результат.
 
    if (x == 0 || x == 1)
    {
        Result = 1.0;
    }
    else
    {
        for (long int a = 1; a <= x; a++)
        {
            Result *= a;
        };
    };
 
    return Result;
}
Yandex
Объявления
30.11.2013, 19:26     Вычислить бесконечное суммирование
Ответ Создать тему
Опции темы

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