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

Уравнение в цикле - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
04.03.2011, 19:13     Уравнение в цикле #1
Подскажите как правильно написать эту формулу, без факториала можно.
Уравнение в цикле
А то что у меня получается не как не работает:
C++
1
2
3
4
5
for (n = 0; y > EPS && n < 100; n ++)
{
    y = pow ((-1), n) * pow (x, (2 * n)) / n; //последнее n вместо факториала
    sum += y;
}
Вот еще для Борланд Турбо 4.5 С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <math.h>
#include <stdio.h>
#define EPS 1.e-6
 
void main ()
{
    float y = 0, x, sum = 0;
    int n;
    scanf ("%f", &x);
    for (n = 0; y > EPS && n < 100; n ++)
    {
        y = pow ((-1), n) * pow (x, (2 * n)) / n;
        sum += y;
    }
    printf ("n=%f\nx=%f\ny=%f\nsum=%f\n\n", n, x, y, sum);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2011, 19:13     Уравнение в цикле
Посмотрите здесь:

Ошибка в цикле C++
C++ Дано уравнение ax2+bx+c=0. Решить уравнение, результат вывести на экран.
C++ Цикл в цикле
C++ Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клавиатур
C++ 18. Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клави
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
04.03.2011, 19:32  [ТС]     Уравнение в цикле #2
Для Визуал Студии 2010 С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <math.h>
#define EPS 1.e-6
 
double teylor (long double x)
{
    long double y = 0, sum = 0;
    long double n;
    for (n = 0; y > EPS && n < 100; n ++)
    {
        y = pow ((-1), n) * (x, (2 * n)) / n;
        sum += y;
    }
    return sum;
}
Должно передавать значение sum главному модулю... но результат 0.000000
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
04.03.2011, 20:36     Уравнение в цикле #3
Тебе не нужно пользоваться функцией pow, в таких заданиях жто неприпустимо!!!!
Обрати внимание, что у тебя каждый следущий елемент отличется от предадущего умноженого на икс в квадрате и поделеное на факториал, тоесть : сначала у тебя x^2, потом (x^2 * x^2)*1/2; потом (x^2 * x^2*(1/2 )) * x^2 * (1/3) ... тебе для вычисления сумы достаточн6о задать первый елемент, а потом умножить на икс квадрат и 1/n .
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
04.03.2011, 21:29  [ТС]     Уравнение в цикле #4
Что то вроде этого?? y = 1 * (x * x) * (1 / Modules::factorial (n)); Не совсем понимаю как это написать в коде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <math.h>
#define EPS 1.e-6
namespace Modules
{   
    double factorial (long double n)
    {
        if (n == 1)
        return n;
        else return factorial (n - 1) * n;
    }
    double teylor (long double x)
    {
        long double y = 0, sum = 0;
        long double n;
        for (n = 0; y > EPS && n < 100; n ++)
        {
            y = 1 * (x * x) * (1 / Modules::factorial (n)); //pow ((-1), n) * (x, (2 * n)) / Modules::factorial (n);
            sum += y;
        }
        return sum;
    }
}
Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
float y = 0, x, sum = 0, pr = (x * x);
int n;
scanf ("%f", &x);
for (n = 0; y > EPS && n < 100; n ++)
{
    y = (x * x) * (1 / n);
    pr *= y;
    sum += pr;
}
Так??
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
04.03.2011, 23:13     Уравнение в цикле #5
Да, только вначале тебе нужно в суму записать единицу и икс квадрат, ведь ты их не учитываешь в цикле!!!!!
И еще тебе на -1 надо множить, ведь у тебя знаки чередуются!
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
04.03.2011, 23:33  [ТС]     Уравнение в цикле #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
double teylor (int x, double sum)
{
    double y = 0, pr = 1;
    long int n;
    for (n = 0; fabs (y) > EPS && n < 50; n ++)
    {
        y = (((-1) * x) ^ 2) * (1 / Modules::factorial (n));
        pr *= y;
        sum += pr;
    }
    return sum;
}
Ну вот, последняя версия нерабочая)) Что тут еще сделать? Только напиши плс код. А то я че то не понимаю куды записать.
-1 это я учел уже, что с суммой сделать?

Добавлено через 16 минут
sum = 1 && (x ^ 2); //в буквальном смысле?)) или 1 или x^2, вписать в цикл? или дополнительно объявить присвоение значения в функции?
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
04.03.2011, 23:43     Уравнение в цикле #7
Ща напишу код.
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
04.03.2011, 23:55  [ТС]     Уравнение в цикле #8
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
#include <math.h>
#define EPS 1.e-6
 
