Структуры и алгоритмы обработки данных

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

роцедура преобразования арифметического выражения в бинарное дерево}

{процедура использует рекурсивный нисходящий обход}

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.