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

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

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

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

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

textual
Листинг программы
var
  s:string;
  p:array[1..9] of integer;
  q:array[1..8] of '*'..'-';
  n:byte;
  i:byte;
  o:boolean=true;
procedure roll(const i:byte);
var j:byte;
begin
   for j:=i+1 to high(p) do
   p[j]:=p[j+1];
   for j:=i to high(q) do
   q[j]:=q[j+1];
end;
 
begin
  s:='1*2-3*4+5*6-7';
  n:=(length(s)-1) div 2+1;
  for i:=0 to length(s) do
   if i mod 2 = 1 then p[i div 2+1]:=ord(s[i])-ord('0')
   else q[i div 2]:=s[i];
  writeln(s);
 
//Вырезаем умножения
  i:=1;
  while i<=n do
  begin
      o:=false;
      if q[i]='*' then
       begin
         p[i]:=p[i]*p[i+1];
         roll(i);
         o:=true;
       end;
       if o then begin dec(i); dec(n); end;
       inc(i);
  end;
 
//Операции + -
 
  i:=1;
  while i<=n do
  begin
      o:=false;
      if q[i]='+' then
       begin
         p[i]:=p[i]+p[i+1];
         roll(i);
         o:=true;
       end
       else if q[i]='-' then
       begin
         p[i]:=p[i]-p[i+1];
         roll(i);
         o:=true;
       end;
       if o then begin dec(i); dec(n); end;
       inc(i);
  end;
 
 
  writeln(p[1]);
  readln;
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