namespace Modules
{   
    double factorial (long double n)
    {
        if (n == 1)
        return n;
        else return (n - 1) * n;
    }
    double teylor (double x, double sum)
    {
        sum = 1 + (x * x);
        double y = 0, pr = 1;
        long double n;
        for (n = 0; fabs (y) > EPS && n < 100; n ++)
        {
            y = (-1) * (x * 2) * (1 / Modules::factorial (n));
            pr *= y;
            sum += pr;
        }
        return sum;
    }
}
Ну вот результат наконец то показался, спасибо timchuchok, посмотри правильно?
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 00:21     Уравнение в цикле #9
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
double Teylor( double );
 
int main()
{
    double x;
    cout<<"Enter x =";
    cin>>x;
    cout<<endl<<exp(-x*x)<<endl<<Teylor(x);
    system("pause");
    return 0;
}
 
double Teylor( double x)
{
       double a , sum, eps = 0.0000001, i = 1.0, x2;
       x2 = x*x;
       a = 1;
       sum = 1 ;
       while ( fabs (a) >= eps ) 
       {
             a *= -1.0*x2*(1.0/i);
             sum +=a;
             i++;
       }
       return sum;
}
В главной функции написал проверку с помощью библиотечніх средств и с помощью "нашей" функции, резльтат один в один!

Добавлено через 20 минут
Leningradeс, у тебя в коде функция факториала используется, тут не рационально ее использівать!!!!
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.03.2011, 00:25     Уравнение в цикле #10
timchuchok, С чего не рационально-то?
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 00:29     Уравнение в цикле #11
По той причине, что в моем коде умножение использівается один раз в каждом цикле, а при віполнении єтого же цикла с функцией факториала - n .
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.03.2011, 00:33     Уравнение в цикле #12
timchuchok, Не использовать факториал, не использовать pow... Преждевременная оптимизация как бэ наносит вред. Хотя здесь возможно и действительно проще не использовать всего этого. Не всматривался.
Jupiter
05.03.2011, 00:37
  #13

Не по теме:

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

timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 00:40     Уравнение в цикле #14
Дельное замечание))
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
05.03.2011, 02:48  [ТС]     Уравнение в цикле #15
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
#include <math.h>
#define EPS 1.e-6
 
namespace Modules
{   
    double teylor (float x, float sum)
    {
        sum = 1 + (1 - (x * x));
        float y = 0, pr = 1;
        int n;
        for (n = 2; fabs (y) >= EPS && n < 100; n ++)
        {
            if (n <= 1)
            {
                y = (-1) * (x * x) * (1 / n);
                pr *= y;
                sum += pr;
            }
            if (n > 1)
            {
                y = (-1) * (x * x) * (1 / (n - 1) * n);
                pr *= y;
                sum += pr;
            }
        }
        return sum;
    }
}
А так? Результаты такие же... правда не особо вдохновляет результат... Если начать с n = 2 то первые добавленные элементы в sum не будут вновь записаны туда же?


Уравнение в цикле
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
05.03.2011, 03:11  [ТС]     Уравнение в цикле #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <math.h>
#define EPS 1.e-6
 
namespace Modules
{   
    double teylor (float x, float sum)
    {
        sum = 1 + (1 - (x * x));
        float y = 0;
        int n;
        for (n = 2; fabs (y) >= EPS && n < 100; n ++)
        {
            y = (-1) * (x * x) * (1 / (n - 1) * n);
            sum += y;
        }
        return sum;
    }
}
Тогда код совсем упрощается... только правильно ли? Результаты вроде те же...
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 11:48     Уравнение в цикле #17
Тебе сума в параметрах функции не нужна!
А так если, если правильно все считает - значит все верно!
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
05.03.2011, 19:43  [ТС]     Уравнение в цикле #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <math.h>
#define EPS 1.e-6
 
namespace Modules
{   
    int factorial (int n)
    {
        if(n == 1)
        return n;
        else return factorial (n - 1) * n;
    } 
    double teylor (float x)
    {
        float y = 1, n = 1.0, x2 = x * x, sum = 1;
        while ( fabs (y) >= EPS ) 
        {
            y *= -1.0 * x2 * (1.0 / factorial (n));
            sum += y;
            n ++;
        }
        return sum;
    }
}
Убрал сумму, вроде как все верно. Еще раз спасибо timchuchok
Leningradeс
 Аватар для Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 331
07.03.2011, 18:25  [ТС]     Уравнение в цикле #19
Кстате зачем у функции типы? Как по теории правильно расставлять типы перед функцией и внутри?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2011, 18:37     Уравнение в цикле
Еще ссылки по теме:

Создать производные классы линейное уравнение и квадратное уравнение, в которых данная функция переопределена C++
Инвариант в цикле C++
Зависание в цикле C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
07.03.2011, 18:37     Уравнение в цикле #20
Leningradeс, У функции - тип возвращаемого значения и типы параметров... Ну а как расставлять. Ну это уже вам решать)
Yandex
Объявления
07.03.2011, 18:37     Уравнение в цикле
Ответ Создать тему
Опции темы

Текущее время: 09:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru