http://virtual-object.narod.ru
 
    Virtual Object :: Programs :: Подсчет выражения
  Download
 
Наша кнопка
Подсчет выражения
{$APPTYPE CONSOLE}

var a: ansistring;
n: longint;
⁄⁄-------------------------------------------------
function step(x,y:longint):longint;
var i,t:longint;
begin
 t:=x;
 for i:=2 to y do t:=t*x;
 if y=0 then step:=1 else step:=t;
end;
⁄⁄-------------------------------------------------
function calc(l,r:longint):longint;
var leng,scob,i,numf,x:longint;
z: array [0..6] of longint;
stop:boolean;
begin
calc:=0;
if l>r then exit;
fillchar(z,sizeof(z),0);
scob:=0;
x:=0;
i:=r;
numf:=0;
stop:=false;
while ((i>=l)and(not stop)) do
 begin
  if a[i]=′)′ then begin numf:=1; inc(scob); end else
  if a[i]=′(′ then begin numf:=1; dec(scob); end else
  if scob=0 then
   begin
    if (((a[i]=′+′)or(a[i]=′-′))and(z[1]=0)) then z[1]:=i else
    if (((a[i]=′*′)or(a[i]=′⁄′))and(z[2]=0)) then z[2]:=i else
    if (a[i]=′^′) then z[3]:=i;
    if a[i] in [′+′,′-′,′*′,′^′,′⁄′] then x:=1;
    if (a[i]=′+′)or(a[i]=′-′) then stop:=true;
   end;
  dec(i);
 end;
leng:=r-l+1;
if x=0 then
if numf=0 then calc:=StrToInt(copy(a,l,leng)) else
calc:=calc(l+1,r-1) else
begin
 while (x<4)and(z[x]=0) do inc(x);
  case x of
   1: if a[z[x]]=′+′ then calc:=calc(l,z[x]-1) + calc(z[x]+1,r) else
   calc:=calc(l,z[x]-1) - calc(z[x]+1,r);
   2: if a[z[x]]=′*′ then calc:=calc(l,z[x]-1) * calc(z[x]+1,r) else
   calc:=calc(l,z[x]-1) div calc(z[x]+1,r);
   3: calc:=step(calc(l,z[x]-1),calc(z[x]+1,r));
  end;
 end;
end;
⁄⁄-------------------------------------------------
begin
assign(input,′input.txt′); reset(input);
assign(output,′output.txt′); rewrite(output);
readln(a);
n:=calc(1,length(a));
writeln(n);
end.
  JavaScript
  Animation
  Links
 
  Mail
 
 
 

Object © 2004 - 2005. All rights reserved.

 
Сайт создан в системе uCoz