![]() |
Ввод формул
Допустим надо ввести в консоль пример (2+2) , чтоб прога его посчитала. Как можно это реализовать?
|
Doom77,
Цитата:
Гляньте в сторону Обратной Польской Записи. |
обычно делается так: считывается символ, по нему решается, какой тип выражения идёт дальше. Если может быть несколько вариантов, то последующие символы считываются и запоминаются до тех пор, пока не будет точно ясно, что вариант единственный. В данном случае:
1. скобки "(" считаем, что могут встретиться варианты 1,2,3,4 2. закрывающаяся скобка ")" выходим из скобки 3. число "+", "-" заталкиваем считанный символ обратно в поток и читаем поток как число, далее возможны только варианты 2,5 4. число "0"-"9" заталкиваем считанный символ обратно в поток и читаем поток как число, далее возможны только варианты 2,5 5. операции "+", "-", "*", "/ " запоминаем операцию, после этого читаем число, далее вариант 4 в начале выражения возможны варианты 1,3,4 Чтобы правильно вычислить выражение, его лучше преобразовать в так называемую польскую запись. Если вычислять выражение во время разбора с учётом приоритетов операций во время разбора, польская запись получится сама собой (даже не придётся над ней думать). При этом типичный прототип функции писать в виде double operation(istream&), например Код:
double op_plus(istream&); Пробуйте, пишите, что получилось |
Вот нашел пример ввода пытаюсь добавить функцию sin получаеться только не в нутри примера. Где ошибка? Вместо sin надо вводить , ))))))))))))))))))
Код:
#include <stdio.h> |
Уже разобрался )
|
Вот вроде работает. Не выполняет таких действий 2+(-3) как можно сделать?
Код:
#include <stdio.h> |
Мне нужно будет провести несколько операций с введенной формулой. Как ее сохранить?
|
Doom77, распиши пожалуйста в Формах_Бэкуса_—_Наура
так проще просматривать структуру программы. И расставь пожалуйста комментарии, т.к. для реализаций задумки есть множество алгоритмов. Или словами ход действий расскажи. |
Время: 12:17. |
Время: 12:17.
© OSzone.net 2001-