Вычислить значение арифметического выражения. - 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] выводится на экран.
- Программа завершается, ожидая ввода пользователя.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д