Урок 17 (Решенная задача номер 8)

Урок 17 (Решенная задача номер 8)

На вход вашей программы подается строка вида:

5 + 6 -34 + 56  - 7 + 2

("сколько угодно" чисел с операциями суммы и разности в любом порядке). Вычислите результат (пробелов между символом операции и числом может и не быть)

var s : string;

function ru36(h : string): integer;
var g, znak : string;
    i, c, cisl1, cisl2 : integer;
    d : boolean;
begin
  for i := 1 to length(s) do
  begin
    if (s[i] >= '0') and (s[i] <= '9') and (d = false) then
    begin
      g := g + s[i];
      if (s[i+1] = ' ') or (s[i + 1] = '+') or (s[i+1] = '-') then
      begin
        d := true;
        val(g, cisl1, c);
        g := '';
      end;
    end;
    if (s[i] = '-') or (s[i] = '+') then
      znak := s[i];
    if (znak <> '') and (s[i] >= '0') and (s[i] <= '9') then
    begin
      g := g + s[i];
      if (s[i+1] = ' ') or (s[i + 1] = '+') or (s[i+1] = '-')
      or (i = length(s)) then
      begin
        val(g, cisl2, c);
        g := '';
      end;
    end;
    if (cisl2 <> 0) then
      if (znak = '+') then
      begin
        result := (cisl1 + cisl2);
        cisl1 := result;
        cisl2 := 0;
        znak := '';
      end
      else
      begin
        result := (cisl1 - cisl2);
        cisl1 := result;
        cisl2 := 0;
        znak := '';
      end;
  end;
  writeln(result);
end;

begin
  writeln('vvedite viragenie');
  readln(s);
  ru36(s);
end.