Вычислить значение арифметического выражения. - 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.
Объяснение кода листинга программы
- Создаются переменные s, p, q и n.
- Значение переменной s присваивается строковое выражение '12-34+5*6-7'.
- Значение переменной n вычисляется как (длина s - 1) / 2 + 1.
- Цикл for проходит по каждому символу в строке s.
- Если текущий символ в строке 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.
- Проверяется следующий символ в строке. Если он является символом '*', то:
- Значение переменной p[1] выводится на экран.
- Программа завершается, ожидая ввода пользователя.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д