задача 8 урок 18

задача 8 урок 18

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

5 + 6 -34 + 56  - 7 + 2

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

Решение

program task_8_lesson_18;
function delProbel(s: string): string;   // удаляю лишние пробелы
var i: integer;
    chislo: string;
begin
  chislo := '';
  for i := 1 to length(s) do
    if ((s[i] >= '0') and (s[i] <= '9')) then
      chislo := chislo + s[i]
    else if (s[i] <> ' ') then
      chislo := chislo + s[i];
  result := chislo;
end;
var
  s, s1: string;
  i, j, n1, n2, code, otvet: integer;
  z: char;
begin
  readln(s);
  s := delProbel(s);
  i := 1;
  s1 := '';
  while (s[i] >= '0') and (s[i] <= '9') do   // находим первое число
    begin
      s1 := s1 + s[i];
      i += 1;
    end;
  z:= s[i];
  val(s1, n1, code); // первое число
  otvet := n1;  // ответ на этом этапе первое число
  s1 := '';
  j := i + 1; // переход на следующий символ после первого '+'/'-'
  for i := j to length(s) do
    begin
      if (s[i] >= '0') and (s[i] <= '9') then
        s1 := s1 + s[i]  // записали в строку следующее число
      else
        begin
          val(s1, n1, code);
          if z = '+' then
            otvet := otvet + n1
          else
            otvet := otvet - n1;
          z := s[i];
          s1 := '';
        end;
    end;
  val(s1, n2, code);// последний виток цикла сохранит в строку последнее число
  if z = '+' then     // делаю последнее действие
    otvet := otvet + n2
  else
    otvet := otvet - n2;
  writeln(otvet);
  readln
end.

Консоль

1000 + 1 - 2000     + 100 -       500
-1399

как изменить параметр "else" чтобы последнее действие не выносить из цикла т.е добавить условие выполнения когда j = length(s) ?

vedro-compota's picture

засчитано

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