Форум программистов, компьютерный форум 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++ Файловые функции
Ребят объясните,как это вообще сделать? Помогите пожалуйста В магазине составлен список людей, которым выдана карта постоянного покупателя. Каждая запись этого списка содержит номер карточки, ФИО, предоставленную ему скидку. Вывести информацию о покупателях, имеющих 10%-ную скидку в магазине.
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. Просмотров 229. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru