Вычисление суммы ряда

Помогите решить задачку (решается без вложенных циклов), просьба добавить подробные комментарии, чтобы смог разобраться:

Не используя стандартные функции (за исключением abs), вычислить сумму следующего ряда с заданной точностью Е > 0 (Е, х, а — вещественные числа вводятся с клавиатуры): Точность выводимого результата 6 знаков.

Входной файл in . txt содержит в первой строке одно число – Е. В ыходной файл out . txt — в первой строке число, равное сумме ряда.

#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include "math.h"
#include "iostream"
using namespace std;


int main(int argc, char* argv[])
{
setlocale(0, "");

int i, n, x;
float sum=0, //сумма ряда
    k;       //очередной член ряда
cin >> n;
cin >> x;
k=1;
for (i=1; i<=n; i++)
{
    k=k*x*(-x)/(2*i);
    sum=sum+k;
}
cout << sum;



system ("pause");
}

Извиняюсь за флуд (первый раз на этом сайте), получился вот такой код, в числителе вроде все нормально, а вот как в знаменателе сделать факториал (2n)! никак не могу понять

У вас сумма должна считаться, пока fabs(cos(x) - sum) не будет меньше, либо равной эпсилон (E). Точность же не просто так задается.

Как-то так:

unsigned int n = 1;

while (fabs(seq_sum - cos(x)) > eps) {
    // продолажаем вычислять сумму для n-го члена ряда
    n++;
}

Я только сегодня узнал, что такое циклы, поэтому мне мало что понятно :(
fabs это, как я понимаю, модуль. А что такое seq_sum? В тело цикла while записать расчетную формулу?

Да, fabs — это функция, вычисляющая модуль для вещественных чисел (float).

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

В while вы вычисляете сумму ряда для n-го элемента.

У вас есть входные данные, которыми будете проверять программу? Чтобы все нормально сходилось.

#include <iostream>
#include <cmath>
#include <cstdlib>

#ifndef M_PI
    #define M_PI 3.14159265
#endif

// Косинус числа в градусах
double cos_degree(double x)
{
    // функция cos() из <cmath> принимает значение в радианах
    double result = cos(x * M_PI / 180.0);
    return result;
}

// Вычисление факториала целого числа
float factr(int number)
{
    if (number < 0) {
        return 0;
    }
    if (number == 0) {
        return 1;
    }
    return number * factr(number - 1);
}


// Вычисление степени числа
float user_pow(float number, unsigned int exp)
{
    float result;
    if (exp == 0) {
        return 1;
    }
    result = number;
    for (unsigned int i = 1; i < exp; i++) {
        result *= number; 
    }
    return result;
}

// Получить элемент ряда с заданным x
float get_seq_item(float x, unsigned int n)
{
    // знаменатель выражения
    float denominator = factr(n * 2);
    // показатель степени в числителе
    float exp = n * 2.0;
    // числитель выражения
    float numerator = (n * -1.0) * user_pow(x, exp);

    return numerator / denominator;
}

int main(int argc, char* argv[])
{
    // переменная x ряда
    float x;
    // точность вычисления суммы ряда
    float eps;

    std::cout << "Введите x: ";
    std::cin >> x;

    std::cout << "Введите точность вычислений (eps): ";
    std::cin >> eps;

    // косинус x (в градусах)
    float cos_x = cos_degree(x);

    // Сумма последовательности
    float seq_sum = 1.0 - (x * x) / factr(2) + user_pow(x, 4) / factr(4);

    // счетчик итераций
    unsigned int n = 1;

    // вычисляем сумма ряда, пока она не достигнет нужной точности
    // или не произойдет переполнение типа данных
    while (fabs(seq_sum - cos_x) > eps) {
        if (n == 1) {
            seq_sum -= get_seq_item(x, n);
        } else {
            seq_sum += get_seq_item(x, n);
        }
        n++;
    }

    std::cout << "Сумма ряда = " << seq_sum << std::endl;
    std::cout << "Количество итераций = " << n << std::endl;
    return 0;
}

float factr(int number)
В условиях написано не использовать стандартные функции, factr не одна из них? Наверно через циклы можно как-нибудь найти

factr и pow по условиям задачи должны подгоняться под цикл или я ошибаюсь? Просто это задачка для тех, кто только изучил цикл, т.е. новичков, по идее не должно все так мудрено быть. Буду разбираться

Функция factr — пользовательская, т.к. написана нами. Стандартные, это, как я понимаю — те, что из стандартной библиотеки.

И да. Вы задолбаетесь реализовывать вычисление косинуса. В <cmath> есть cos, ее и используйте.

Факториал можно через циклы считать.

float fact = 1;
// факториал числа 5
for (int i = 1; i < 5; n++) {
    fact *= i;
}

selevit, так вроде сам косинус высчитывать не надо, только сумму, которая стоит справа в выражении. С клавиатуры вводиться n и x, и по формуле n-ного члена высчитывается результат

помогите написать программу програма на си++ вычисления суммы кубов чисел от 25 до 125

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.