![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Charodey |
|
|||
|
Unregistered |
Требуется написать программу расчёта функции зависящей от переменной x. Пользовательдолжен сам ввести произвольную функцию и значение x. Фунция может содержать арифметические знаки +, -, *, /,^. А так же такие функции как sin, cos, tg, ctg, Lg.
Буду очень признателен, если кто-нибудь подскажет примерный алгорим решения этой задачи... |
|||
|
||||
| kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
Оо. Олимпиадная задача, довольно интересно
Для начала разбор: считываем строку, выделяем операции ("+", "-"...) и расставляем приоритеты операций. Расставляются они так: есть какая-то переменная а, вначале она равна нулю. Дальше для каждой операции мы определяем приоритет: если +, -, то для этих операций приоритет = а+1. При этом а не трогаем. Если *, ^, / , тогда а+2. Если на пути в строке попадаются открывающие скобки, то а увеличиваем на 2, если закрывающие - а=а-2. Пример: 2*x+7*(4^x) приоритеты: 2 *(2) x +(1) 7 *(2) ( 4 ^(4) x ) Дальше строим дерево: запускаем функцию построения - находим символ операции с наименьшим приоритетом. - разделяем строку на левую и правую части относительно операции - рекурсивно запускаем функцию для двух подстрок. - если в подстрове осталась единственная операция считаем то, что она возвращает и заканчиваем копать. Для нашего примера дерево будет таким: ----(+) ---- /--\ ----*--- * -/ \ --- / -- \ 2 х ---7-- ^ -------------/ \ -----------4----x В итоге первой посчитается степень, дальше результат умножится на 7, потом найдем 2*х, потом получим сумму. Чтобы получить значение функции в точке, надо будет написать функцию работающую с деревом, которая и возвращает значение. Ну вобщем такая идея. Это конечно даже не алгоритм, а так, намек. [color=silver][/color] -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |