Задача 1 Алгоритмическая подготовка

Задача 1

Решите на Паскале и/или JS Задачку №10 Урока 17, про расчет выражений вида за один проход строки:

Входные данные Результат

 
5+2               7
1-2*5+2          -7
5*6+7-3*2+11      42
5*6+7-3*2*3+11    30
var s,str: string;
    i,a,b,d,code: integer;
    f,h:boolean;
begin
  writeln('vvedite posledovatelnost');
  readln(s);
  str:='';
  a:=1;
  b:=1;
  d:=0;
  h:=false;
  f:=false;
  for i:=1 to length(s)+1 do
  begin
    if (s[i]>='0') and (s[i]<='9') then
      str:=str+s[i]
    else
    begin
      val(str,a,code);
      str:='';
      if (f) then
      begin
        a:=a*(-1);
        f:=false;
      end;
      if (h) then
      begin
        a:=a*b;
        b:=1;
        h:=false;
      end;
      if (s[i]='*') then
      begin
        b:=a;
        h:=true;
      end
      else
      begin
        if (s[i]='-') then
          f:=true;
        d:=d+a;
      end;
    end;
  end;
  writeln(d);
  readln();
end.

var s,str: string;
    i,a,b,d,code,k: integer;
 
function fun(var a1,b1,d1: integer): integer;
begin
  result:=d1+a1*b1;
  b1:=1;
end;
 
begin
  writeln('vvedite posledovatelnost');
  readln(s);
  str:='';
  b:=1;
  d:=0;
  k:=0;
  for i:=1 to length(s)+1 do
  begin
    if (s[i]>='0') and (s[i]<='9') then
      str:=str+s[i]
    else
    begin
      val(str,a,code);
      str:='';
      if (s[i]='*') then
        b:=fun(a,b,k)
      else if (s[i]='+') then
        d:=fun(a,b,d)
      else
      begin
        d:=fun(a,b,d);
        b:=b*(-1);
      end;
    end;
  end;
  writeln(d);
  readln();
end.