Страница 1 из 1

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

Добавлено: 19 май 2008, 19:23
Andrey_06
здравствуйте. Услышал от препода одну интересную задачку:

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

хотелось бы сделать хотя бы распознование таких функций как sin(), cos(), Ln и Log.
может быть кто-нибудь сталкивался с подобными задачими и может подсказать хотя бы основную идею, алгоритм...

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

Добавлено: 19 май 2008, 19:46
Albor
Например, создаёшь массив ключевых слов (имён функций), введенное выражение разбиваешь на части, то есть выделяешь имя функции (оно находится до скобки) и параметр. Пишешь swich, где принимаешь решение относительно введенного выражения.

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

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

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

Добавлено: 20 май 2008, 00:46
BAHTY3
Примерно так:
Читаеш введенную строку до первой (
Потом следующий символ, проверяеш на его входжение в диапозон a-Z (правда нада бы исключить П, ту что 3.14... Ну или заранее договориться, что П будет вводиться на Русском языке, чтоб не путаться)
Если да, то значит щас будет вложенная функция и пишеш еще и ее. Если нет, то значение которое необходимо посчитать по функции. Тут главное соблюсти порядок функций по вложениям, хоть и делаеться это простым счетчиком :)

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

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

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