задание 10 урок 18
Primary tabs
Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn , где pi — число, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики. Посчитайте результат за одно прочтение строки, без использования массивов
program U18z10; var ST: string; procedure expresion (var s: string); var str: string; i,chislo,buf,Sum,code: integer; Minus,Umnozh:boolean; begin str:=''; chislo:=1; buf:=1; //буфер для предыдущего числа Sum:=0; //переменная для вывода результата выражения Umnozh:=false; // флаг ответсвенный за * Minus:=false; // флаг ответсвенный за - for i:=1 to length(s)+1 do begin if (s[i]<>' ') then if (s[i]>='0') and (s[i]<='9') then str:=str+s[i] else begin val(str,chislo,code); str:=''; if (Minus) then //если перед числом был минус begin chislo:=chislo*(-1); //это число делаем отрицательным Minus:=false; end; if (Umnozh) then //Если предыдущий индекс был умножение begin chislo:=chislo * buf; //текущее умножить на предыдущее число buf:=1; Umnozh:=false; end; if (s[i]='*') then begin buf:=chislo; // предыдущее число в буфер Umnozh:=true; end else begin if (s[i]='-') then Minus:=true; Sum:=Sum + chislo; //если не *, то сложение суммы с текущим числом end; end; end; writeln(Sum); end; begin writeln('vvedite stroku like: 5*3-2* 2 + 5'); //readln(s); ST:= '5*3-2* 4 + 8'; expresion(ST); readln(); end.
- Log in to post comments
- 631 reads
vedro-compota
Wed, 01/12/2022 - 20:24
Permalink
for i:=1 to length(s)+1 do
-- выход за пределы массива
_____________
матфак вгу и остальная классика =)