Вычислить значение арифметического выражения. - Pascal

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

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

Дана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qnpn, где pi — цифра, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики. Гарантируется, что n ≤ 9.

Решение задачи: «Вычислить значение арифметического выражения.»

textual
Листинг программы
  1. var
  2.   s:string;
  3.   p:array[1..9] of integer;
  4.   q:array[1..8] of '*'..'-';
  5.   n:byte;
  6.   i:byte;
  7.   o:boolean=true;
  8. procedure roll(const i:byte);
  9. var j:byte;
  10. begin
  11.    for j:=i+1 to high(p) do
  12.    p[j]:=p[j+1];
  13.    for j:=i to high(q) do
  14.    q[j]:=q[j+1];
  15. end;
  16.  
  17. begin
  18.   s:='1*2-3*4+5*6-7';
  19.   n:=(length(s)-1) div 2+1;
  20.   for i:=0 to length(s) do
  21.    if i mod 2 = 1 then p[i div 2+1]:=ord(s[i])-ord('0')
  22.    else q[i div 2]:=s[i];
  23.   writeln(s);
  24.  
  25. //Вырезаем умножения
  26.   i:=1;
  27.   while i<=n do
  28.   begin
  29.       o:=false;
  30.       if q[i]='*' then
  31.        begin
  32.          p[i]:=p[i]*p[i+1];
  33.          roll(i);
  34.          o:=true;
  35.        end;
  36.        if o then begin dec(i); dec(n); end;
  37.        inc(i);
  38.   end;
  39.  
  40. //Операции + -
  41.  
  42.   i:=1;
  43.   while i<=n do
  44.   begin
  45.       o:=false;
  46.       if q[i]='+' then
  47.        begin
  48.          p[i]:=p[i]+p[i+1];
  49.          roll(i);
  50.          o:=true;
  51.        end
  52.        else if q[i]='-' then
  53.        begin
  54.          p[i]:=p[i]-p[i+1];
  55.          roll(i);
  56.          o:=true;
  57.        end;
  58.        if o then begin dec(i); dec(n); end;
  59.        inc(i);
  60.   end;
  61.  
  62.  
  63.   writeln(p[1]);
  64.   readln;
  65. end.

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

  1. Создаются переменные s, p, q и n.
  2. Значение переменной s присваивается строковое выражение '12-34+5*6-7'.
  3. Значение переменной n вычисляется как (длина s - 1) / 2 + 1.
  4. Цикл for проходит по каждому символу в строке s.
  5. Если текущий символ в строке s является четным числом (т.е. * или +), то выполняется следующая последовательность действий:
    • Проверяется следующий символ в строке. Если он является символом '*', то:
      • Значение переменной p[i] присваивается значение произведения значения переменной p[i] и значения переменной p[i+1].
      • Затем выполняется функция roll, которая перемещает все символы в массиве p на одну позицию вправо.
      • Значение переменной o устанавливается в true.
    • Если значение переменной o равно true, то выполняется шаг dec для переменных i и n.
    • Значение переменной i увеличивается на 1.
    • Значение переменной n уменьшается на 1.
    • Значение переменной o устанавливается в false.
    • Если значение переменной o равно false, то выполняется шаг inc для переменных i и n.
    • Значение переменной i увеличивается на 1.
    • Значение переменной n увеличивается на 1.
    • Значение переменной o устанавливается в true.
  6. Значение переменной p[1] выводится на экран.
  7. Программа завершается, ожидая ввода пользователя.

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


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

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

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

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

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

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