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

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

Войти
Регистрация
Восстановить пароль
 
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
#1

Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций - C++

06.12.2013, 09:59. Просмотров 742. Ответов 8
Метки нет (Все метки)

Добрый день. Дана лабораторная работа, (см. ниже 2 скриншота) по заданию нужно вычислить функции с использованием их разложения в степенной ряд (функции с передачей параметров по значению).

Я вроде бы выполнил условия, результаты видны, но не у верен в правильности, т.к. читал немного литературы и смотрел примеры. Результат - мой код внизу. А главное, не пойму как внедрить перегрузку функций.

Пожалуйста дайте совет как лучше сделать и правильно ли я сделал.
До этого без проблем выполнил 4 лабы без сторонних ресурсов. Кодю пару недель.

По лабам дано:
Кликните здесь для просмотра всего текста
Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций

Мой код:
Кликните здесь для просмотра всего текста
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
 
unsigned long long factorial(unsigned long long i) //вычисление факториала
{
    if (i == 0) 
        return 1;
    else 
        return i * factorial (i - 1);
}
 
int main()
{ 
setlocale(LC_ALL, "Russian"); // функция локализации вызывается только один раз
double  a, b, e;
int N;
    cout<<" Данные по варианту:"<< endl;
    cout<<" Разложение в ряд функций f(x): S=1+(x/1!)+(x^2/2!)+...+(xn/n!)"<< endl;
    cout<<" Диапазон изменения аргумента: a=1 b=2"<< endl;
    cout<<" N = 15: "<< endl;
    cout<<" Функций f(x) - сумма ряда (для проверки): S=e^x"<< endl;
    cout<<" eps близкое к нулю положительное число, например, 0.1, 0.01, 0.001, 0.0001"<< endl;
    cout<<" Введите Данные:"<< endl;
do
    {
        cout<<" Введитеи интервал а:"<< endl; cin>>a;// интервал
        cout<<" Введите интервал b:"<< endl; cin>>b;// интервал
    }while(a>=b);//проверка условий 
do
    {
        cout<<" Введите N:"<< endl; cin>>N;// диапазон изменения аргумента
 
    }while(N<1);//проверка условий 
do
    {
        cout<<"Введите eps: "; //точность 
        cin>>e;
    } while(e>0.1 || e<0.0001); //0.0001 < e < 0.1
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<"x"; // таблица
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<"Sn";
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<"Se";
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<"S"<<endl;
float x,h=(b-a)/10,sn=0,se=0,t,y; //вычисление шага
int i,j;
for(x=a;x<=b;x+=h)//вычисление x
{
    sn=x;se=x; //вычисление присваиваем значение х
    for(i=1;i<=N;i++)
{
    sn+=pow(x,i)/factorial(i);//правельное ли вычисление по формуле и факториала?
};
    j=1;
do 
{
    t=pow(x,j)/factorial(j);
    j++;se+=t;
} while(t>e);
    y=exp(x);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<sn;
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<se;
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<y<<endl;
}
system("PAUSE"); 
return 0;
}

