PDA

View Full Version : بررسی متوازن بودن پرانتزها در یک عبارت



marz_hosseiny
پنج شنبه 17 آبان 1386, 13:04 عصر
سلام

کسی میتونه اشکال برنامه ای رو من نوشتم بگیره :متفکر:؟این برنامه یک عبارت (میانوند)را ازورودی دریافت کرده وبا استفاده از پشته بررسی میکنه که ایا ازنظر پرانتزبندی درسته یا نه؟!
به این صورت که بعد از دریافت عبارت شروع به خواندن آن میکند اگر به نماد پرانتز باز رسید آنرا در پشته قرار میدهد اما اگر نماد عملگر یا عملوند بود آنها رارد میکند واگر به نماد پرانتز بسته رسید.یک پرانتز باز رااز پشته حذف میکند.
درآخرهم اگر پشته خالی شده باشد یعنی عبارت متوازن بوده در غیر اینصورت متوازن نبوده!

#include<iostream.h>
#include<conio.h>
#define M 21
class stack{
public:
s();
void push(char);
char pop();
int empty();
int items;
void popAndtest(char &, int &);
void topAndtest(char &, int &);

private:
int mytop;
int topsymbol;
};
stack::s()
{
mytop=-1;
}
void stack::push(char x)
{
items[++mytop]=x;
}
char stack::pop()
{
return items[mytop--];
}
int stack::empty()
{
return (mytop==-1);
}
void stack::popAndtest(char &x,int &underflow)
{
if(empty())
underflow=1;else
{
x=items[mytop--];
underflow=0;
}
}
void stack::topAndtest(char &x,int &underflow)
{
if(empty())
underflow=1;
else
{
x=items[mytop];
underflow=0;
}
}
int main()
{
char infix[M];
char symbol;
int topsymbol=-1;
clrscr();
cout<<"please enter your infix expression:";
cin.get(infix,M);
for(int i=0;infix[i];i++)
{
symbol=infix[i];
if(symbol=='(' && s.empty())
s.push(symbol);
else if(symbol==')')
topsymbol=s.pop();
else if(symbol>='0' &&symbol<='9' ||symbol>='a' && symbol<='z')
symbol++;
}
if(s.empty())
cout<<"your infix expression is blanced.";
else
cout<<"your infix expression isnot blanced.";
getch();
return topsymbol;
}




وسعت هر دلی به اندازه حرفهایی است که برای نگفتن دارد:چشمک:

marz_hosseiny
شنبه 19 آبان 1386, 14:03 عصر
بعلت استقبال زیاد ازاین تاپیک :افسرده:خودم برنامه رو درست کردم!میذارم اینجا هر کسی خواست استفاده کنه.









وسعت هردلی به اندازه حرفهایی است که برای نگفتن دارد!:خجالت:

marz_hosseiny
شنبه 19 آبان 1386, 14:04 عصر
بعلت استقبال زیاد ازاین تاپیک :افسرده:خودم برنامه رو درست کردم!میذارم اینجا هر کسی خواست استفاده کنه.

#include<iostream>
#include<conio.h>
#define M 21
class stack
{
public:
stack ();
void push(char);
char pop();
int empty();

private:
int mytop;
char items[M];
};
stack::stack()
{
mytop=-1;
}
void stack::push(char x)
{
items[++mytop]=x;
}
char stack::pop()
{
return items[mytop--];
}
int stack::empty()
{
return (mytop==-1);
}
int main()
{
char infix[M];
char symbol;

// We need a stack variable here
stack stackObj;

cout << "please enter your infix expression:";
cin.get(infix, M);
for(int i=0;infix[M];i++)
{
symbol=infix[i];
if(symbol=='(' && stackObj.empty())
stackObj.push(symbol=='(');
else if(symbol==')')
stackObj.pop();
else if(symbol>='0' &&symbol<='9' ||symbol>='a' && symbol<='z')
symbol++;
}

if(stackObj.empty())
cout<<"your infix expression is balanced.";
else
cout<<"your infix expression isnot balanced.";
getch();
return 0;
}








وسعت هردلی به اندازه حرفهایی است که برای نگفتن دارد!:خجالت:

marz_hosseiny
شنبه 19 آبان 1386, 14:08 عصر
<P>بعلت استقبال زیاد ازاین تاپیک&nbsp;&nbsp; <IMG id=vB_Editor_001_smilie_42 title=افسرده style="CURSOR: hand" alt=:افسرده: src="http://www.barnamenevis.org/forum/images/smilies/yahoo/121.gif" border=0 unselectable="on" editorid="vB_Editor_001">&nbsp;خودم اشکالات برنامه رو گرفتم&nbsp; میذارم اینجا هر کسی خواست ازش استفاده کنه!</P>
<P>#include&lt;iostream&gt;</P>
<P>#include&lt;conio.h&gt;<BR>#define M 21<BR>class stack<BR>{</P>
<P>public:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack ();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void push(char);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char pop();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int empty();</P>
<P><BR>private:</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int mytop;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char items[M];<BR>};</P>
<P>stack::stack()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mytop=-1;<BR>}</P>
<P>void stack::push(char x)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items[++mytop]=x;<BR>}</P>
<P>char stack::pop()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp; items[mytop--];<BR>}</P>
<P>int stack::empty()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (mytop==-1);<BR>}</P>
<P>int main()<BR>{</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char infix[M];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char symbol;</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // We need a stack variable here<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stack stackObj;</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "please enter your infix expression:";<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cin.get(infix, M);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;infix[M];i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; symbol=infix[i];</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(symbol=='(' &amp;&amp; stackObj.empty())<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stackObj.push(symbol=='(');</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(symbol==')')<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stackObj.pop();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if(symbol&gt;='0' &amp;&amp;symbol&lt;='9' ||symbol&gt;='a' &amp;&amp; symbol&lt;='z')<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; symbol++;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(stackObj.empty())</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"your infix expression is balanced.";</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"your infix expression isnot balanced.";</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getch();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<BR>}<BR></P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>وسعت هر دلی به اندازه حرفهایی است که برای نگفتن دارد!<IMG id=vB_Editor_001_smilie_34 title=تشویق style="CURSOR: hand" alt=:تشویق: src="http://www.barnamenevis.org/forum/images/smilies/yahoo/131.gif" border=0 unselectable="on" editorid="vB_Editor_001"></P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>
<P>&nbsp;</P>

emad_67
شنبه 19 آبان 1386, 16:45 عصر
دوست عزیز چه بلایی سر این تاپیک اوردی؟؟:لبخند: کد Html متن رو کپی کردی چرا؟
اگه میخوای از قبل هم تایپ کنی، تو word بنویس و بعد متنت رو کپی کن تو note pad و بعد از داخل اون کپی کن اینجا که مشکلی پیش نیاد.