Задача 9 Урок 17

Задача 9 Урок 17:

Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn1pn , где 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

(задачка взята из книги Е. В. Андреевой)

var s, n: string;
    i, j, k, o, int, l, acc, u, pos: integer;
    a: array [1..9] of integer;
    b: array [1..8] of char;
begin
  write('Введите арифметическое выражение: ');
  readln(s);
  l := length(s);
  for i := 1 to l + 1 do
   begin
    val(s[i], int, o);
    if o = 0 then n += s[i]
    else
     begin
      j += 1;
      val(n, int, o);
      a[j] := int;
      n := '';
      if s[i] = '*' then u += 1;
      if i < l then
       begin
        k += 1;
        b[k] := s[i];
       end;
     end;
   end;
  while u > 0 do
   begin
    for i := 1 to 8 do
     if b[i] = '*' then
      begin
       pos := i;
       break;
      end;
    a[pos + 1] := a[pos] * a[pos + 1];
    for i := pos to j do a[i] := a[i + 1];
    for i := pos to k do b[i] := b[i + 1];
    k -= 1;
    j -= 1;
    u -= 1;
   end;
  acc := a[1];
  for i := 2 to j do
   if b[i - 1] = '+' then acc += a[i]
   else acc -= a[i];
  writeln('Результат вычисления:  ', acc);
  readln();
end.