Помощь - Поиск - Пользователи - Календарь
Полная версия: вычисление суммы членов ряда...
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Formula
1) 1-1/2+1/4-1/8+...+(-1/2)^(n-1)+...

2) 1-3*x+5*x^2-7*x^3+...+((-1)^(n-1))*(2*n-1)*x^(n-1)...


помогите, пожалуйста unsure.gif если можно с комментариями
volvo
Все просто... Первое задание может решаться вот так:
#include <iostream>
#include <cmath>

int main()
{
const double eps = 0.0001; // Точность вычисления
double s = 0.0, X = 1.0; // s - сумма, X - член ряда (первый - равен 1)
do
{
s += X; // увеличиваем сумму
X /= -2; // получаем очередной член ряда, путем деления предыдущего на -2
}
while(fabs(X) > eps); // Продолжать до тех пор, пока не достигнута точность
std::cout << s << std::endl; // печатаем результат
return 0;
}


Второе - по аналогии. Главное - понять сам принцип: на очередной итерации получаем из i-го члена ряда (i+1)-ый, и увеличиваем сумму. А для того, чтобы из предыдущего получить следующий - надо знать, на что нужно домножить предыдущий... Посмотри внимательно на задание, и попробуй выяснить, что надо сделать с Xן, чтобы получить из него Xi+1. Кстати, я уже несколько раз объяснял на этом форуме, как именно это делается, воспользуйся поиском...
Formula
хоть убейте не представляю как это делать 2) 1-3*x+5*x^2-7*x^3+...+((-1)^(n-1))*(2*n-1)*x^(n-1)... unsure.gif sad.gif

volvo
Тут задача решается в 2 этапа. Для начала тебе надо определить, при каких значениях X ряд сходится (чтобы найти его сумму, она должна быть, а для этого знакопеременный ряд должен быть сходящимся). Когда найдешь - добавь такой же цикл, чтобы ввод продолжался до тех пор, пока не будет введено подходящее значение X.

А потом уже - собственно алгоритм суммирования:
    int n = 0;
double s = 0.0, power_of_x = 1.0, curr;
do
{
curr = (2 * n + 1) * power_of_x;

s += (n % 2 ? -1 : 1) * curr;
// если остаток от деления n на 2 = 1 (т.е., n нечетное),
// то n-ый член ряда - со знаком "минус". Иначе - со знаком "плюс"...

power_of_x *= x; n += 1;
}
while(fabs(curr) > eps); // Продолжать до тех пор, пока не достигнута точность
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.