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

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

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

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

19.11.2009, 08:05. Просмотров 2839. Ответов 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");
у меня есть не особо рабочий код.Кому интересно в личку.Нужно реализовать чтобы дифференцировалось выражение, вводимое с клавиатуры и функции от синус и косинуса, то есть двойные углы, квадраты и прочее.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2009, 08:05     класс Символьное дифференцирование.
Посмотрите здесь:

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

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

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

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

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

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

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

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

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

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

Возможно ли целочисленную переменную записать в файл как целочисленную, а не её символьное представление? - C++
Возможно при помощи operator&lt;&lt; переменную типа int записать в файл как int, а не её символьное представление? речь идёт о сохранении в...

Оцените класс больших чисел класс big_int - C++
big_int - класс больших чисел. Цифра храниться в строке. Работать будет как int, но во много раз больше (120-тизначное число). &quot;+&quot; и &quot;-&quot;...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
patriarch
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 17
29.11.2009, 22:07  [ТС]     класс Символьное дифференцирование. #2
помогите пожалуйста кто-нибудь!
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"));
    }
 
}
patriarch
0 / 0 / 0
Регистрация: 04.03.2009
Сообщений: 17
01.12.2009, 12:19  [ТС]     класс Символьное дифференцирование. #4
народ а кто-нибудь через класс может сделать?пожалуйста.
Yandex
Объявления
01.12.2009, 12:19     класс Символьное дифференцирование.
Ответ Создать тему
Опции темы

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