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

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

Восстановить пароль Регистрация
 
FireStar
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 12
23.12.2012, 15:04     Символьное дифференцирование #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';
        };
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2012, 15:04     Символьное дифференцирование
Посмотрите здесь:

класс Символьное дифференцирование. C++
C++ Дифференцирование многочлена
Получить символьное представление цифр и пробелов отделяющих группы по три цифры,начиная справа C++
C++ крестики нолики- консоль + клавиши + символьное оформление
преобразовать символьное представление целого числа в целое число без исользования стандартных библ функций C++
C++ Дифференцирование
C++ Численное дифференцирование
Создать класс. Символьное поле должно быть задано как объект класса string C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Джита
Сообщений: 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;
 
}
Yandex
Объявления
01.11.2014, 12:39     Символьное дифференцирование
Ответ Создать тему
Опции темы

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