Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекуррентное соотношение 
:(
    Опции темы
serega339344
Дата 13.5.2017, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.5.2017

Репутация: нет
Всего: нет



Есть задача:
Для динамического одномерного массива X из N (0<N≤20) элементов
составить алгоритм и программу (консольное приложение на Си)
нахождения суммы ряда с заданной точностью E (0<E<0.1) для
каждого из элементов X. Использовать рекуррентные
соотношения при вычислении очередного члена ряда.

Возникли проблемы при вычислении рекуррентной формулы( конкретно при делении i члена ряда на i-1). Саму программу уже написал. Прощу помощи.

Ряд:
http://www.picshare.ru/view/8084988/
PM MAIL   Вверх
feodorv
Дата 13.5.2017, 03:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Код

double v = x, sum = x;
for( i = 2; i < 50; ++i)
{
  v = v * (- (4 * i - 5) * x / (double) (4 * i)); // рекуррентное соотношение
  sum += v;
}

ЗЫ Мог где-нибудь и ошибиться, не проверял...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
serega339344
Дата 13.5.2017, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.5.2017

Репутация: нет
Всего: нет



Мне бы просто сам вывод рекуррентной формулы, программа у меня есть

Код

#include "stdafx.h"
#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, sl, sum, f, *x;
    SetConsoleOutputCP(1251);
    //randomize();
    printf("Vvedite e=? "); // приглашение – шрифт Lucida Console нужен
    scanf_s("%lf", &e); // ввод числа с плавающей точкой двойной точности(%lf) e
    if (e<1e-13 || e>0.11) {
        printf("Nekorrektnaya tochnost e (0..0.1] \nPress any key");
        _getch(); // ожидание нажатия клавиши
        return; // выход из функции main
    }
    fflush(stdin);
    printf("Vvedite n=? "); // приглашение
    scanf_s("%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("Vvedite n=%d znacheniy X iz intervala (-1,+1):\n", n); // приглашение
    for (i = 0; i < n; i++) { // ввод x[0]...x[n-1]
        scanf_s("%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("Nekorrektnoe znachenie izmeneno na %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++) {
        // поиск суммы ряда
        sum = sl = pow(x[i], 2); // sl=pow(x[i],2); sum=sl;
        k = 1;
        while ((fabs(sl) >= e) && (k != 500)) {
            sl *= sl(-(4 * i - 5) * x / (double)(4 * i));
            sum += sl;
            k++;
        };
        f = 4 * pow(1 + x[i], 0.25);
        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;
}




Это сообщение отредактировал(а) serega339344 - 13.5.2017, 10:01
PM MAIL   Вверх
serega339344
Дата 13.5.2017, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.5.2017

Репутация: нет
Всего: нет



Можно закрыть тему, задачу решил
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1095 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.