Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2011, 19:43   #1
fidot
Пользователь
 
Регистрация: 24.12.2008
Сообщений: 15
По умолчанию найти сумму ряда в си

само задание такого. вводим с клавиатуры диапазон х(от начального до конечного и шаг) вводим точность и программа высчитывает сумму ряда.
ряд такой -(cумма)x^n /n

я написал вот такой вот код:

int main()
{
const int MaxIter = 500;
double x, Xn, Xk, dx, eps;
int n=1;
char a[]="введите аргументы и точность\n";
CharToOem(a,a);
cout << a;
cin >> Xn >> Xk >> dx >> eps;
printf("-------------------------------------\n");
printf("| X | Y | N |\n");
printf("-------------------------------------\n");
double ch, y;
for (x=Xn; x<=Xk; x+=dx)
{

while(fabs(ch)>eps)
{
y+=ch;
ch*=x*n/(n+1);
n++;
}

if (n>MaxIter)
{
char b[]="ряд расходится/n";
CharToOem(b,b);
cout << b;
}
printf("|%9.2lf |%9.2lf |%9.0d |\n", x, y, n-1);
}
getch();
return 0;
}


в итоге программа ввиде таблицы перечисляет только х, а сумма всегда равна нулю. помгогите пожалуйста
fidot вне форума Ответить с цитированием
Старый 30.03.2011, 19:56   #2
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Цитата:
y+=ch;
сразу же в глаза бросилось то что вы y изночально не обнулили
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 30.03.2011, 21:10   #3
fidot
Пользователь
 
Регистрация: 24.12.2008
Сообщений: 15
По умолчанию

я переделал, но всёравно не считает сумму, тупо нуль

int main()
{
const int MaxIter = 500;
float x, Xn, Xk, dx;
float eps;
float ch=Xn, y=-ch;
int n=1;
char a[]="Ââåäèòå àðãóìåíòû(íà÷. è êîí.), øàã è òî÷íîñòü\n";
CharToOem(a,a);
cout << a;
cin >> Xn >> Xk >> dx >> eps;
printf("-------------------------------------\n");
printf("| X | Y | N |\n");
printf("-------------------------------------\n");

for (x=Xn; x<=Xk; x+=dx)
{

while(fabs(ch)>eps)
{
n++;

ch*=x*n/(n+1);
y-=ch;
}

if (n>MaxIter)
{
char b[]="Ðÿä ðàñõîäèòñÿ!/n";
CharToOem(b,b);
cout << b;
}
printf("|%9.2lf |%9.2lf |%9.0i |\n", x, y, n);
}
getch();
return 0;
}
fidot вне форума Ответить с цитированием
Старый 30.03.2011, 22:28   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

1. Перед входом в цикл while n, ch и y хорошо бы инициализировать.
2. Какие входные значения Вы задаёте? (особенно - Xn и Xk ?).
3. Не смешивайте в одной программе чисто C-шные и "плюсовые" операторы ввода-вывода. Во первых - моветон, во вторых - ошарашивающие новичка эффекты бывают.
4. Тексты программ кнопочкой <#> выделяйте, пожалуйста...

Added 20:47 CET
5. Предохранитель от несходимости по MaxIter так, как Вы его запрограммировали, - до одного места...

Последний раз редактировалось Vago; 30.03.2011 в 22:46.
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти сумму ряда evklid Помощь студентам 2 10.11.2010 17:13
Найти сумму ряда 11111 Помощь студентам 14 01.11.2010 19:55
Найти сумму ряда xdozorx Паскаль, Turbo Pascal, PascalABC.NET 1 10.06.2010 11:20
Как найти сумму ряда? Razin Помощь студентам 0 17.12.2009 22:30
Найти сумму ряда с точностью e, если дан общий член этого ряда JiLiYa Общие вопросы C/C++ 2 18.02.2009 11:11