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

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

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

Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
Выходные данные: Выведите значение арифметического выражения.

Примеры:

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

5+2 7
1-2*5+2 -7
5*6+7-3*2+11 42
5*6+7-3*2*3+11 30

Как решать: Посчитайте результат за одно прочтение строки, без использования массивов (в нашем курсе решение в таком стиле для этой задачки было впервые добавлено участником slavina036).

var s:string; i,l,j,a,b,c,h,m:integer; x:array[1..17] of string;

begin
  readln(s);
  j:=1;
  for i:=1 to length(s) do
  begin
    if (s[i]>='0')and (s[i]<='9')then
      x[j]:=x[j]+s[i]
    else
    begin
      j+=1;
      x[j]:=s[i];
      j+=1;
    end;
  end;
  i:=j;
  val(x[1],a,l);
  j:=3;
  While j<=i do
  begin
    h:=2;
    val(x[j],b,l);
    if x[j+1]='*' then
    begin
      m:=j+1;
      while x[m]='*' do
      begin
       val(x[m+1],c,l);
       b:=b*c;
       m+=2;
       h+=2;
      end;
    end;
    case x[j-1] of
      '+':a+=b;
      '-':a-=b;
      '*':a*=b;
    end;
    j+=h;
  end;
  write(a);
  readln();
end.