PDA

View Full Version : تبدیل infix به postfix و perfix



dada_vahid
شنبه 23 اردیبهشت 1391, 18:31 عصر
با سلام دوستان من تیکه کدی نوشتم که infix رو به post fix تبدیل می کنه حالا میخوام همین وقتی infix رو میدم postfix و perdix رو چاب کنه
دوستان میدونم دارم جسارت میکنم ولی خیلی برام ضروری هستش با تشکر



//tavabe postfix va infix
void infixtopostfix(char* infix,char* postfix)
{
stack-char st;
st.push('#');
int i,j,len;
char x,y;
len=lenght(infix);
j=0;
for(i=0;i<len;i++)
{
x=infix[i];
if(isoperand(x)) //is operand baresi mikonad ke aya x amalvand ast ya na?
{postfix[j]=x;
j++;
}
else//agar amalvand nabud
{if(x=='(') //agar amalgar ya parantez baz bood
{st.push(x);
else if(x==')') //agar parantez baste bood
{
while(st.pop());
postfix[j]=y;
j++;
}
y=st.pop();
}
else
{
while(priority x(x)<priority stack(st.top stack))
{
y=st.pop();
postfix[j]=y;
j++;
}
st.push(x);
}
}//else
}//for
while(st.topstack()!='#')
{
y=st.pop();
postfix[j]=y;
j++;
}
postfix[j]=0;
}

vistacali
شنبه 23 اردیبهشت 1391, 19:47 عصر
الگوریتم در این جا (http://lecom.ugig.ir/viewtopic.php?f=19&t=3) موجود میباشد

dada_vahid
شنبه 23 اردیبهشت 1391, 21:03 عصر
ممنون به شما حق می دم بابت علمی که دارین پول دربیارید ولی ....... زَکوةُ العِلمِ نَشرُهُ؛

vistacali
شنبه 23 اردیبهشت 1391, 21:33 عصر
ابتدا شما عبارت را دریافت کنید
از انتهای عبارت شروع به خواندن عبارت کنید
اگر پرانتز بسته یا عملگر بود ان را در پشته شماره 1 قرار میدهیم
اگر نماد عملوند بود ان را در پشته شماره یک قرار میدهیم
اگر نماد پرانتز باز بود از پشته شماره یک دو مقدار را خارج میکنیم و در پشته شماره 2 قرار میدهیم
نکته! خود پرانتر باز و بسته در پشته شماره 2 قرار نمیگیرند
هنگامی که به انتهای عبارت رسیدیم اگر عنصری در پشته 1 است همه را در پشته 2 قرار میدهیم
پشته شماره 2 را در اخر چاپ میکنیم

این الگوریتم یک ساعت وقت بزار کدنویسی کد اینو بیشتر از 1 ساعت هم وقتت رو نمیگیره