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

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

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

5 + 6 -34 + 56  - 7 + 2

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

var
  s, n: string;
  i, a, rez: integer;
  znak: char;
begin
  writeln ('Введите строку: ');
  readln(s);
  i:= 0;
  rez:= 0;
  n:= '';
  while not (i > length(s)) do           // цикл для обхода строки
  begin
    i:= i+1;
    if (s[i]>='0')and(s[i]<='9') then    // если встретилось число
    begin
      for i:= i to length(s) do
      begin
        n:= n + s[i];
        if not ((s[i+1]>='0')and(s[i+1]<='9')) then
          break;
      end;
      val(n, a);        // преобразовываем строку в число
      n:= '';
      if znak = '+' then
        rez:= rez + a
      else if znak = '-' then
          rez:= rez - a
        else
          rez:= a;
    end else begin
      if (s[i] = '+') or (s[i] = '-') then
        znak:= s[i];
    end;
  end;
  writeln ('Ответ: ', rez);
  readln();
end.

Вывод в консоли:

Введите строку: 
5  +2  -   3+4
Ответ: 8
vedro-compota's picture

засчитано

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