Функция типа eval()
1+3*4+6+7-4/10
вычеслит результат
Параметры:
PUSH PCharStrAddr ; адрес строки
Выход:
MOV AX, WordResult ; результат до 65535
Если кто-нибудь знает, как начать, напишите pls
[COLOR=silver]Методы не сложные, но всё же реализовывать их на языке ассемблера вряд ли стоит. Длина исходного текста программы будет измеряться сотнями килобайт, и такой код будет невозможно поддерживать. Если написать класс на C++, код будет очень ясным и займёт килобайт 10.
Я делал дважды. Первый раз на языке PL/M-86. Получилось неуклюже. Второй раз — на C++. Получилось красиво.[/COLOR]
Цитата:
Originally posted by Proger_XP
Нужна функция, которая по строке вида
1+3*4+6+7-4/10
вычеслит результат
Параметры:
PUSH PCharStrAddr ; адрес строки
Выход:
MOV AX, WordResult ; результат до 65535
Если кто-нибудь знает, как начать, напишите pls
Нужна функция, которая по строке вида
1+3*4+6+7-4/10
вычеслит результат
Параметры:
PUSH PCharStrAddr ; адрес строки
Выход:
MOV AX, WordResult ; результат до 65535
Если кто-нибудь знает, как начать, напишите pls
Если надо вычислять строки только токого вида, то есть несложный способ, описанный в книге "Структуры данных в С++" (Уильям Топп, Уильям Форд) - глава 5.3 (стр 193) - "Оценка выражений".
- Там используется алгоритм под названием "Обратная польская нотация".
- Так-же, можешь поискать исходники какого-нить калькулятора (в котором можно вводить выражения). Уверен, что там использован тот-же метод.
Буду юзать книги