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

Вычисление функции разложением в ряд - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Рассчитать стоимость покупки с учетом скидки http://www.cyberforum.ru/cpp-beginners/thread1213164.html
Написать программу вычисления стоимости покупки с учетом скидки. Скидка в 3% предоставляется, если сумма покупки больше 500 руб, в 5% — если сумма больше 1000 руб. Ниже приведен рекомендуемый вид...
C++ Записи. Выяснить в сколько строке символов-разделителей (пробелов, точек, тире, запятых ит.д.) Дана фраза. Выяснить, сколько в ней символов-разделителей (пробелов, точек, тире, запятых ит.д.) http://www.cyberforum.ru/cpp-beginners/thread1213139.html
Найти число отрицательных элементов матрицы и их сумму C++
Найти число отрицательных элементов матрицы и их сумму.
C++ Файловые функции
Ребят объясните,как это вообще сделать? Помогите пожалуйста В магазине составлен список людей, которым выдана карта постоянного покупателя. Каждая запись этого списка содержит номер карточки, ФИО,...
C++ Отсортировать по убыванию положительные элементы массива методом обмена http://www.cyberforum.ru/cpp-beginners/thread1213133.html
Отсортировать по убыванию положительные элементы массива методом обмена
C++ Программный выход из приложения Нужна команда программного выхода и консольного приложения типа как Close(); подробнее

Показать сообщение отдельно
HarleyKing
0 / 0 / 0
Регистрация: 20.06.2014
Сообщений: 2

Вычисление функции разложением в ряд - C++

20.06.2014, 15:33. Просмотров 254. Ответов 0
Метки (Все метки)

Помогите пожалуйста, не могу добиться корректной работы проги.

Задание: Для динамического одномерного массива X из N (0<N≤20) элементов составить алгоритм и программу (консольное приложение на Си) нахождения суммы ряда с заданной точностью E (0<E<0.1) для каждого из элементов X. Использовать рекуррентные соотношения при вычислении очередного члена ряда.
Вычисление суммы Sum(Xi) заканчивается, если модуль очередного слагаемого оказывается меньше заданного значения точности (E), причем для этих рядов (при fabs(x)<1) абсолютная величина суммы всех отброшенных членов ряда при этом оказывается меньше E.
Для оценки правильности результата предусмотреть вычисление по контрольной формуле F(Xi).
Слагаемое следует считать составным (a(b±c)) и выводить рекуррентные соотношения для каждой составляющей отдельно:
ai+1 = ai * Coef1(x); bi+1 = bi * Coef2(x); ci+1 = ci * Coef3(x);
Вычисление функции разложением в ряд
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
//---------------------------------------------------------------------------
#include <stdio.h>  // printf, scanf
#include <conio.h>  // getch
#include <math.h>   // fabs, pow, ceil\floor, log, log10, exp, sqrt
#include <stdlib.h>  // randomize, rand
#include <windows.h> // SetConsoleOutputCP(1251); SetConsoleCP(1251);
 
//---------------------------------------------------------------------------
const double xx[7] = {0.00001, -0.99, -1, -0.1, 0.1, 1, 0.99};
 
#pragma argsused
void main()
{
    int n,i,k,z;
    double e, m,a,b,c,sum,f, *x;
    SetConsoleOutputCP(1251);
    randomize();
 
    printf("Enter e=? "); // приглашение – шрифт Lucida Console нужен
    scanf("%lf", &e);  // ввод десятичного(%d) n
    if (e<1e-13 || e>0.11)
    {
        printf("Invalid e (0..0.1] \nPress any key");
        getch(); // ожидание нажатия клавиши
        return;  // выход из функции main
    }
    fflush(stdin);
 
    printf("Enter n=? "); // приглашение
    scanf("%d", &n);  // ввод десятичного(%d) n
    if (n<1 || n>20) {
        printf("Invalid n [1..20]! \nPress any key");
        getch(); // ожидание нажатия клавиши
        return;  // выход из функции main
    }
    fflush(stdin);
 
    x = new double [n];  // выделяем память для n элементов массива
 
    printf("Enter n=%d value X from (-1,+1):\n", n); // приглашение
    for (i = 0; i < n; i++)
    {     // ввод x[0]...x[n-1]
        scanf("%lf", &x[i]);       // типа long float (%lf)
 
        if (fabs(x[i])>=1)
        {
            x[i]=xx[rand() % 7];
            if (fabs(x[i])==1)
            {
                x[i]=x[i]*(rand()%100) /100;
                if (x[i]==0) x[i]=e; // ддя некоторых вариантов x=/=0
            }
            printf("invaid value transform in %15.10lf\n", x[i]);
        }
    }
 
    z = ceil(fabs(log(e)/log(10)))+1;
 
    printf("e = %*.*lf\n", z+2, z, e); // вывод e:(z+2):z
    printf("N |        X        |      Sum(X)     | K|       F(X)      |  |Sum(X)-F(X)|\n");
    for (i=1; i < 80; i++) printf("="); printf("\n");
    for (i = 0; i < n; i++)
    {
 
    // поиск суммы ряда
        a=pow(x[i],2);
        b=1;
        c=1;
        m=a*(b+c);
        sum =m;
        k=1;
        while ((fabs(m)>=e) && (k!=100))
        {
 
        a*=a*(-pow(x[i],2));
        b*=b*1/(k+1);
        c*=c*1/(2*k*(2*k+1));
        m*=a*(b+c);
            sum+=m;
            k++;
        };
 
        f= x[i]*sin(x[i])-exp(-pow(x[i],2))+1;
 
        printf("%2d|%17.*lf|%17.*lf|%2d|%17.*lf|%17.*lf\n",
            i+1, z, x[i],  z, sum,  k,    z, f,   z+2, fabs(sum-f));
    }
 
    delete [] x;
 
    printf("Press any key");
    getch();
    return;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru