Урок 17. Задача №8. Решение.

Урок 17. Задача №8.

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

5 + 6 -34 + 56  - 7 + 2

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

type
  MyArr = array[1..6] of integer;
  ArrSt = array[1..5] of string;

function Check_tmp(s: string; mas: MyArr): MyArr;
var a: integer;
begin
  if(s <> '') then
  begin
    val(s, a);
    mas[6] := a;
  end;
  result := mas;
end;

function GetRes(arrInt: MyArr; arrStr: ArrSt; x: integer): integer;
var j, i: integer;
begin
  if(arrStr[1] = '+') then
    x := arrInt[1] + arrInt[2]
  else
    x := arrInt[1] - arrInt[2];
  j := 3;
  for i := 2 to length(arrStr) do
  begin
    if(arrStr[i] = '+') then
      x := x + arrInt[j]
    else
      x := x - arrInt[j];
    j += 1;
  end;
  result := x;
end;

var str, tmp: string;
  key: boolean;
  i, j, k, conv, res: integer;
  arr: MyArr;
  arrSig: ArrSt;
begin
  writeln('Enter math operation string: ');
  readln(str);
  for i := 1 to length(str) do
  begin
    key := false;
    if(str[i] >= '0') and (str[i] <= '9') then
      tmp += str[i]
    else if(str[i] = '+') or (str[i] = '-') then
    begin
      k += 1;
      arrSig[k] := str[i];
      key := true;
    end;

    if(key = true) and (tmp <> '') then
    begin
      val(tmp, conv);
      j += 1;
      arr[j] := conv;
      tmp := '';
    end;
  end;
  arr := Check_tmp(tmp, arr);
  writeln();
  writeln('Result is this math operation = ', GetRes(arr, arrSig, res));

  readln(); // Удержание консоль
end.// Завершение программы