Благодарю всяк входящего сюда, особенно тех кто не оставил без внимания данный пост. Вдруг кому то моя тема поможет в решение подобной задачи.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2013, 09:59     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций
Посмотрите здесь:
Вычисление функций с использованием их разложения в степенной ряд! C++
Вычисление функций с использованием их разложения в степенной ряд C++
C++ Вычисление функций с использованием их разложения в степенной ряд
Вычисление функций с использованием их разложения в степенной ряд C++
C++ Вычисление функций с использованием их разложения в степенной ряд
C++ Вычисление функций с использованием их разложения в степенной ряд
C++ Вычисление функций с использованием их разложения в степенной ряд
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
06.12.2013, 19:18  [ТС]     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций #2
Не кому подсказать?(

Добавлено через 3 часа 27 минут
Прошу Совета!
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
08.12.2013, 01:11  [ТС]     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций #3
ап?
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.12.2013, 01:37     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
double My_exp(double x, int N)
{
   double total = 1. + x, sum = x;
 
   for (int i = 2; i <= N; i++)
   {
      sum *= x / i;
      total += sum;
   }
 
   return total;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double My_exp(double x, double eps)
{
   double total = 1. + x, sum = x;
   int i = 2;
 
   while (sum > eps)
   {
      sum *= x / i;
      total += sum;
      i++;
    }
 
   return total;
}
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
08.12.2013, 15:14  [ТС]     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций #5
Цитата Сообщение от kazak Посмотреть сообщение
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
double My_exp(double x, int N)
{
   double total = 1. + x, sum = x;
 
   for (int i = 2; i <= N; i++)
   {
      sum *= x / i;
      total += sum;
   }
 
   return total;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double My_exp(double x, double eps)
{
   double total = 1. + x, sum = x;
   int i = 2;
 
   while (sum > eps)
   {
      sum *= x / i;
      total += sum;
      i++;
    }
 
   return total;
}


Спасибо за ответ, пока правда не понял как внедрить. Что-то голова не варит, или недостаточно теории. Сижу ломаю голову. Понял, только то, что pow(x,1) должен вроде складывать значения pow(x,n) и факториал кажется так же.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.12.2013, 20:55     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций #6
Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
float x,h=(b-a)/10,sn=0,se=0,t,y; //вычисление шага
int i,j;
for(x=a;x<=b;x+=h)//вычисление x
{
* * sn=x;se=x; //вычисление присваиваем значение х
* * for(i=1;i<=N;i++)
{
* * sn+=pow(x,i)/factorial(i);//правельное ли вычисление по формуле и факториала?
};
* * j=1;
do 
{
* * t=pow(x,j)/factorial(j);
* * j++;se+=t;
} while(t>e);
* * y=exp(x);
* * cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
* * cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<sn;
* * cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<se;
* * cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<y<<endl;
}
C++
1
2
3
4
5
6
7
8
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 1;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
}
Не забудьте добавить описание функций Myexp.
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
08.12.2013, 21:45  [ТС]     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций #7
Цитата Сообщение от kazak Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 1;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
}
Не забудьте добавить описание функций Myexp.
Огромная благодарность Вам! Более менее моя голова чему то набирается благодаря Вам!

Только, вроде, вот тут
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 1;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
}
Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций

Должно быть так?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
h=(b-a)/10; //вычисление шага
for(x=a;x<=b;x+=h)//вычисление x
    {
        cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
        cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<My_exp(x, N);
        cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<My_exp(x, e);
        cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
    }
Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций

иначе он присвоит х=а и далее не увеличивает х на шаг.
Надеюсь я ничего не путаю. Еще раз спасибо за отклик.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
08.12.2013, 23:03     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций #8
Я там забыл дописать
C++
1
2
3
4
5
6
7
8
9
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 0;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
    x += h;
}
Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
Должно быть так?
Так лучше не делать, так как из-за специфичного формата чисел с плавающей точкой их нельзя напрямую сравнивать на равенство. Если Вы присмотритесь к своему варианту, то можете заметить, что в таблице отсутствует результат для значения b. Более подробно узнать можно тут http://habrahabr.ru/post/112953/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2013, 23:39     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций
Еще ссылки по теме:
Вычисление функций с использованием их разложения в степенной ряд ощибки исправте пожалуйста C++
C++ Вычислить функции arcctgс заданной точностью с использованием разложения в ряд
C++ "Вычисление функций с использованием их разложения в степенной ряд"
Вычисление функции с использованием разложения в ряд C++
Вычисление функции с использованием их разложения в ряд C++

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

Или воспользуйтесь поиском по форуму:
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
08.12.2013, 23:39  [ТС]     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций #9
Цитата Сообщение от kazak Посмотреть сообщение
Я там забыл дописать
C++
1
2
3
4
5
6
7
8
9
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 0;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
    x += h;
}
Так лучше не делать, так как из-за специфичного формата чисел с плавающей точкой их нельзя напрямую сравнивать на равенство. Если Вы присмотритесь к своему варианту, то можете заметить, что в таблице отсутствует результат для значения b. Более подробно узнать можно тут http://habrahabr.ru/post/112953/
И правда. Спасибо еще раз за совет. Ссылку взял на изучение.
Yandex
Объявления
08.12.2013, 23:39     Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций
Ответ Создать тему
Опции темы

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