Проблема такая...
Пишу программку для начальных классов по проверке порядка действий в мат.многочленах.....
на экране высвечивается строка с заданием.. например:
A+B+C+D*E
после клика мышкой поочередно по каждому мат.действию над данным действие высвечиваются цифры, соответствующие порядку нажатия на действие, предположим в результате работы пользователь получил следующее:
____________
|
1 2 3 4 |
|A+B+C+D*E |
-------------------
И нужно проверить правильно он расставил действия или нет
для числовых многочленов
например, (1+2)/3*(4+5/5) или 1+2+3*4+5 я написал проверку правильности расставленного порядка действий, проверяя результат
вычисления данной строки по польской нотации и результат, вычисленный с учетом того порядка, который расставил пользователь...
я понимаю, что это не совсе коректно... но пока ничего другого придумать не могу......
а вот для буквенных многочленов пока ничего путного придумать не могу...
польская нотация тут не поможет, т.к. по ней страка считывается в одном направлении, а пользователь может расствалять порядок в произвольном правильном порядке начиная с любого действия..
например, A+B+C+D:
по польской нотации единственно правильный порядок действий:
1 2 3
A+B+C+D
но возможны же другие правильные варианты:
1 3 2
A+B+C+D
и
3 2 1
A+B+C+D
помогите.........плиз
Не знаю, что такое польская нотация, но если бы мне дали эту задачу, я бы сделал так.
Построил дерево отвечающее за порядок выполнения операций, каждый элемент которого, либо число, либо операция. Если операции одного порядка, то располагал бы их в дереве на одном уровне.
Например для выражения (1 + 2 + 3) * (4 + 5 / 6)
*
+
1
2
3
+
4
/
5
6
Операции и числа на каждом уровне могут быть переставлены в любом порядке (если позволяет операция, например для '/' это не верно).
Далее можно получить аналогичное дерево для заданого набора и сравнить 2 дерева, делая всевозможные перестановки на каждом уровне для одного из них.
Пробелы убились. Вот так должно быть.
*
__+
____1
____2
____3
__+
____4
____/
______5
______6