Математический порядок действий
От: fulleren Россия  
Дата: 19.07.05 11:59
Оценка:
Проблема такая...
Пишу программку для начальных классов по проверке порядка действий в мат.многочленах.....

на экране высвечивается строка с заданием.. например:
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
помогите.........плиз
Как однажды в туденную зимнюю пору вышел из Windows был Norton и Dos
Re: Математический порядок действий
От: YVR  
Дата: 19.07.05 12:36
Оценка: 1 (1) +2
А если построить дерево операций?
Из узла растут операции с одинаковым приоритетом.
Тогда, если ткнули в лист, то ОК, и лист удаляется.
Узел без потомков становится листом.
Корень стал листом — конец, 5 баллов.
Re: Математический порядок действий
От: alex_e_  
Дата: 19.07.05 12:38
Оценка:
Не знаю, что такое польская нотация, но если бы мне дали эту задачу, я бы сделал так.

Построил дерево отвечающее за порядок выполнения операций, каждый элемент которого, либо число, либо операция. Если операции одного порядка, то располагал бы их в дереве на одном уровне.

Например для выражения (1 + 2 + 3) * (4 + 5 / 6)
*
+
1
2
3
+
4
/
5
6

Операции и числа на каждом уровне могут быть переставлены в любом порядке (если позволяет операция, например для '/' это не верно).

Далее можно получить аналогичное дерево для заданого набора и сравнить 2 дерева, делая всевозможные перестановки на каждом уровне для одного из них.
Re[2]: Математический порядок действий
От: alex_e_  
Дата: 19.07.05 12:43
Оценка:
Пробелы убились. Вот так должно быть.
*
__+
____1
____2
____3
__+
____4
____/
______5
______6
Re: Математический порядок действий
От: tavr  
Дата: 20.07.05 11:39
Оценка: +1
Здравствуйте, fulleren, Вы писали:

F>помогите.........плиз

подставь вместо букв простые числа и используй свой алгоритм для чисел
Re[2]: Математический порядок действий
От: GSL  
Дата: 22.07.05 22:11
Оценка:
Здравствуйте, tavr, Вы писали:

T>Здравствуйте, fulleren, Вы писали:


F>>помогите.........плиз

T>подставь вместо букв простые числа и используй свой алгоритм для чисел

Я так понял, что вы генерите на лету выражения ?
так может попробовать генрить как либо на основе известного порядка ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.