Подсчитать результат, выполняя арифметические операции в порядке их приоритета - PascalABC.NET

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

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

Строка – это правильное арифметическое выражение, содержащее только натуральные числа и знаки арифметических операций между ними (+, -, *, /). Подсчитать результат, выполняя арифметические операции в порядке их приоритета. Входные данные: 5*3-9/3 Выходные данные: 12

Решение задачи: «Подсчитать результат, выполняя арифметические операции в порядке их приоритета»

textual
Листинг программы
  1. begin
  2.   var s := ReadLnString('Введите выражение:');
  3.  
  4.   var nums := New List<real>;
  5.   var op := New List<char>;
  6.   var n := 0;
  7.   foreach var c in s do
  8.     case c of
  9.       #48..#57 : n := n * 10 + StrToInt(c);
  10.       '+', '-', '*', '/' : begin nums.Add(n); n := 0; op.Add(c); end;
  11.     else
  12.       WriteLn('Встречен неожиданный символ «', c, '» в позиции ', Pos(c, s), '.', NewLine,
  13.       'Работа прекращена.');
  14.       Halt;
  15.     end;
  16.   if n > 0 then nums.Add(n);
  17.  
  18.   var opIndex := 0;
  19.   repeat
  20.     if (op[opIndex] = '*') or (op[opIndex] = '/') then
  21.       begin
  22.         if op[opIndex] = '*' then
  23.           nums[opIndex] := nums[opIndex] * nums[opIndex + 1]
  24.         else
  25.           nums[opIndex] := nums[opIndex] / nums[opIndex + 1];
  26.         nums.RemoveAt(opIndex + 1);
  27.         op.RemoveAt(opIndex);
  28.       end
  29.     else
  30.       opIndex += 1;
  31.   until opIndex = op.Count;
  32.  
  33.   repeat
  34.     case op[0] of
  35.       '+' : nums[0] := nums[0] + nums[1];
  36.       '-' : nums[0] := nums[0] - nums[1];
  37.     end;
  38.     nums.RemoveAt(1);
  39.     op.RemoveAt(0);
  40.   until op.Count = 0;
  41.  
  42.   WriteLn(s, ' = ', nums[0]);
  43. end.

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

  1. Программа запрашивает у пользователя ввод выражения и сохраняет его в переменную s.
  2. Переменная nums инициализируется как пустой список, который будет содержать числовые значения выражения.
  3. Переменная op инициализируется как пустой список, который будет содержать операции, которые нужно выполнить.
  4. Переменная n инициализируется как 0 и используется для подсчета числового значения выражения.
  5. В цикле foreach перебираются все символы в выражении.
  6. Если символ является числом (от #48 до #57), то он преобразуется в число и умножается на n, после чего добавляется в список nums и n обнуляется.
  7. Если символ является оператором (+, -, *, /), то числовое значение n добавляется в список nums, n обнуляется и оператор добавляется в список op.
  8. Если символ не является числом или оператором, то выводится сообщение об ошибке и программа завершается.
  9. Если n больше 0, то его значение добавляется в список nums.
  10. Переменная opIndex инициализируется как 0 и используется для индексации списка op.
  11. В цикле repeat выполняются операции из списка op.
  12. Если операция является умножением или делением, то выполняется соответствующая арифметическая операция и значение оператора удаляется из списка op.
  13. Если операция является сложением или вычитанием, то выполняется соответствующая арифметическая операция и значения, которые были на позициях 0 и 1 в списке nums, удаляются из списка.
  14. Если список op пуст, то выполняется цикл repeat, который выполняется до тех пор, пока в списке nums не останется только одно значение.
  15. В цикле repeat выполняются операции из списка op.
  16. Если операция является сложением или вычитанием, то выполняется соответствующая арифметическая операция и значение на позиции 1 в списке nums удаляется.
  17. Если операция является умножением или делением, то выполняется соответствующая арифметическая операция и значения на позициях 0 и 1 в списке nums удаляются.
  18. Если список nums пуст, то выводится сообщение об ошибке и программа завершается.
  19. Выводится результат выполнения выражения.

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


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

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

6   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы