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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
patriarch
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 17
#1

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

19.11.2009, 08:05. Просмотров 2883. Ответов 3
Метки нет (Все метки)

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

Реализовать абстрактный класс Expression с чисто виртуальными методами Expression *diff(); void print(); реализовать классы Number, Variable, Add (сумма), Sub (разность) с реализациями операции diff (дифференцирование) и print (печать на экран).

Пример:
C++
1
2
3
4
5
6
7
8
    Expression *e = new Add(new Number(1), new Variable('x'));
    e->print();
    std::cout << "\n";
    Expression *de = e->diff();
    de->print();
    std::cout << "\n";
    delete e;
    delete ed;
Реализовать классы Mul (произведение), Div (частное), при желании функции типа Sin, Cos и т.п.

Реализовать чтение выражения из строки с автоматическим созданием необходимых объектов.
Пример:
C++
1
    Expression *e = read_expression("(x+1)*x");
у меня есть не особо рабочий код.Кому интересно в личку.Нужно реализовать чтобы дифференцировалось выражение, вводимое с клавиатуры и функции от синус и косинуса, то есть двойные углы, квадраты и прочее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2009, 08:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос класс Символьное дифференцирование. (C++):

Символьное дифференцирование - C++
Требуется реализовать класс Expression с чисто виртуальными методами Expression *diff(); и void print(); и отнаследовать классы Number,...

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

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

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

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

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

3
patriarch
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 17
29.11.2009, 22:07  [ТС] #2
помогите пожалуйста кто-нибудь!
0
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
29.11.2009, 22:52 #3
C++
1
2
3
4
5
6
7
8
9
10
class Expression
{
virtual int *diff()=0;
virtual void print()=0;
};
class Number:public Expression
{
int *diff();
void print();
};
сколько нужно классов?4?делай аналогично.

Добавлено через 5 минут
вводимое с клавиатуры и функции от синус и косинуса, то есть двойные углы, квадраты и прочее.
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
case FUNC:
        {
    
            if(strcmp(TokenValue,"pi")==0){GetToken(); return 3.1415926535;}
            if(strcmp(TokenValue,"abs")==0)return fabs(prim());
            if(strcmp(TokenValue,"sin")==0)return sin(prim());
            if(strcmp(TokenValue,"cos")==0)return cos(prim());
            if(strcmp(TokenValue,"tg")==0)//тангенс
            {
                double angle=prim();
                double temp= cos(angle);
                if(temp==0) throw(MathError("can't calculate tg"));
                return sin(angle)/temp;
 
            }
            if (strcmp(TokenValue,"ctg")==0)
            {
                double angle=prim();
                double temp= sin(angle);
                if(temp==0) throw(MathError("can't calculate сtg"));
                return cos(angle)/temp;
 
            }
            if (strcmp(TokenValue,"ln")==0)
            {
                double temp=prim();
                if(temp<=0) throw(MathError("argument of lg is <= zero"));
                return log(temp);
            }
            if (strcmp(TokenValue,"exp")==0) return exp(prim());
            if (strcmp(TokenValue,"asin")==0)
            {
                double temp=prim();
                if(temp<-1||temp>1)throw(MathError("argument of asin is out of ranges"));
                return asin(temp);
            }
            if (strcmp(TokenValue,"acos")==0)
            {
                double temp=prim();
                if(temp<-1||temp>1)throw(MathError("argument of acos is out of ranges"));
                return acos(temp);
            }
            throw(SyntaxError("Incorrect function"));
        }
    case PRINT://обрабатываем конец локального выражения(заканчивающегося ;
    case END: return 0;
    default:throw(SyntaxError("No Expression"));
    }
 
}
0
patriarch
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 17
01.12.2009, 12:19  [ТС] #4
народ а кто-нибудь через класс может сделать?пожалуйста.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2009, 12:19
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
01.12.2009, 12:19
Ответ Создать тему
Опции темы

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