задание 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
- 866 reads
vedro-compota
Wed, 01/12/2022 - 20:24
Permalink
for i:=1 to length(s)+1 do
-- выход за пределы массива
_____________
матфак вгу и остальная классика =)