![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Веталь |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Формулу вида
<формула >::=<терминал >|(<формула ><знак><формула >) <знак>::= + | – | * | / <терминал >::=<переменная>|<цифра > <переменная>::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z <цифра >::=0|1|2|3|4|5|6|7|8|9 можно представить в виде двоичного дерева по следующим правилам: формула из одного терминального символа (цифры или переменной ) представляется деревом, состоящим из одной вершины, содержащей этот символ, а формула вида (f1 s f2) — деревом, в котором корень — это знак s, а левое и правое поддеревья — это соответствующие представления формул f1 и f2. О писать подпрограмму, которая: преобразует дерево-формулу, заменяя в нем все поддеревья, соответствующие формулам ((f1 +- f2) * f3) и (f1 * (f2 + - f3)), на поддеревья, соответствующие формулам ((f1 * f3) +-(f2 * f3)) и ((f1 * f2) +-(f1 * f3)); есть несколько готовых методов: модуль создания корня дерева, здесь функция создания узла
добавление числа в дерево
добавление переменной в дерево
добавление знака в дерево
И, собственно, загрузка формулы из файла
Помогите пожалуйста дописать нехватающие методы и оформить задачу. Заранее спасибо, кто поможет Сообщение отредактировано: Веталь - 17.04.2009 16:36 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Тему скрыл временно, до 1-го мая. Топикстартер уведомлен в PM.
|
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Ну, в общем, тема открыта даже раньше, чем я говорил. Итак, по порядку:
1) я не знаю, зачем ты привел здесь эти куски программы, они ничего не дают. Либо надо было приводить только структуру классов, либо - программу, строящую дерево разбора полностью. Третьего не дано. Я не думаю, что кто-то будет подгонять программу, чтобы она легла точно на описания классов, которые привел ты. Тем более, что ты явно что-то перемудрил, все делается гораздо проще... 2) теперь о том, как это - "проще". Вот так: Запусти программу и посмотри на результаты ее работы. Она сначала строит дерево разбора для приведенного выражения и вычисляет его, а потом Цитата преобразует дерево-формулу, заменяя в нем все поддеревья, и снова вычисляет значение выражения. При правильной замене значение всего выражения должно остаться неизменным. Смотри, разбирайся. Это можно было бы еще немного укоротить, но я этого делать не стал, боюсь, скажется на читабельности. Если разберешься в алгоритме создания дерева и замены поддеревьев, с легкостью сократишь программу самостоятельно... Пробуй соответствующие формулам ((f1 +- f2) * f3) и (f1 * (f2 + - f3)), на поддеревья, соответствующие формулам ((f1 * f3) +-(f2 * f3)) и ((f1 * f2) +-(f1 * f3)); ![]() Прикрепленные файлы ![]() |
Гость |
![]()
Сообщение
#4
|
Гость ![]() |
спасибо, буду разбираться
![]() |
![]() ![]() |
![]() |
Текстовая версия | 18.06.2025 8:37 |