برنامه ای بنویسید که عبارت میانوندی را به پسوندی تبدیل کند
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
//moshakhas konanndeye meghdare poshte
#define size 20
char stack[size];
int top=0,ele;
void push();
char pop();
int isempty();
int isfull();
char infix[30],PostFix[30];
int prec(char);
//tabea baraye gharar dadane amalgar dar poshte
void push(int ele)
{
stack[top]=ele;
top++;
}
//method baraye baddashtan az poshte
char pop()
{
top--;
return(stack[top]);
}
//method baraye moshakhkhas kardane olaviyate amalgarha
int prec(char symbol)
{
if(symbol== '(')
return 0;
if(symbol== ')')
return 0;
if(symbol=='+' || symbol=='-')
return 1;
if(symbol=='*' || symbol=='/')
return 2;
if(symbol=='^')
return 3;
return 0;
}
void main()
{
int i=0,j=0,k=0,length;
char temp;
printf("\nEnter an infix expression:");
scanf("%s",infix);
length=strlen(infix);
for(i=0;i
//agar amalgar nist be postfix an ra ezafe kon
if(infix[i]!='+' && infix[i]!='-' && infix[i]!='*' && infix[i]!='/' && infix[i]!='^' && infix[i]!=')' && infix[i]!='(' )
PostFix[j++]=infix[i];
//agar amalgar ast dastorate zir ra anjam bede
else
{
if(top==0) //agar poshte khali ast be ebtedaye poshte ezafe va top ra afzayesh bede
push(infix[i]);
else
{
//agar charachter ( ya ) nist olaviyate an ra check kon
if(infix[i]!=')' && infix[i]!='(')
{
//agar olaviyate char feali az ghabli payeen ta ast
//masalan alan + ghabli * ast * ra bardar be postfiz ezafe kon va baed + ra be stack ezafe kon
if( prec(infix[i]) <= prec(stack[top-1]) )
{
temp=pop();
PostFix[j++]=temp;
push(infix[i]);
}
//dar gheyre insorate charachter ra be stack ezafe kon
else
push(infix[i]);
}
else
{
//agar ( ast pas bayad be poshte ezafe shavad
if(infix[i]=='(')
push(infix[i]);
//agar ) ast bayad ta residan be ( az poshte bardashte shavad va be postfix ezafe shavad
if(infix[i]==')')
{
temp=pop();
while(temp!='(')
{
PostFix[j++]=temp;
temp=pop();
}
}
}
}
}
}
//ta zamani ke poshte khali nashode ast tak tak anasor ra az ebtedaye poshte bardar va
//be arraye postfix ezafe kon
while(top!=0)
PostFix[j++]=pop();
printf("the Postfix expression is: %s\n",PostFix);
getch();
}