Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 339
#1

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

04.03.2011, 19:13. Просмотров 1307. Ответов 20
Метки нет (Все метки)

Подскажите как правильно написать эту формулу, без факториала можно.
Уравнение в цикле
А то что у меня получается не как не работает:
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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2011, 19:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Уравнение в цикле (C++):

Дано уравнение ax2+bx+c=0. Решить уравнение, результат вывести на экран. - C++
Здравствуйте. Завтра зачет, нужно сдать две программы на с++, как их писать у меня весьма смутное представление. Собственно задание: ...

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

18. Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клави - C++
#include &lt;iostream&gt; using namespace std; void main() { int urov1 = 0; int urov2 = 0; int urov3 = 0; float stad = 0; ...

Написать программу, которая решает уравнение с одним неизвестным и выводит в консоль значение неизвестного. Уравнение посимвольно вводится с клавиатур - C++
Заупутался :-(

Странность в цикле While - C++
В случае возвращения функцией сканф нуля получается бесконечный цикл но выполняется только 2 принтфа (ввода числа больше не появляется)....

Цикл в цикле - C++
Здравствуйте! У меня есть много векторов со множеством значений. Мне нужно произвести над ними несколько операций. И нужно это сделать в...

20
Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 339
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
0
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 .
1
Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 339
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;
}
Так??
0
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
04.03.2011, 23:13 #5
Да, только вначале тебе нужно в суму записать единицу и икс квадрат, ведь ты их не учитываешь в цикле!!!!!
И еще тебе на -1 надо множить, ведь у тебя знаки чередуются!
1
Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 339
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, вписать в цикл? или дополнительно объявить присвоение значения в функции?
0
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
04.03.2011, 23:43 #7
Ща напишу код.
0
Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 339
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, посмотри правильно?
0
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с, у тебя в коде функция факториала используется, тут не рационально ее использівать!!!!
1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
05.03.2011, 00:25 #10
timchuchok, С чего не рационально-то?
0
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 00:29 #11
По той причине, что в моем коде умножение использівается один раз в каждом цикле, а при віполнении єтого же цикла с функцией факториала - n .
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
05.03.2011, 00:33 #12
timchuchok, Не использовать факториал, не использовать pow... Преждевременная оптимизация как бэ наносит вред. Хотя здесь возможно и действительно проще не использовать всего этого. Не всматривался.
0
Jupiter
05.03.2011, 00:37
  #13

Не по теме:

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

0
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 00:40 #14
Дельное замечание))
0
Leningradeс
10 / 10 / 1
Регистрация: 03.03.2011
Сообщений: 339
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 не будут вновь записаны туда же?


Уравнение в цикле
0
05.03.2011, 02:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2011, 02:48
Привет! Вот еще темы с ответами:

Scanf в цикле - C++
#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; int main() { int n,i,k; double a,r;

Ошибка в цикле - C++
Помогите найти ошибку в цикле, пожалуйста #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; ...

Ошибка в цикле while - C++
Привет всем! Ниже приведен код программы, в программе две функции одна change() переводит Ф.И.О в формат фамилия - инициалы, а вторая...

Структура в цикле - C++
Приветствую! Помогите пожалуйста, разобрать вывод структуры в цикле. Проблема возникает при повторном вызове структуры для заполнения...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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