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

строковый dos-калькулятор

Добавлено: 30 дек 2006, 21:53
itwork
People, как можно сделать строковый dos-калькулятор на паскале, т.е водится строка "x^2+ 34 - 1/sqrt(x-2), ну и т.д" и как сделать программа выводила Ответ! Ваши советы или где есть подобные примеры???

Re: строковый dos-калькулятор

Добавлено: 31 дек 2006, 00:57
Хыиуду
Сколько раз уже подобная тема поднималась... Я в свое время писал курсач по символьному дифференцированию выражения.
Строку надо разбить на лексемы. В нашем случае это константы и знаки операций. Как с переменными - даже не знаю, один из вариантов - создать массив, заполнять который нужно записями - строка с именем переменной и ее значение. Отдельно найти скобки, вначале (рекурсивно) посчитать то, что в скобках. Не забыть про порядок действий. То есть, в данном случае:
- найти выражение в скобках "х+2"
- пробежаться по нему в поисках операции возведения в степень, потом умножения-деления, найти только одинокий минус.
- Взять лексемы справа и слева от него. Слева - х, справа - 2.
- пробежаться по массиву, найти запись со строкой "х", вытянуть из нее значение, скажем, 15.
- вычислить 15-2=13.
- на место "х-2" записать "13"

Re: строковый dos-калькулятор

Добавлено: 31 дек 2006, 09:13
SergeyS
зайди на сайт http://www.torry.ru
в поле quick search введи слово "expression" (без кавычек) получешь кучу компонентов причем бесплатных, причем с исходниками, причем на паскале...

а если хочешь все это сделать полностью самому, то это тебе прямая дорога к литературе по лексическим анализаторам, особенно рекомендую обратить внимание на Yacc & Lex (поищи инфу по ним в яндексе, а исходники для делфи можно найти на том же torry.ru)

Re: строковый dos-калькулятор

Добавлено: 31 дек 2006, 16:20
Ramzey
Я в свое время такой курсач писал. Он у меня графики рисовал и всякие интегралы считал.

Re: строковый dos-калькулятор

Добавлено: 31 дек 2006, 16:24
Ramzey
Синтаксический анализатор я выдумывал сам и "изобрел" велосипед под названием извращенная форма Бекуса-Наура. (Я потом узнал про БНФ, РБНФ и др.)