ВУЗ:
Составители:
Рубрика:
. Практикум по курсу «Алгоритмизация и программирование». Часть 2
равно 1, тогда в рассматриваемой подстроке могут содержаться только опера-
ции умножения и деления и операнды, при level, равном 2 – только опе-
ранды.
Возвращаемое значение функции – адрес созданного дерева.
Выражение начинаем разбирать с конца.
Рассмотрим три возможных случая обработки строки, соответствующих
трем значениям параметра level.
1) Когда значение аргумента level равно 0, осуществляется поиск пер-
вого знака '+' или '–'. Знак операции помещается в вершину дерева, и рекур-
сивно вызывается функция построения левого поддерева из подформулы, рас-
положенной в строке до символа найденной операции, а затем правого подде-
рева, начиная со следующего символа. При этом в правой части строки не со-
держится операций сложения и вычитания, следовательно, значение аргумен-
та level=1. Левая часть строки может содержать все допустимые операции
и операнды. Для нее значение level=0.
Если же в строке не встретилось ни одного знака '+' или '–', то вызывается
функция построения дерева-выражения со значением level=1.
2) Когда значение аргумента level равно 1, осуществляется поиск пер-
вого знака '*' или '/'. Далее происходит построение поддеревьев аналогично
первому случаю. В правой части строки не содержится операций умножения
и деления, поэтому значение аргумента level=2. Левая часть строки может
содержать операции умножения и деления и операнды. Для нее значение
level=1.
3) Когда значение аргумента level равно 2, создается новый узел с опе-
рандом и связывается с узлом соответствующей операции.
// определение функции создания дерева разбора выражения
Tree* CreateTree(char* str, int level, int len)
{
Tree* next;
// начинаем анализировать строку-выражение с конца
int i=len-1;
switch(level)
{
// выражение может содержать операции
// '+', '-', '*', '/'
case 0:
// ищем позицию первой с конца
// операции '+' или '-'
while(i!=0 && str[i]!='+' && str[i]!='-') i--;
101
. Практикум по курсу «Алгоритмизация и программирование». Часть 2
равно 1, тогда в рассматриваемой подстроке могут содержаться только опера-
ции умножения и деления и операнды, при level, равном 2 – только опе-
ранды.
Возвращаемое значение функции – адрес созданного дерева.
Выражение начинаем разбирать с конца.
Рассмотрим три возможных случая обработки строки, соответствующих
трем значениям параметра level.
1) Когда значение аргумента level равно 0, осуществляется поиск пер-
вого знака '+' или '–'. Знак операции помещается в вершину дерева, и рекур-
сивно вызывается функция построения левого поддерева из подформулы, рас-
положенной в строке до символа найденной операции, а затем правого подде-
рева, начиная со следующего символа. При этом в правой части строки не со-
держится операций сложения и вычитания, следовательно, значение аргумен-
та level=1. Левая часть строки может содержать все допустимые операции
и операнды. Для нее значение level=0.
Если же в строке не встретилось ни одного знака '+' или '–', то вызывается
функция построения дерева-выражения со значением level=1.
2) Когда значение аргумента level равно 1, осуществляется поиск пер-
вого знака '*' или '/'. Далее происходит построение поддеревьев аналогично
первому случаю. В правой части строки не содержится операций умножения
и деления, поэтому значение аргумента level=2. Левая часть строки может
содержать операции умножения и деления и операнды. Для нее значение
level=1.
3) Когда значение аргумента level равно 2, создается новый узел с опе-
рандом и связывается с узлом соответствующей операции.
// определение функции создания дерева разбора выражения
Tree* CreateTree(char* str, int level, int len)
{
Tree* next;
// начинаем анализировать строку-выражение с конца
int i=len-1;
switch(level)
{
// выражение может содержать операции
// '+', '-', '*', '/'
case 0:
// ищем позицию первой с конца
// операции '+' или '-'
while(i!=0 && str[i]!='+' && str[i]!='-') i--;
101
Страницы
- « первая
- ‹ предыдущая
- …
- 99
- 100
- 101
- 102
- 103
- …
- следующая ›
- последняя »
