Практикум по курсу "Алгоритмизация и программирование". Часть 2. Андрианова А.А - 100 стр.

UptoLike

А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова .
1) формула из одного числа представляется деревом из одной вершины,
операндом которого является это число;
2) если выражение имеет операции, то листовые узлы (не имеющие по-
томков) будут хранить операнды, а остальные узлы операции, причем левое
и правое поддеревья узла-операции будут представлять собой выражение его
операндов.
Рис. 6.6 Дерево разбора выражения (5+16/2)*(3-7*2).
Узел дерева хранит два информационных поля символ операции и зна-
чение операнда. Если в узле дерева хранится операнд, то поле операции будет
содержать символ '@'.
// структура для хранения узла дерева
struct Tree
{
float operand; // поле операнда
char operation; // поле операции
Tree* left; // указатель на левый операнд операции
Tree* right; // указатель на правый операнд операции
};
При построении дерева надо учитывать приоритет операций. Поскольку
умножение и деление выполняются в первую очередь, то в дереве они будут
располагаться на более низких уровнях по отношению к сложению и вычита-
нию (если таковые имеются в формуле).
Параметрами функции являются символьная строка (str), содержащая
выражение, признак обрабатываемых операций (level) и длина строки
(len). Особо поясним значение параметра level. Если он равен 0, это озна-
чает, что строка содержит все возможные операции и операнды, если level
100
А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова                          .
    1) формула из одного числа представляется деревом из одной вершины,
операндом которого является это число;
    2) если выражение имеет операции, то листовые узлы (не имеющие по-
томков) будут хранить операнды, а остальные узлы – операции, причем левое
и правое поддеревья узла-операции будут представлять собой выражение его
операндов.




                   Рис. 6.6 Дерево разбора выражения (5+16/2)*(3-7*2).


    Узел дерева хранит два информационных поля – символ операции и зна-
чение операнда. Если в узле дерева хранится операнд, то поле операции будет
содержать символ '@'.

    // структура для хранения узла дерева
    struct Tree
    {
          float operand;      // поле операнда
          char operation; // поле операции
          Tree* left;    // указатель на левый операнд операции
          Tree* right;   // указатель на правый операнд операции
    };

    При построении дерева надо учитывать приоритет операций. Поскольку
умножение и деление выполняются в первую очередь, то в дереве они будут
располагаться на более низких уровнях по отношению к сложению и вычита-
нию (если таковые имеются в формуле).
    Параметрами функции являются символьная строка (str), содержащая
выражение, признак обрабатываемых операций (level) и длина строки
(len). Особо поясним значение параметра level. Если он равен 0, это озна-
чает, что строка содержит все возможные операции и операнды, если level

                                           100