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

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

Войти
Регистрация
Восстановить пароль
 
FireStar
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 12
#1

Символьное дифференцирование - C++

23.12.2012, 15:04. Просмотров 967. Ответов 1
Метки нет (Все метки)

Требуется реализовать класс Expression с чисто виртуальными методами Expression *diff(); и void print(); и отнаследовать классы Number, Variable, Add, Sub, Mul, Div. Если можете, помогите, пожалуйста.

Добавлено через 5 часов 6 минут
Есть классы Number и Variable, а как быть с остальными, я не совсем понял.
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
class Expression
{
    public:
        virtual Expression * diff() = 0;
        virtual void print() = 0;
};
 
class Number: public Expression
{
    double x;
public:
    Number (double value)
    {
        x = value;
    };
    Expression * diff()
    {
        return new Number (0);
    }
    void print()
    {
    std::cout << x;
    };
};
 
class Variable: public Expression
{
    public:
        Variable(){};
        Expression * diff()
        {
            return new Number (1);
        };
        void print()
        {
            std::cout << 'x';
        };
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2012, 15:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Символьное дифференцирование (C++):

класс Символьное дифференцирование. - C++
Помогите пожалуйста с созданием такого класса. НОВЫЕ ПОНЯТИЯ: наследование, виртуальные методы. Реализовать абстрактный класс...

Символьное дифференцирование cos и sin - C++
Здравствуйте. Хочу написать символьное дифференцирование cos и sin. Производную sin определяю через cos, cos через sin. Ошибка понятна:...

крестики нолики- консоль + клавиши + символьное оформление - C++
здраствуйте,неполучается на данном етапе,организовать отображение рамок - │ символов и неполучается,точнее странно происходит при...

Дифференцирование - C++
помогите продифференцировать где z=z(t), вот это уравнение : х= z*e^-Bt (B -это бета) - х'=? х''=? т.е 2 раза продифференцировать

Численное дифференцирование - C++
Помогите пожалуйста написать программу на C++Builder 6. вот задание: Разработать программу «Численное дифференцирование» различными...

Дифференцирование многочлена - C++
Не знаю как написать программу. Очень надо. Голову всю сломал.

1
Джита
Сообщений: n/a
01.11.2014, 12:39 #2
Собственно вся программа) Надеюсь, что кому-нибудь пригодится.
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include<stdlib.h>
#include <cstdio>
#include <math.h>
#include <iostream>
class Expression {
public:
virtual Expression *dif()=0;
virtual void print()=0;
};
class Number:public Expression
{public:
double e;
 
Number(double n): e(n) {}
Expression*dif()
{
 
 
return new Number(0);
 
}
void print()
{
std::cout « e;
}
 
};
 
class Variable:public Expression
{char X;
public:
Variable(char c):X(c){}
Expression*dif()
{
return new Number(1);
 
}
void print()
{
std::cout «X;
};
};
 
class Add:public Expression
{
Expression*m1,*m2;
public:
Add(Expression*L1, Expression*L2): m1(L1), m2(L2) {}
Expression*dif()
{
return new Add(m1->dif(),m2->dif());
 
};
void print (){
m1->print();
std::cout « "+";
m2->print();
}
};
 
class Mul:public Expression
{
Expression*e1;
Expression *e2;
public:
Mul(Expression*L1, Expression*L2): e1(L1), e2(L2) {}
Expression*dif()
{
return new Add(new Mul(e1->dif(),e2),new Mul(e1,e2->dif()));
 
};
void print(){
e1->print();
std::cout « "*";
e2->print();
}
};
class Sub :public Expression
{
Expression*m1, *m2;
public:
Sub(Expression*L1, Expression*L2) : m1(L1), m2(L2) {}
Expression*dif()
{
return new Sub(m1->dif(), m2->dif());
 
};
void print(){
m1->print();
std::cout « "-";
m2->print();
}
};
 
class Res :public Expression
{
Expression*e1;
Expression *e2;
public:
Res(Expression*L1, Expression*L2) : e1(L1), e2(L2) {}
Expression*dif()
{
return new Res(new Sub(new Mul(e1->dif(), e2), new Mul(e1, e2->dif())), new Mul(e2,e2));
 
};
void print(){
std::cout « "(";
e1->print();
std::cout « ")";
std::cout « "/";
std::cout « "(";
e2->print();
std::cout « ")"; 
 
}
};
int main()
{
Expression*i=new Res(new Number(3),new Variable('x'));
i->print();
std::cout « std::endl;
Expression*di=i->dif();
di->print();
return 0;
 
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2014, 12:39
Привет! Вот еще темы с ответами:

Преобразовать символьное представление целого числа в целое число без использования стандартных функций - C++
Всем доброго вечера! Народ, кто-нибудь знает как пробразовать символьное представление числа &quot;123&quot; в 123 БЕЗ ИСПОЛЬЗОВАНИЯ стандартных...

Создать класс. Символьное поле должно быть задано как объект класса string - C++
решите задачку!) 6. Создать класс. Символьное поле должно быть задано как объект класса string. Написать конструктор по умолчанию,...

Получить символьное представление цифр и пробелов отделяющих группы по три цифры,начиная справа - C++
Практикуюсь в С++ Написал код. bool **Madj; int *Visit; int main(){ int NodeCount=3; Visit = new int ; Madj = new...

Численное дифференцирование основанное на методе Лагранжа - C++
Подскажите, пожалуйста, как реализовать программу которая осуществляет численное дифференцирование методом Лагранж. На вход программе...


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

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

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