Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм для распознания функции 
:(
    Опции темы
Charodey
Дата 27.5.2005, 16:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Требуется написать программу расчёта функции зависящей от переменной x. Пользовательдолжен сам ввести произвольную функцию и значение x. Фунция может содержать арифметические знаки +, -, *, /,^. А так же такие функции как sin, cos, tg, ctg, Lg.
Буду очень признателен, если кто-нибудь подскажет примерный алгорим решения этой задачи...
  Вверх
kometa_triatlon
Дата 28.5.2005, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 384
Регистрация: 7.1.2005
Где: Киев

Репутация: 2
Всего: 6



Оо. Олимпиадная задача, довольно интересноsmile Сам страдал, правда нету времени написать такую муть. Один из способов: строим дерево, которое будет собой представлять введенную функцию.
Для начала разбор: считываем строку, выделяем операции ("+", "-"...) и расставляем приоритеты операций. Расставляются они так: есть какая-то переменная а, вначале она равна нулю. Дальше для каждой операции мы определяем приоритет: если +, -, то для этих операций приоритет = а+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]


--------------------
Всё очень просто: сказки обман,
Солнечный остров скрылся в туман,
Замков воздушных не носит земля,
Кто-то ошибся, ты или я.

--------------
Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.