Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
#1

Выводит #infoo при подсчёте суммы ряда - C++

13.10.2012, 00:09. Просмотров 1142. Ответов 7
Метки нет (Все метки)

Если я ввожу "x" очень большой(100 например), то программа не работает выводя кучу строк подряд что-то типа #infoo. При этом "e" может быть любым. Подскажите в чём дело? Как решить данную проблему?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <math.h>
 
int main()
{   
    double a, b, c, d, f, g ,h, m, i;
    float x, e;
    int n;
    h=0;
 
 
    printf("vvedite x\n");
    scanf("%f", &x);
    printf("vvedite e\n");
    scanf("%f", &e);
    for(n=1;;n++) {
    
        a=pow(-1.0, n); //степень 1
        b=pow(x, 2*n+1); // степень 2
        c=a*b; //произведение этих степеней
 
        d=1; // переменная для факториала
        f=2*n+1; //факториал какого числа считаем
        for(i=1; i<=f; i++) {
        d=d*i;
        }
 
        g=c/d; //результат ряда
 
        h=h+g;
        m = fabs(g);
        printf("%d. %f\n", n, g);
        
        if((int)e==(int)m && e>=(m-(int)m)) {
        printf("%f", h);
        break;
        }
        else if(e>0 && e>=m) {
        printf("%f", h);
        break;
        }
        
 
    }
 
    getchar();
    getchar();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.10.2012, 00:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выводит #infoo при подсчёте суммы ряда (C++):

Выводит крокозяблы при подсчёте ряда Тейлора - C++
#include&lt;iostream.h&gt; #include&lt;math.h&gt; #include&lt;windows.h&gt; long double fact(int N) { if(N &lt; 0) return 0; ...

Почему при подсчёте min -выдаёт 0 из списка? - C++
Не пойму Почему при подсчёте min -выдаёт 0 из списка? При max всё нормально ... :( #include &lt;stdio.h&gt; #include &lt;iostream&gt; ...

При подсчёте косинуса компилятор выдаёт неверное значение - C++
И снова здравствуйте,возникла очередная проблема в моей программе,при элементарном подсчёте косинуса компилятор выдаёт неверное...

Найти ошибку при подсчете суммы ряда - C++
Помогите найти ошибку, выдает неправильный результат. Задан массив z(m). Посчитать: #include &lt;iostream&gt; #include &lt;cmath&gt; ...

Найти количество итераций при подсчете суммы ряда - C++
Найти количество итераций при подсчете суммы ряда до того , как n-ый член суммы будет меньше 0,00001 #include &lt;conio&gt; #include...

Ошибка #INFOO - C++
У меня есть тут два варианта: 1). когда я сам ввожу 2 числа(где E - точность и x - некоторое число). 2). ввожу только x (E - у нас тут...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
John Prick
778 / 711 / 131
Регистрация: 27.07.2012
Сообщений: 2,043
Завершенные тесты: 3
13.10.2012, 00:17 #2
Включайте отладчик и смотрите какая из функций или операций даёт результат #inf.
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
13.10.2012, 00:30  [ТС] #3
Цитата Сообщение от John Prick Посмотреть сообщение
Включайте отладчик и смотрите какая из функций или операций даёт результат #inf.
Был бы благодарен, если бы объяснили подробно как это сделать на данном примере
John Prick
778 / 711 / 131
Регистрация: 27.07.2012
Сообщений: 2,043
Завершенные тесты: 3
13.10.2012, 00:56 #4
Ну как в отладчике точки останова ставить и по шагам программу проходить знаете?
Если да - ставите точку останова, например, на первой операции цикла a=pow(-1.0, n); и далее идёте по шагам, наблюдая за изменением каждой переменной.
Правда, с циклами придётся возможно пройти его не один раз, прежде чем ошибка появится. Поэтому при первом "эксперименте" можно пропускать итерацию целиком (до той же точки останова в цикле) пока не проявится ошибка, затем уже локализовать место её возникновения.
tguglanaklona
10 / 10 / 2
Регистрация: 06.09.2012
Сообщений: 36
13.10.2012, 01:31 #5
Цитата Сообщение от aleksand Посмотреть сообщение
Если я ввожу "x" очень большой(100 например), то программа не работает выводя кучу строк подряд что-то типа #infoo. При этом "e" может быть любым. Подскажите в чём дело? Как решить данную проблему?
Молодец! Конечно, до бесконечности считать всегда будет переполнение! Поставьте останов на цикл.

Ряд sin(x) начинается с нуля, а не с единицы. При правильной остановке Ваша программа (при замене n=1 на n=0) дает верный резулитат, т.е. sin(x) =)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <math.h>
#include <conio.h>
 
