Сомик, в том то все и дело, что он может вообще записать и a+b;c_d*f - это его дело, а моя задача на первом этапе проверить, можно ли это выражение вычислить, т.е. можно ввести и неограниченное количество скобок, но выражение можно будет вычислить, просто его запись будет нерациональна, но корректна, как например
a+(((((b-c))))). Т.е. ограничивать преподавателя правилами ввода я не могу. Отсюда и вопрос: есть ли какие-то кем-либо ОПРЕДЕЛЕННЫЕ правила записи и чтения алгебраических выражений?
Еще раз. Правила вы назначаете сами. Другое дело, на сколько они универсальны. Например, если вместо английского
написать русскую букву
, то ваша программа должна распознать это как две разных буквы или как одну букву, или вообще выдать ошибку. Я это говорю к тому, что правила могут варьироваться, вы сами должны установить их. Как уже сказано выше "однозначных стандартных математических правил" нет. Все ваши выражения можно расценивать как корректные. И это уже преподаватель (как заказчик программы, в некотором смысле) должен определить эти правила, или вы вместе должны их оговорить.
Я думаю разумно вам настаивать на следующих правилах: умножение записывается как
, т.е.
- является отдельной переменной. Скобки использовать только круглые. Думаю это наиболее адекватные правила, тем более, если это просто учебная задача.
Добавлено спустя 3 минуты 20 секунд:Для выяснения корректности записи, дисциплина тут ни при чем. Здесь важно выяснить корректно (не значит рационально) ли введено с клавиатуры выражение (если приходится использовать знаки, то для умножения это *, для деления /, для сложения +, для вычитания -, для скобок (, ), {, }, [, ], а все остальные знаки, например, :, ?, ., ., $, % если используются в выражение, то оно уже некорректно), т.е. имеет ли смысл работать с ним дальше (раскрывать скобки, перемножать, складывать, вычитать, делить, выражение вообще может не иметь букв, а иметь только цифры).
Ну вот вы сами сформулировали правила. В чем тогда вопрос то заключается? Любое выражение, которое соответствует этим правилам - корректно, если не соответствует, то некорректно. Только надо аккуратно со скобками определиться, например является корректным такое выражение
. Думаю, разумно сказать что нет.
И для проверки корректности ничего раскрывать не на надо. Надо определить формальную грамматику, которая описывает класс этих корректных выражений. Подозреваю, это будет контекстно - свободная грамматика, и проверка выражения на принадлежность осуществляется автоматом с магазинной памятью