Val(p:pelem)

Список пуст?
  Список атом?
  VAL=p^.атом x=VAL(Голова(p))
    оп=Голова(p)^.атом
    y=VAL(Голова(p))
    если оп=+ VAL=x+y
    если оп=- VAL=x-y
    если оп=* VAL=x*y
    если оп=/ VAL=x/y

Разъяснения:

Вот «правильный» линейный список

x=VAL(Голова(p)). Вот результат применения функции Голова:

оп=Голова(p)^.атом. Вот результат второго применения функции Голова:

y=VAL(Голова(p)). Вот результат третьего применения функции Голова:

Задача

Имеется правильное выражение в виде строки. Построить линейный список для этого выражения.

pElem=^Elem;

Elem=record

след:pElem;

case R:0..1 of

0: (уров:pElem);

1: (атом:T)

end;

Выражение вводится с клавиатуры.

procedure LS (var p:pElem);

var c:char;

begin

if not eoln

begin

read(c);

case c of

‘(‘: begin

new(p); p^.R:=0; LS(p^.уров); LS(p^.след);

end;

‘a’..’z’,’+’,’-‘,’*’,’/’: begin

new(p); p^.R:=1; p^.атом:=с; LS(p^.след);

end;

‘)’: p:=nil;

end;

end

else p:=nil;

end;

Задачи

1) Написать алгоритм вычисления значения арифметического выражения, используя операцию "расчленение".

2) Имеется линейный список для "правильного" арифметического выражения. Построить линейный список для обратной польской записи этого выражения.

3) Построить алгоритм обхода элементов линейного списка (восстановить строку символов с учетом вложенности).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: