Recur15. Вывести значение целочисленного выражения, заданного в виде строки $$S$$. Выражение определяется следующим образом:
<выражение>::= <терм>| <выражение>+<терм>| <выражение>- <терм>
<терм>::= <цифра>| <терм>* <цифра>
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
program Recur15; var S:String; Function Term(S:String):integer; var Stemp:String; begin if length(S)<=0 then Result:=1 else begin if S[1]='*' then delete(S,1,1); if pos('*',S)>0 then Stemp:=Copy(s,pos('*',S),length(S)) else Stemp:=''; Result:=(ord(s[1])-48)*Term(Stemp); end; end; Function Expression(S:String):integer; var sExp,sTerm:string; sign:integer; begin Result:=0; if length(S)>0 then begin if S[1] = '-' then begin delete(S,1,1); sign:=-1; end else sign:=1; if S[1] = '+' then delete(S,1,1); sTerm:=S; delete(sTerm,pos('-',sTerm),Length(sTerm)); delete(sTerm,pos('+',sTerm),Length(sTerm)); sExp:=Copy(s,Length(sTerm)+1,length(S)); Result:=Term(sTerm)+Expression(sExp); Result:=sign*Result; end; end; begin Write('S: '); Readln(S); Writeln(Expression(S)); end. |
Другие задачи из раздела Recur можно посмотреть здесь.
Код на странице неправильно посчитал 7-3+8+5-7+0*9 набор… Что-то там не работает.
Вот мой вариант: