задание 10 урок 18

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

Посчитайте результат за одно прочтение строки, без использования массивов 

задание 10 урок 18

program U18z10;
var ST: string;
 
procedure expresion (var s: string);
var str: string;
    i,chislo,buf,Sum,code: integer;
    Minus,Umnozh:boolean;
  begin
  str:='';
  chislo:=1;
  buf:=1;     //буфер для предыдущего числа
  Sum:=0;     //переменная для вывода результата выражения
  Umnozh:=false;   // флаг ответсвенный за *
  Minus:=false;   // флаг ответсвенный за -
 
  for i:=1 to length(s)+1 do
  begin
   if (s[i]<>' ') then
     if (s[i]>='0') and (s[i]<='9') then
       str:=str+s[i]
     else
     begin
       val(str,chislo,code);
       str:='';
 
       if (Minus) then  //если  перед числом был минус
       begin
         chislo:=chislo*(-1); //это число делаем отрицательным
         Minus:=false;
       end;
       if (Umnozh) then  //Если предыдущий индекс был умножение
       begin
         chislo:=chislo * buf; //текущее умножить на  предыдущее число
         buf:=1;
         Umnozh:=false;
       end;
 
       if (s[i]='*') then
       begin
         buf:=chislo; // предыдущее число в буфер
        Umnozh:=true;
       end
       else
       begin
        if (s[i]='-') then
          Minus:=true;
          Sum:=Sum + chislo;   //если не *, то сложение  суммы с текущим числом
       end;
     end;
  end;
  writeln(Sum);
 
end;
 
begin
  writeln('vvedite stroku like: 5*3-2* 2 + 5');
  //readln(s);
   ST:= '5*3-2* 4 + 8';
   expresion(ST);
  readln();
end.
vedro-compota's picture

 for i:=1 to length(s)+1 do
  begin
   if (s[i]<>' ') then

-- выход за пределы массива

_____________
матфак вгу и остальная классика =)