Структуры и алгоритмы обработки данных
Контрольная работа - Компьютеры, программирование
Другие контрольные работы по предмету Компьютеры, программирование
роцедура преобразования арифметического выражения в бинарное дерево}
{процедура использует рекурсивный нисходящий обход}
Procedure Tree (p:tr);undertree (c:char); {создает поддеревья}Skob; {учитывает скобки}i:=i+1;p^.pole[i]='(' then Skob;:=i+1;p^.pole[i]=')';; {Skob}i:=1 to length(p^.pole) dop^.pole[i]='(' then:=i;;(p^.pole[i+1]nil then
{Строятся поддеревья в зависимости от приоритета арифметической операции}
begin('+');('-');('*');('/');('^');(p^.l);(p^.r);;; {Tree}
{Вычисление значения арифметической функции}
{процедура использует рекурсивный нисходящий обход}
Procedure Calc(p:tr);p<>nil then beginp^.l^.sym and p^.r^.sym thenp^.pole[1] of
'+': begin^.zn:=p^.l^.zn+p^.r^.zn;^.sym:=true;;
'-': begin^.zn:=p^.l^.zn-p^.r^.zn;^.sym:=true;;
'*': begin^.zn:=p^.l^.zn*p^.r^.zn;^.sym:=true;;
'/': begin^.zn:=p^.l^.zn/p^.r^.zn;^.sym:=true;;
'^': begin^.zn:=EXP(p^.r^.zn*LN(p^.l^.zn));^.sym:=true;;; {case};(p^.l);(p^.r);
end;;{calc}
{процедура определяет где в дереве переменная или значение, и где
знак операции. Используется рекурсивный нисходящий обход}
Procedure Symb(p:tr);p<>nil thenp^.pole[1] in ['a'..'z'] then^.sym:=true;(p^.pole,'= ');(p^.zn);;p^.pole[1] in ['0'..'9'] then^.sym:=true;(p^.pole,p^.zn,code);;(p^.l);(p^.r);
end;; {Symb}
{процедура выводит на экран, полученное дерево }
{процедура использует рекурсивный нисходящий обход}
Procedure OutTree (pr:tr; f:byte);:=y+2;pr<>nil thenf=1 then:=x-5;;f=2 then:=x+9;
end;(X,Y);
{Если f=0 то выводится корневая вершина}
if f=0 then writeln ('[',pr^.pole,']');
{Если f=1 то выводится левое поддерево}
if f=1 then writeln ('[',pr^.pole,']/');
{Если f=2 то выводится правое поддерево}
if f=2 then writeln ('\[',pr^.pole,']/');(pr^.l,1);(pr^.r,2);;:=y-2;; {OutTree}{главная прога}(1,1,80,25);:=22;:=0;(Blue);;
{Ввод выражения, которое нужно посчитать}('Введите ваше выражение: ');(40,4);('Используйте следующие опреации: ');
GotoXY(50,5);('+, -, *, /, ^ ');(40,7);
Write('Программа применяет деревья для ');(40,8);('вычисления математического выражения: ');(1,2);(st);
{root - концевая вершина/ ее создание}
New(el);^.l:=nil;^.r:=nil;^.pole:=st;^.zn:=0;^.sym:=false;^.rend:=false;:=el;
{end of root}(root); {Создается дерево}
{Ввод значений переменных}('Введите значения: ');
Symb(root);(30,1,80,25);(Blue);(White);;('Дерево выглядет так: ');(root,0);root^.l^.sym and root^.r^.sym(root);^.rend:=true;calc(root);root^.rend;(1,23,29,25);(Red);(Green);;('Результат = ', root^.zn:2:3); {вывод результата}('Еще? (y/n)');(yn);yn='n';
end.