Задача 12 Урок 18
Primary tabs
Задана последовательность символов, имеющая следующий вид: p1q1p2q2p3...qn–1pn , где pi — число, а qi — знак арифметического действия из набора {+, –, *}. Вычислите значение выражения, предполагая, что действия выполняются согласно правилам арифметики.
Входные данные: На вход программе подается строка указанного вида, состоящая не более чем из 9 чисел, разделенных символами арифметических операций.
Выходные данные: Выведите значение арифметического выражения.Примеры:
Входные данные Результат
5+2 7
1-2*5+2 -7
5*6+7-3*2+11 42
5*6+7-3*2*3+11 30Как решать: Посчитайте результат за одно прочтение строки, без использования массивов (в нашем курсе решение в таком стиле для этой задачки было впервые добавлено участником slavina036).
var s:string; i,l,j,a,b,c,h,m:integer; x:array[1..17] of string;
begin
readln(s);
j:=1;
for i:=1 to length(s) do
begin
if (s[i]>='0')and (s[i]<='9')then
x[j]:=x[j]+s[i]
else
begin
j+=1;
x[j]:=s[i];
j+=1;
end;
end;
i:=j;
val(x[1],a,l);
j:=3;
While j<=i do
begin
h:=2;
val(x[j],b,l);
if x[j+1]='*' then
begin
m:=j+1;
while x[m]='*' do
begin
val(x[m+1],c,l);
b:=b*c;
m+=2;
h+=2;
end;
end;
case x[j-1] of
'+':a+=b;
'-':a-=b;
'*':a*=b;
end;
j+=h;
end;
write(a);
readln();
end.- Log in to post comments
- 968 reads
drl
Tue, 09/24/2024 - 10:51
Permalink
var l,x,i,k,d,a,b,c: integer;
var l,x,i,d,a,b,c: integer; s:string; z1,z2: char; begin x:=0; a:=0; b:=0; z1:='0'; z2:='0'; s:='5*6+7-3*2+11'; for i:=1 to length(s) do begin if (s[i]>='0') and (s[i]<='9') then begin val(s[i],d,l); x:=(x*10)+d; if z2='*' then begin c:=x; b:=c*b; c:=0; z2:='0'; end else if (a=0) or (z1='0') then a:=x else b:=x; end else begin x:=0; if z1<>'0' then begin z2:=s[i]; if z2<>'*' then begin case z1 of '+':a+=b; '-':a-=b; '*':a*=b; end; b:=0; z1:=z2; z2:='0'; end; end else z1:=s[i]; end; end; case z1 of '+':a+=b; '-':a-=b; '*':a*=b; end; writeln('Otvet:',' ',a); readln(); end.