Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу как исправить? Си
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
уильям уильям вне форума
Member
 
Сообщений: 22
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.09.2017
По умолчанию как исправить? Си - 20.10.2017, 19:18

Для бесконечного числового ряда.... (вложение 1). формула во вложении 2
Не понимаю как она должна выглядеть , но пока только так


c Код:
int main() {
double Sum1(int n) {
    int i;
    double sum = 0, sgn = -1;
    for (i = 1; i <= n; i++) {
        sum += sgn*(double)(i)/(double)(i*i*i-i);
        sgn = -sgn;
    }
    return sum;
}
double Sum2(double eps) {
    int i = 1;
    double sum = 0, sgn = -1, mem;
    do {
        mem = sgn*(double)(i)/(double)(i*i*i-i);
        sum += mem;
        sgn = -sgn;
        i++;
    } while(fabs(mem) > eps);
    return sum;
}
}
Миниатюры
aeiaeaiea-1.jpg   aeiaeaiea-2.png  
Ответить с цитированием
  (#2 (permalink)) Старый
deckard deckard вне форума
Member
 
Сообщений: 79
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 5 сообщениях
Регистрация: 04.03.2008
По умолчанию 22.10.2017, 15:42

To vanya
При i=1 функция i/(i*i*i-i) даёт деление на 0, а при
целом i выражение i*i*i даёт переполненние (т е больше 2^15)
при i больше 32, так что функции Sum1 и Sum2 потребовали
определенной доработки.
То Вильям.
Разберитесь, что делают в программе строки #include и как
работает форматная строка в функции printf и вообще,
как в программе расставляются скобки {}.

c Код:
#include <stdio.h>
#include <math.h>

double Sum1(int n) {
    int i;
    double sum = 0, sgn,di;
    for (i = 2; i <= n; i++) {
    if ((i % 2) == 1) sgn=-1; else sgn=1;
    di=(double)i;
    sum += sgn*di/(di*di*di-di);
    }
    return sum;
}

double Sum2(double eps) {
    int i = 1;
    double sum = 0, sgn, di,newsum=0,ep;
    do {i++;
    if ((i % 2) == 1) sgn=-1; else sgn=1;
    di=(double)i;
    newsum += sgn*di/(di*di*di-di);
    ep=fabs(newsum-sum);
    sum=newsum;
    } while(ep > eps);
    return sum;
}

void main(void)
{int n;double eps;
n=100;eps=0.0001;
printf("n=%d Sum1=%lf\n",n,Sum1(n));
printf("eps=%lf Sum2=%lf\n",eps,Sum2(eps));
getchar();
}
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как это исправить? vasa750 Любые вопросы от новичков 4 14.12.2014 17:26
как это исправить??? vasa750 Любые вопросы от новичков 1 20.07.2014 06:36
Как исправить? vasa750 Любые вопросы от новичков 1 25.02.2014 18:21
Как исправить? vasa750 Любые вопросы от новичков 1 24.02.2014 10:27
как это исправить? Jt91 Компьютерные игры 14 27.03.2013 19:19
как это исправить? Jt91 Любые вопросы от новичков 27 17.07.2012 21:14
как это исправить? Jt91 Любые вопросы от новичков 11 26.06.2012 04:46
Как исправить ? kiruxacyc С/С++ 1 17.05.2012 10:42
Как исправить ошибку Лена88 Delphi 7 19.06.2011 22:16
Как исправить программный код Shabovta Visual Basic 1 16.02.2009 16:06
Ошибка в eVC 4.0 как ее исправить veligord Windows CE 3 12.04.2007 00:29



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов