распознавание функций (с++)

Вопросы по программированию, не подходящие в другие разделы.

Модераторы: Naeel Maqsudov, C_O_D_E

Ответить
Andrey_06
Сообщения: 5
Зарегистрирован: 15 май 2008, 13:40

здравствуйте. Услышал от препода одну интересную задачку:

написать программу на с++, которая будет распозновать вводимые с клавиатуры математические функции. т.е если например с клавиатуры ввели:
sin(45) [enter]
то программа должна посчитать sin(45) и выдать ответ [1/sqrt(2)]. при чем функции могут быть любой степени вложенности.

хотелось бы сделать хотя бы распознование таких функций как sin(), cos(), Ln и Log.
может быть кто-нибудь сталкивался с подобными задачими и может подсказать хотя бы основную идею, алгоритм...
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Например, создаёшь массив ключевых слов (имён функций), введенное выражение разбиваешь на части, то есть выделяешь имя функции (оно находится до скобки) и параметр. Пишешь swich, где принимаешь решение относительно введенного выражения.
Andrey_06
Сообщения: 5
Зарегистрирован: 15 май 2008, 13:40

не совсем понятно, как написать switch т.к необходима поддержка вложенных функций...
BAHTY3
Сообщения: 106
Зарегистрирован: 30 авг 2005, 02:53
Откуда: Санкт-Петербург
Контактная информация:

Примерно так:
Читаеш введенную строку до первой (
Потом следующий символ, проверяеш на его входжение в диапозон a-Z (правда нада бы исключить П, ту что 3.14... Ну или заранее договориться, что П будет вводиться на Русском языке, чтоб не путаться)
Если да, то значит щас будет вложенная функция и пишеш еще и ее. Если нет, то значение которое необходимо посчитать по функции. Тут главное соблюсти порядок функций по вложениям, хоть и делаеться это простым счетчиком :)
Жизнь ― это то, что с нами происходит, пока мы строим планы.© Джон Леннон.
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

Andrey_06 писал(а):не совсем понятно, как написать switch т.к необходима поддержка вложенных функций...

В нужном case вызываешь вложенную функцию. Сделай через if-else, всё в твоих руках.
Ответить