Задача 10 Урок 18 Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn,

Задача 11 Урок 18

Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn, где pi — цифра, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики в один проход цикла

Входные данные   Результат 
5+2               7
1-2*5+2          -7
5*6+7-3*2+11      42
5*6+7-3*2*3+11    30
// функция для подсчета результата
function plus_minus(sign:string;numb,r:integer):integer;
begin
    if(sign='+') then
        r+=numb
    else
        r-=numb;
    result:= r;
end;

// функция принимающая на вход строку с арифметическим выражением
function string_expression(s:string): integer;
var  acc,sign,sign_multi:string;
     acc_multi,res,i,number,Code:integer;
begin
  acc:='';
  acc_multi:=0;
  sign:='+';
  res:=0;
  sign_multi:='';
  for i:=1 to length(s) do
  begin
    if(s[i] >= '0') and (s[i] <= '9') then
        acc+=s[i];
    // отсутствует else для избежания повторения кода
    // при проверке последнего числа
    if(i=length(s)) or (s[i]='*') or (s[i]='+') or (s[i]='-') then
    begin
        Val(acc, number, Code);
        acc:='';
        // если уже был знак умножения
        if(sign_multi='*') then
        begin
            number*=acc_multi;
            sign_multi:='';
        end;
        // знак умножения сейчас
        if(s[i]='*') then
        begin
            sign_multi:='*';
            acc_multi:=number;
        end
        // если сейчас не знак умножения
        else
        begin
            res:=plus_minus(sign,number,res);
            sign:=s[i]
        end;
     end;
  end;
  result:=res;
end;
// основная программа
var s:string;
begin
  s:='-89-8*7-90+67*34-89*7+78';
  writeln(string_expression(s));
end.