#define PI  3.14159
 
int main()
{
    //FILE* pf = fopen("Output.txt","w+");
 
    double a, b, c, d, f, g ,h, m, i;
    float x;
    int n;
    h=0;
 
 
    printf("vvedite x\n");
    scanf("%f", &x);
    for(n=0;;n++) {
    
        a=pow(-1.0, n); //степень 1
        b=pow(x, 2*n+1); // степень 2
        c=a*b; //произведение этих степеней
 
        d=1; // переменная для факториала
        f=2*n+1; //факториал какого числа считаем
        for(i=1; i<=f; i++) {
        d=d*i;
        }
 
        g=c/d; //результат ряда
 
        h=h+g;
        m = fabs(g);
        printf("%d. %f, h=%f\n", n, g, h);
 
    }
 
    getchar();
    
}
Вывод sin π/2:

vvedite x
1.57
0. 1.570000, h=1.570000
1. -0.644982, h=0.925018
2. 0.079491, h=1.004509
3. -0.004665, h=0.999843
4. 0.000160, h=1.000003
5. -0.000004, h=1.000000
6. 0.000000, h=1.000000
7. -0.000000, h=1.000000
8. 0.000000, h=1.000000
9. -0.000000, h=1.000000


P.S.:
Вот это непонятн чего изображено
C
1
2
3
4
5
6
7
8
if((int)e==(int)m && e>=(m-(int)m)) {
        printf("%f", h);
        break;
       }
        else if(e>0 && e>=m) {
        printf("%f", h);
        break;
        }
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
13.10.2012, 13:49  [ТС] #6
Цитата Сообщение от tguglanaklona Посмотреть сообщение
Ряд sin(x) начинается с нуля, а не с единицы. При правильной остановке Ваша программа (при замене n=1 на n=0) дает верный резулитат, т.е. sin(x) =)
Здесь про sin вообще ничего нету)) Тут сумма ряда без sin
John Prick
778 / 711 / 131
Регистрация: 27.07.2012
Сообщений: 2,043
Завершенные тесты: 3
13.10.2012, 14:09 #7
Цитата Сообщение от aleksand Посмотреть сообщение
Тут сумма ряда без sin
Видимо, твой ряд является разложением в ряд функции sin. Наверное, это имел ввиду
tguglanaklona. Я не силён в рядах, не могу сказать точно, так ли это на самом деле. Грубо говоря, подставляя в ряд значение X и считая ряд до бесконечности получишь значение sin(X). Ну или значение той функции, разложение в ряд которой представлено у тебя.
В любом случае, ты должен контролировать переполнения (которые очень быстро возникают при расчёте факториалов), а также получения всяких недопустимых значений.
tguglanaklona
10 / 10 / 2
Регистрация: 06.09.2012
Сообщений: 36
13.10.2012, 15:24 #8
Цитата Сообщение от John Prick Посмотреть сообщение
Видимо, твой ряд является разложением в ряд функции sin. Наверное, это имел ввиду
tguglanaklona. Я не силён в рядах, не могу сказать точно, так ли это на самом деле. Грубо говоря, подставляя в ряд значение X и считая ряд до бесконечности получишь значение sin(X). Ну или значение той функции, разложение в ряд которой представлено у тебя.
В любом случае, ты должен контролировать переполнения (которые очень быстро возникают при расчёте факториалов), а также получения всяких недопустимых значений.
Угу, так точно

Здесь про sin вообще ничего нету)) Тут сумма ряда без sin
Смотри сам. sin(1.57)≈1 в моем примере. Надо бы знать, че считаем. Так зачем e? =)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2012, 15:24
Привет! Вот еще темы с ответами:

определить число членов ряда, необходимых для расчета с заданной погрешностью суммы членов ряда: - C++
определить число членов ряда, необходимых для расчета с заданной погрешностью суммы членов ряда: 1-1/3+1/5-1/7+…..: (-1)^N/(2*N+1);...

Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. - C++
Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. ...

Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. - C++
Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. Сума...

Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. - C++
Составить программу для вычисления суммы данного ряда для указанного значения аргумента х, если известно количество N членов ряда. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.10.2012, 15:24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru