rezasheshbolooki
چهارشنبه 25 آبان 1390, 10:34 صبح
با سلام. من دوتا سوال داشتم.
1- عبارت میانوندی با پرانتز از کاربر گرفته و پیشوندی و پسوندی را در دوخط چاپ نتیچه فاقد پرانتز.
2- یک عبارت پیشوندی فاقد پرانتز گرفته به پسوندی تبدیل کند
2تا فایل هم میزارم که یکیشون تمام کارهارو انجام میده و یکیشون فقط یکی از تبدیل هارو انجام میده!
با تشکر فراوان.
// the program is used to convert a infix expression to a postfix expression
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
const int size =50;
char infix[size],postfix[size],stack[size];
int top=-1;
int precedence(char ch); // function to get the precedence of the operator
char pop(); //function to pop an element from the stack
char topelement(); // returns the top element of the stack
void push(char ch); // pushes an element into the stack
int main()
{
char ele,elem,st[2];
int prep,pre,popped,j=0,chk=0;
strcpy(postfix," ");
gets(infix);
for(int i=0;infix[i]!=0;i++)
{
if(infix[i]!='('&&infix[i]!=')'&&infix[i]!='^'&&infix[i]!='*'&&infix[i]!='/'&&infix[i]!='+'&&infix[i]!='-')
postfix[j++]=infix[i];
else if(infix[i]=='(')
{
elem=infix[i];
push(elem);
}
else if(infix[i]==')')
{
while(popped=pop() != '(')
postfix[j++]=popped;
}
else
{
elem=infix[i];
pre=precedence(elem);//stores the precedence of operator coming frm infix
ele=topelement();
prep=precedence(ele);//stores the precedence of operator at the top of the stack
if(pre > prep)
push(elem);
else
{
while(prep >= pre)
{
if(ele=='#')
break;
popped=pop();
ele=topelement();
postfix[j++]=popped;
prep=precedence(ele);
}
push(elem);
}
}
}
while((popped=pop())!='#')
postfix[j++]=popped;
postfix[j]='\0';
cout<<"\n post fix :"<<postfix<<endl;
system("pause");
return 0;
}
int precedence(char ch)
{
switch(ch)
{
case '^' : return 5;
case '/' : return 4;
case '*' : return 4;
case '+' : return 3;
case '-' : return 3;
default : return 0;
}
}
char pop() //function to pop the element from the stack
{
char ret;
if(top!=-1)
{ ret =stack[top];
top--;
return ret;
}
else
return '#';
}
char topelement() // function to return top element from the stack without popping
{
char ch;
if(top!=-1)
ch=stack[top];
else
ch='#';
return ch;
}
void push(char ch) // function to push an element in the stack
{
if(top!=size-1)
{
top++;
stack[top]= ch;
}
}
__________________________________________________ __________________________________________________ _____________
// the program is used to convert a infix expression to a perfix expression and infix expression to a postfix expression and perfix expression to a infix expression.
//in barname baraye tabdile ebarate mian vandi be pishvandi va pasvandi va pishvandi be mianvandi neveshte shode ast.
#include<iostream.h>
void intoper();
void intopost();
void pertoin();
void main()
{
while(1)
{
cout<<"\n\n 1- infix be perfix \t 2- infix be postfix" ;
cout<<"\n\n 3- perfix be infix 4- exit\n\n" ;
cout<<" gozineh morede nazar? : ";
int y;
cin>>y;
switch(y) // switch baraye gozine entekhab shode
{
case 1:
intoper();
break;
case 2:
intopost();
break;
case 3:
pertoin();
break;
}
if(y>=4)break;
}
}
void intoper()
{
char q[40]={0};
char p[40]={0};
char s[40]={0};
char r[40]={0};
int cq=0,cp=0,cs=0,j,i,n,k=0;
cout<<"\n\t enter infix expression:";
cin>>q;
for(i=0;i<40;i++)
{
if(q[i]==0)
{
break;
}
}
n=i;
s[cs]=41;
cs++;
for(i=n;i>=0;i--)
{
q[i+1]=q[i];
}
q[cq]=40;
cq++;
for(i=0;i<=n;i++)
{
cout<<q[i];
}
cout<<"\n";
for(j=n;j>=0;j--)
{
if((q[j]>=65 && q[j]<=90) || (q[j]>=97 && q[j]<=122))
{
p[cp]=q[j];
cp++;
}
if(q[j]==41)
{
s[cs]=q[j];
cs++;
k++;
}
if(q[j]==42 || q[j]==43 || q[j]==45 || q[j]==47)
{
for(;1;)
{
if(q[j]==43 || q[j]==45)
{
if(s[cs-1]==42 || s[cs-1]==47 || s[cs-1]==43 || s[cs-1]==45)
{
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
else
{
s[cs]=q[j];
cs++;
break;
}
}
else if(q[j]==42 || q[j]==47)
{
if(s[cs-1]==42 || s[cs-1]==47)
{
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
else
{
s[cs]=q[j];
cs++;
break;
}
}
}
}
if(q[j]==40)
{
k++;
for(;1;)
{
if(s[cs-1]==41)break;
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
s[cs]=0;
cs--;
}
for(i=0;i<=n;i++)
{
cout<<s[i];
}
cout<<"\n";
for(i=n;i>=0;i--)
{
cout<<p[i];
}
cout<<"\n\n";
}
cout<<"\n\n";
for(i=n,j=0;i>=0;j++,i--)
{
r[j]=p[i];
cout<<p[i];
}
cout<<"\n";
for(i=k;i<40;i++)
{
r[i-k]=r[i];
}
cout<<"\n natije:\n\t";
for(i=0;i<40;i++)
{
cout<<r[i];
}
cout<<"\n";
};
void intopost()
{
char q[50]={0};
char p[50]={0};
char s[50]={0};
int cs=0,cp=0,cq=0,j,i,n;
cout<<"\n\t enter infix expression: ";
cin>>q;
for(i=0;i<50;i++)
{
if(q[i]==0)
{
n=i;
break;
}
}
n=i;
q[i]=41;
for(i=0;i<50;i++)
{
cout<<q[i];
}
cout<<"\n";
s[cs]=40;
cs++;
for(j=0;j<=n;j++)
{
if((q[j]>=65 && q[j]<=90) || (q[j]>=97 && q[j]<=122))
{
p[cp]=q[j];
cp++;
}
if(q[j]==40)
{
s[cs]=q[j];
cs++;
}
if(q[j]==42 || q[j]==43 || q[j]==45 || q[j]==47)
{
for(;1;)
{
if(q[j]==43 || q[j]==45)
{
if(s[cs-1]==42 || s[cs-1]==47 || s[cs-1]==43 || s[cs-1]==45)
{
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
else
{
s[cs]=q[j];
cs++;
break;
}
}
else if(q[j]==42 || q[j]==47)
{
if(s[cs-1]==42 || s[cs-1]==47)
{
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
else
{
s[cs]=q[j];
cs++;
break;
}
}
}
}
if(q[j]==41)
{
for(;1;)
{
if(s[cs-1]==40)break;
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
if(s[cs]=40)
{
s[cs]=0;
cs--;
}
}
for(i=0;i<=n;i++)
{
cout<<s[i];
}
cout<<"\n";
for(i=0;i<=n;i++)
{
cout<<p[i];
}
cout<<"\n\n";
}
cout<<"\n natije: \n\t";
for(i=0;i<20;i++)
{
cout<<p[i];
}
cout<<"\n";
}
struct str
{
char s[45];
};
str a[45];
void pertoin()
{
char q[45]={0};
char p[45]={0};
char r[45]={0};
int cs=0,cq=0,cr=0,ca=0,i,j,k,l,n,m;
cout<<"\n\t enter prefix expression:";
cin>>q;
for(i=0;i<45;i++)
{
if(q[i]==0)
{
n=i;
break;
}
}
n=i-1;
for(j=n;j>=0;j--)
{
cr=0;
for(i=0;i<45;i++)
{
r[i]=0;
}
if((q[j]>=65 && q[j]<=90) || (q[j]>=97 && q[j]<=122))
{
a[ca].s[cs]=q[j];
ca++;
}
if((j==n-1)&&(q[j]==42 || q[j]==43 || q[j]==45 || q[j]==47))
{
for(i=0;i<45;i++)
{
if(a[ca-1].s[i]==0)
{
k=i;
break;
}
}
r[cr]=q[j];
for(i=0;i<k;i++)
{
r[i+1]=a[ca-1].s[i];
}
for(i=0;i<45;i++)
{
a[ca-1].s[i]=0;
}
ca--;
for(i=0;i<k+1;i++)
{
a[ca].s[i]=r[i];
}
ca++;
}
else if(q[j]==42 || q[j]==43 || q[j]==45 || q[j]==47)
{
for(i=0;i<45;i++)
{
if(a[ca-1].s[i]==0)
{
k=i;
break;
}
}
for(i=0;i<45;i++)
{
if(a[ca-2].s[i]==0)
{
l=i;
break;
}
}
r[0]=40;
for(i=0;i<k;i++)
{
r[i+1]=a[ca-1].s[i];
}
r[k+1]=q[j];
for(i=0;i<l;i++)
{
r[i+k+2]=a[ca-2].s[i];
}
r[l+k+2]=41;
for(i=0;i<45;i++)
{
a[ca-1].s[i]=0;
a[ca-2].s[i]=0;
}
ca=ca-2;
for(i=0;i<k+l+3;i++)
{
a[ca].s[i]=r[i];
}
ca++;
}
for(i=0;i<n*2;i++)
{
cout<<a[i].s<<"\n";
}
cout<<"\n=========================\n";
for(i=0;i<45;i++)
{
cout<<r[i];
}
cout<<"\n=========================\n";
}
for(i=0;i<n;i++)
{
if(a[i].s[i]==0)
{
m=i;
break;
}
}
m=i-1;
if(m>0)
{
for(j=m;j>0;j--)
{
for(i=0;i<n;i++)
{
if(a[ca-1].s[i]==0)
{
k=i;
break;
}
}
for(i=0;i<n;i++)
{
if(a[ca-2].s[i]==0)
{
l=i;
break;
}
}
for(i=0;i<l;i++)
{
r[i]=a[ca-2].s[i];
}
for(i=0;i<k;i++)
{
r[i+l]=a[ca-1].s[i];
}
for(i=0;i<n;i++)
{
a[ca-1].s[i]=0;
a[ca-2].s[i]=0;
}
ca=ca-2;
for(i=0;i<k+l;i++)
{
a[ca].s[i]=r[i];
}
ca++;
for(i=0;i<n;i++)
{
cout<<a[i].s<<"\n";
}
cout<<"\n=========================\n";
for(i=0;i<n;i++)
{
cout<<r[i];}
cout<<"\n=========================\n";}}
cout<<"\n";
for(i=0;i<3;i++)
{
for(j=n;j>=0;j--)
{
cout<<a[i].s[j];
}
cout<<"\n";
}
}
1- عبارت میانوندی با پرانتز از کاربر گرفته و پیشوندی و پسوندی را در دوخط چاپ نتیچه فاقد پرانتز.
2- یک عبارت پیشوندی فاقد پرانتز گرفته به پسوندی تبدیل کند
2تا فایل هم میزارم که یکیشون تمام کارهارو انجام میده و یکیشون فقط یکی از تبدیل هارو انجام میده!
با تشکر فراوان.
// the program is used to convert a infix expression to a postfix expression
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
const int size =50;
char infix[size],postfix[size],stack[size];
int top=-1;
int precedence(char ch); // function to get the precedence of the operator
char pop(); //function to pop an element from the stack
char topelement(); // returns the top element of the stack
void push(char ch); // pushes an element into the stack
int main()
{
char ele,elem,st[2];
int prep,pre,popped,j=0,chk=0;
strcpy(postfix," ");
gets(infix);
for(int i=0;infix[i]!=0;i++)
{
if(infix[i]!='('&&infix[i]!=')'&&infix[i]!='^'&&infix[i]!='*'&&infix[i]!='/'&&infix[i]!='+'&&infix[i]!='-')
postfix[j++]=infix[i];
else if(infix[i]=='(')
{
elem=infix[i];
push(elem);
}
else if(infix[i]==')')
{
while(popped=pop() != '(')
postfix[j++]=popped;
}
else
{
elem=infix[i];
pre=precedence(elem);//stores the precedence of operator coming frm infix
ele=topelement();
prep=precedence(ele);//stores the precedence of operator at the top of the stack
if(pre > prep)
push(elem);
else
{
while(prep >= pre)
{
if(ele=='#')
break;
popped=pop();
ele=topelement();
postfix[j++]=popped;
prep=precedence(ele);
}
push(elem);
}
}
}
while((popped=pop())!='#')
postfix[j++]=popped;
postfix[j]='\0';
cout<<"\n post fix :"<<postfix<<endl;
system("pause");
return 0;
}
int precedence(char ch)
{
switch(ch)
{
case '^' : return 5;
case '/' : return 4;
case '*' : return 4;
case '+' : return 3;
case '-' : return 3;
default : return 0;
}
}
char pop() //function to pop the element from the stack
{
char ret;
if(top!=-1)
{ ret =stack[top];
top--;
return ret;
}
else
return '#';
}
char topelement() // function to return top element from the stack without popping
{
char ch;
if(top!=-1)
ch=stack[top];
else
ch='#';
return ch;
}
void push(char ch) // function to push an element in the stack
{
if(top!=size-1)
{
top++;
stack[top]= ch;
}
}
__________________________________________________ __________________________________________________ _____________
// the program is used to convert a infix expression to a perfix expression and infix expression to a postfix expression and perfix expression to a infix expression.
//in barname baraye tabdile ebarate mian vandi be pishvandi va pasvandi va pishvandi be mianvandi neveshte shode ast.
#include<iostream.h>
void intoper();
void intopost();
void pertoin();
void main()
{
while(1)
{
cout<<"\n\n 1- infix be perfix \t 2- infix be postfix" ;
cout<<"\n\n 3- perfix be infix 4- exit\n\n" ;
cout<<" gozineh morede nazar? : ";
int y;
cin>>y;
switch(y) // switch baraye gozine entekhab shode
{
case 1:
intoper();
break;
case 2:
intopost();
break;
case 3:
pertoin();
break;
}
if(y>=4)break;
}
}
void intoper()
{
char q[40]={0};
char p[40]={0};
char s[40]={0};
char r[40]={0};
int cq=0,cp=0,cs=0,j,i,n,k=0;
cout<<"\n\t enter infix expression:";
cin>>q;
for(i=0;i<40;i++)
{
if(q[i]==0)
{
break;
}
}
n=i;
s[cs]=41;
cs++;
for(i=n;i>=0;i--)
{
q[i+1]=q[i];
}
q[cq]=40;
cq++;
for(i=0;i<=n;i++)
{
cout<<q[i];
}
cout<<"\n";
for(j=n;j>=0;j--)
{
if((q[j]>=65 && q[j]<=90) || (q[j]>=97 && q[j]<=122))
{
p[cp]=q[j];
cp++;
}
if(q[j]==41)
{
s[cs]=q[j];
cs++;
k++;
}
if(q[j]==42 || q[j]==43 || q[j]==45 || q[j]==47)
{
for(;1;)
{
if(q[j]==43 || q[j]==45)
{
if(s[cs-1]==42 || s[cs-1]==47 || s[cs-1]==43 || s[cs-1]==45)
{
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
else
{
s[cs]=q[j];
cs++;
break;
}
}
else if(q[j]==42 || q[j]==47)
{
if(s[cs-1]==42 || s[cs-1]==47)
{
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
else
{
s[cs]=q[j];
cs++;
break;
}
}
}
}
if(q[j]==40)
{
k++;
for(;1;)
{
if(s[cs-1]==41)break;
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
s[cs]=0;
cs--;
}
for(i=0;i<=n;i++)
{
cout<<s[i];
}
cout<<"\n";
for(i=n;i>=0;i--)
{
cout<<p[i];
}
cout<<"\n\n";
}
cout<<"\n\n";
for(i=n,j=0;i>=0;j++,i--)
{
r[j]=p[i];
cout<<p[i];
}
cout<<"\n";
for(i=k;i<40;i++)
{
r[i-k]=r[i];
}
cout<<"\n natije:\n\t";
for(i=0;i<40;i++)
{
cout<<r[i];
}
cout<<"\n";
};
void intopost()
{
char q[50]={0};
char p[50]={0};
char s[50]={0};
int cs=0,cp=0,cq=0,j,i,n;
cout<<"\n\t enter infix expression: ";
cin>>q;
for(i=0;i<50;i++)
{
if(q[i]==0)
{
n=i;
break;
}
}
n=i;
q[i]=41;
for(i=0;i<50;i++)
{
cout<<q[i];
}
cout<<"\n";
s[cs]=40;
cs++;
for(j=0;j<=n;j++)
{
if((q[j]>=65 && q[j]<=90) || (q[j]>=97 && q[j]<=122))
{
p[cp]=q[j];
cp++;
}
if(q[j]==40)
{
s[cs]=q[j];
cs++;
}
if(q[j]==42 || q[j]==43 || q[j]==45 || q[j]==47)
{
for(;1;)
{
if(q[j]==43 || q[j]==45)
{
if(s[cs-1]==42 || s[cs-1]==47 || s[cs-1]==43 || s[cs-1]==45)
{
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
else
{
s[cs]=q[j];
cs++;
break;
}
}
else if(q[j]==42 || q[j]==47)
{
if(s[cs-1]==42 || s[cs-1]==47)
{
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
else
{
s[cs]=q[j];
cs++;
break;
}
}
}
}
if(q[j]==41)
{
for(;1;)
{
if(s[cs-1]==40)break;
p[cp]=s[cs-1];
s[cs]=0;
cs--;
cp++;
}
if(s[cs]=40)
{
s[cs]=0;
cs--;
}
}
for(i=0;i<=n;i++)
{
cout<<s[i];
}
cout<<"\n";
for(i=0;i<=n;i++)
{
cout<<p[i];
}
cout<<"\n\n";
}
cout<<"\n natije: \n\t";
for(i=0;i<20;i++)
{
cout<<p[i];
}
cout<<"\n";
}
struct str
{
char s[45];
};
str a[45];
void pertoin()
{
char q[45]={0};
char p[45]={0};
char r[45]={0};
int cs=0,cq=0,cr=0,ca=0,i,j,k,l,n,m;
cout<<"\n\t enter prefix expression:";
cin>>q;
for(i=0;i<45;i++)
{
if(q[i]==0)
{
n=i;
break;
}
}
n=i-1;
for(j=n;j>=0;j--)
{
cr=0;
for(i=0;i<45;i++)
{
r[i]=0;
}
if((q[j]>=65 && q[j]<=90) || (q[j]>=97 && q[j]<=122))
{
a[ca].s[cs]=q[j];
ca++;
}
if((j==n-1)&&(q[j]==42 || q[j]==43 || q[j]==45 || q[j]==47))
{
for(i=0;i<45;i++)
{
if(a[ca-1].s[i]==0)
{
k=i;
break;
}
}
r[cr]=q[j];
for(i=0;i<k;i++)
{
r[i+1]=a[ca-1].s[i];
}
for(i=0;i<45;i++)
{
a[ca-1].s[i]=0;
}
ca--;
for(i=0;i<k+1;i++)
{
a[ca].s[i]=r[i];
}
ca++;
}
else if(q[j]==42 || q[j]==43 || q[j]==45 || q[j]==47)
{
for(i=0;i<45;i++)
{
if(a[ca-1].s[i]==0)
{
k=i;
break;
}
}
for(i=0;i<45;i++)
{
if(a[ca-2].s[i]==0)
{
l=i;
break;
}
}
r[0]=40;
for(i=0;i<k;i++)
{
r[i+1]=a[ca-1].s[i];
}
r[k+1]=q[j];
for(i=0;i<l;i++)
{
r[i+k+2]=a[ca-2].s[i];
}
r[l+k+2]=41;
for(i=0;i<45;i++)
{
a[ca-1].s[i]=0;
a[ca-2].s[i]=0;
}
ca=ca-2;
for(i=0;i<k+l+3;i++)
{
a[ca].s[i]=r[i];
}
ca++;
}
for(i=0;i<n*2;i++)
{
cout<<a[i].s<<"\n";
}
cout<<"\n=========================\n";
for(i=0;i<45;i++)
{
cout<<r[i];
}
cout<<"\n=========================\n";
}
for(i=0;i<n;i++)
{
if(a[i].s[i]==0)
{
m=i;
break;
}
}
m=i-1;
if(m>0)
{
for(j=m;j>0;j--)
{
for(i=0;i<n;i++)
{
if(a[ca-1].s[i]==0)
{
k=i;
break;
}
}
for(i=0;i<n;i++)
{
if(a[ca-2].s[i]==0)
{
l=i;
break;
}
}
for(i=0;i<l;i++)
{
r[i]=a[ca-2].s[i];
}
for(i=0;i<k;i++)
{
r[i+l]=a[ca-1].s[i];
}
for(i=0;i<n;i++)
{
a[ca-1].s[i]=0;
a[ca-2].s[i]=0;
}
ca=ca-2;
for(i=0;i<k+l;i++)
{
a[ca].s[i]=r[i];
}
ca++;
for(i=0;i<n;i++)
{
cout<<a[i].s<<"\n";
}
cout<<"\n=========================\n";
for(i=0;i<n;i++)
{
cout<<r[i];}
cout<<"\n=========================\n";}}
cout<<"\n";
for(i=0;i<3;i++)
{
for(j=n;j>=0;j--)
{
cout<<a[i].s[j];
}
cout<<"\n";
}
}