Держи ))) Задана строковое выражение "2+44*(50/(2+3))/3+5" или любое другое введенное пользователем.Напиши программу которая будет вычислять её.Сам задачу реализовывал на питоне,попробуй ты на php
Добавлено 29.04.14 в 21:05:30:
мое решение на питоне,правда оно не есть оптимальным,но работает
z=raw_input("ENTER: "
og1=og2=0
k=k2=1
dp=dm=t=t2=0
ot=""
while(k==1):
i=k=0
s=len(z)
while(i<s):
if(z[i]=="(":
og1=i
if(z[i]=="":
og2=i
k=1
i=999999
i=i+1
new=z[og1+1:og2]
k2=1
if(k==0):
k2=0
while(k2==1):
s2=len(new)
i2=k2=0
while(i2<s2):
if(new[i2]=="*":
d=i2
dm=i2-1
t=0
k2=1
while(new[dm]!="+" and (new[dm]!="-" and (new[dm]!="*" and (new[dm]!="/" and (dm!=-1):
dm=dm-1
dp=i2+1
while(new[dp]!="+" and (new[dp]!="-" and (new[dp]!="*" and (new[dp]!="/" and (dp!=s2-1):
dp=dp+1
if(dp==s2-1):
dp=dp+1
ot=int(new[dm+1:d])*int(new[d+1:dp])
new=new.replace(new[dm+1:dp], str(ot))
t=1
if(t!=1):
if(new[i2]=="/":
d=i2
dm=i2-1
t=0
k2=1
while(new[dm]!="+" and (new[dm]!="-" and (new[dm]!="*" and (new[dm]!="/" and (dm!=-1):
dm=dm-1
dp=i2+1
while(new[dp]!="+" and (new[dp]!="-" and (new[dp]!="*" and (new[dp]!="/" and (dp!=s2-1):
dp=dp+1
if(dp==s2-1):
dp=dp+1
ot=int(new[dm+1:d])/int(new[d+1:dp])
new=new.replace(new[dm+1:dp], str(ot))
t=1
if(t==1):
i2=999999
t=0
i2=i2+1
k2=1
if(k==0):
k2=0
while(k2==1):
s2=len(new)
i2=k2=0
while(i2<s2):
if(new[i2]=="+":
d=i2
dm=i2-1
t=0
k2=1
while(new[dm]!="+" and (new[dm]!="-" and (new[dm]!="*" and (new[dm]!="/" and (dm!=-1):
dm=dm-1
dp=i2+1
while(new[dp]!="+" and (new[dp]!="-" and (new[dp]!="*" and (new[dp]!="/" and (dp!=s2-1):
dp=dp+1
if(dp==s2-1):
dp=dp+1
ot=int(new[dm+1:d])+int(new[d+1:dp])
new=new.replace(new[dm+1:dp], str(ot))
t=1
if(t!=1):
if(new[i2]=="-":
d=i2
dm=i2-1
t=0
k2=1
while(new[dm]!="+" and (new[dm]!="-" and (new[dm]!="*" and (new[dm]!="/" and (dm!=-1):
dm=dm-1
dp=i2+1
while(new[dp]!="+" and (new[dp]!="-" and (new[dp]!="*" and (new[dp]!="/" and (dp!=s2-1):
dp=dp+1
if(dp==s2-1):
dp=dp+1
ot=int(new[dm+1:d])-int(new[d+1:dp])
new=new.replace(new[dm+1:dp], str(ot))
t=1
if(t==1):
i2=999999
t=0
i2=i2+1
t2=1
u=z
z=z.replace(z[og1:og2+1],new)
#############################################
new=u
k2=1
while(k2==1):
s2=len(new)
i2=k2=0
while(i2<s2):
if(new[i2]=="*":
d=i2
dm=i2-1
t=0
k2=1
while(new[dm]!="+" and (new[dm]!="-" and (new[dm]!="*" and (new[dm]!="/" and (dm!=-1):
dm=dm-1
dp=i2+1
while(new[dp]!="+" and (new[dp]!="-" and (new[dp]!="*" and (new[dp]!="/" and (dp!=s2-1):
dp=dp+1
if(dp==s2-1):
dp=dp+1
ot=int(new[dm+1:d])*int(new[d+1:dp])
new=new.replace(new[dm+1:dp], str(ot))
t=1
if(t!=1):
if(new[i2]=="/":
d=i2
dm=i2-1
t=0
k2=1
while(new[dm]!="+" and (new[dm]!="-" and (new[dm]!="*" and (new[dm]!="/" and (dm!=-1):
dm=dm-1
dp=i2+1
while(new[dp]!="+" and (new[dp]!="-" and (new[dp]!="*" and (new[dp]!="/" and (dp!=s2-1):
dp=dp+1
if(dp==s2-1):
dp=dp+1
ot=int(new[dm+1:d])/int(new[d+1:dp])
new=new.replace(new[dm+1:dp], str(ot))
t=1
if(t==1):
i2=999999
t=0
i2=i2+1
k2=1
while(k2==1):
s2=len(new)
i2=k2=0
while(i2<s2):
if(new[i2]=="+":
d=i2
dm=i2-1
t=0
k2=1
while(new[dm]!="+" and (new[dm]!="-" and (new[dm]!="*" and (new[dm]!="/" and (dm!=-1):
dm=dm-1
dp=i2+1
while(new[dp]!="+" and (new[dp]!="-" and (new[dp]!="*" and (new[dp]!="/" and (dp!=s2-1):
dp=dp+1
if(dp==s2-1):
dp=dp+1
ot=int(new[dm+1:d])+int(new[d+1:dp])
new=new.replace(new[dm+1:dp], str(ot))
t=1
if(t!=1):
if(new[i2]=="-":
d=i2
dm=i2-1
t=0
k2=1
while(new[dm]!="+" and (new[dm]!="-" and (new[dm]!="*" and (new[dm]!="/" and (dm!=-1):
dm=dm-1
dp=i2+1
while(new[dp]!="+" and (new[dp]!="-" and (new[dp]!="*" and (new[dp]!="/" and (dp!=s2-1):
dp=dp+1
if(dp==s2-1):
dp=dp+1
ot=int(new[dm+1:d])-int(new[d+1:dp])
new=new.replace(new[dm+1:dp], str(ot))
t=1
if(t==1):
i2=999999
t=0
i2=i2+1
print(new)
а если я задам задачку решит кто нить? а то я сам ни асилил
есть таблица select
с такой вот структурой
id (int[11]) auto_increment
kto (int[11])
komy (int[11])
msg (text)
это чёто типо перписки ну так скажем ролевая (ну думаю знаешь чё это)
мне нужно вывести переписку то есть все сообщения которые были написаны
kto = 1
komy = 2
и вывести это
юзеру в порядке
[я] - сообщение
[другой юзер] - сообщение у мну не получилось походу я тупой ((((
$while = mysql_query("SELECT * FROM `select` WHERE `komu` = 'ид' or `ot` = 'ид'"
while($msg = mysql_fetch_array($while));
if($msg[kto]=="ид"{
echo "Я >> $msg[komu]";
}else{
echo "OT: $msg[kto]";
}
echo"<br/>$msg[msg]";
}
ну python тоже,но надо через строковой массив решить
Это развитие логики))прежде чем так говорить ты должен разобраться сам в этом))
RGame, как-нибудь попробуй,но возни видимо не на один час).