Вычислить арифметическое выражение, хранящееся в постфиксной записи - Pascal

Узнай цену своей работы

Формулировка задачи:

Динамические структуры. Стеки. Требуется вычислить арифметическое выражение, хранящегося в постфиксной записи. В выражение входят целые числа и знаки + , - . Требуется использовать алгоритм: В строке находится выражение 5 4 8 - + если это число, тогда записывается в стек, если знак то из стека вынимаем 2 последних числа и делаем с ним сложение или вычитание в зависимости от знака, что получилось записываем обратно в стек, идем дальше, стоит знак , снова достаем 2 числа и делаем вычисление, записываем обратно в стек, если стока пуста, тогда выводим всё, что находится в стеке, если это одно число тогда выводим его на экран, иначе если там 2 и более, выводим на экран эти 2 и более чисел и пишем, что выражение было записано не верно.

Решение задачи: «Вычислить арифметическое выражение, хранящееся в постфиксной записи»

textual
Листинг программы
var
  s: string;
  st: array[1..255] of integer;
  sz, i, tmp: integer;
  flg: boolean;
procedure err(s: string); begin writeln(s); exit end;
begin
  read(s);
  flg := false;
  for i := 1 to length(s) do
    if (s[i] in ['0'..'9']) then begin tmp := tmp * 10 + ord(s[i]) - 48; flg := true; end
    else if s[i] = '+' then
      if sz < 2 then err('Ошибка! В стеке меньше двух элементов')
      else begin dec(sz); st[sz] := st[sz] + st[sz + 1] end
    else if s[i] = '-' then
      if sz < 2 then err('Ошибка! В стеке меньше двух элементов')
      else begin dec(sz); st[sz] := st[sz] - st[sz + 1] end
    else if s[i] <> ' ' then
      err('Ошибка! Неопознанный символ')
    else if flg then begin flg := false; inc(sz); st[sz] := tmp; tmp := 0 end;
    for i := 1 to sz do write(st[i]);
    if sz > 1 then err('Ошибка! Выражение было записано не верно');
end.

Объяснение кода листинга программы

  1. Переменная s предназначена для хранения строки, в которой содержится арифметическое выражение.
  2. Переменная st представляет собой массив целых чисел, в котором будут храниться результаты вычисления выражения.
  3. Переменная sz используется для контроля количества элементов в стеке.
  4. Переменная i используется для итерации по символам строки s.
  5. Переменная tmp используется для временного хранения результата вычисления выражения.
  6. Переменная flg используется для контроля правильности записи выражения.
  7. Функция err используется для вывода сообщения об ошибке.
  8. В цикле for происходит обработка каждого символа строки s.
  9. Если текущий символ является числом от 0 до 9, то он умножается на 10, к нему добавляется код символа, вычитаемый из 48, и результат записывается в переменную tmp. Затем флаг flg устанавливается в true, чтобы можно было продолжить выполнение программы.
  10. Если текущий символ - это знак +, то из стека удаляется максимум два элемента, и их суммы записываются в переменную tmp. Затем флаг flg устанавливается в true.
  11. Если текущий символ - это знак -, то из стека удаляется максимум два элемента, и их разности записываются в переменную tmp. Затем флаг flg устанавливается в true.
  12. Если текущий символ не является числом или знаком, то выводится сообщение об ошибке.
  13. После обработки всех символов строки s выводятся результаты вычисления выражения.
  14. Если в стеке осталось более одного элемента, выводится сообщение об ошибке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5
Похожие ответы