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

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

На вход вашей программы подается строка вида:
5 + 6 -34 + 56 - 7 + 2
("сколько угодно" чисел с операциями суммы и разности в любом порядке). Вычислите результат (пробелов между символом операции и числом может и не быть)

type arrC = array[1..4] of char;
var  s, s_i, s_1 :string;
     chr :char;
     i, j, result, n :integer;
     arC :arrC;

function issdigit(s :string) :boolean;
var fl :boolean;
begin
  if (s >= '0') and (s <= '9') then
      fl := true
    else
      fl := false;
  issdigit := fl;
end;

  // убираю пробелы из строки
function get_string(s :string) :string;
var i :integer;
    s_2 :string;
begin
  for i := 1 to length(s) do
    if s[i] <> ' ' then
      s_2 := s_2 + s[i];
  get_string := s_2;
end;

function find_symbol(chr :char; arC :arrC) :char;
var i :integer;
begin
  for i := 1 to high(arC) do
    if chr = arC[i] then
      find_symbol := chr;
end;

begin
  s_i := '';
  for i := 1 to high(arC) do // массив символов
    arC[i] := '+-*/'[i];
  s := '5 + 6 -12 + 56  - 5 + 2';
  s := get_string(s);  // убираю пробелы из строки
  writeln(s);
  j := 1;
  while issdigit(s[j]) do
  begin
    s_1 := s_1 + s[j];
    j := j + 1;
  end;
  val(s_1, n);
  result := n; // первое число

  for i := j to length(s) do
    if not issdigit(s[i]) then
    begin
      val(s_i, n);
      if '+' = chr then
        result := result + n
      else
        result := result - n;
      chr := find_symbol(s[i], arC);
      s_i := '';
    end
    else
      s_i := s_i + s[i];
  val(s_i, n);
  result := result + n;  // завершаю подсчет
  writeln(result);
  readln();
end. 
vedro-compota's picture

засчитано

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