PDA

View Full Version : سوال: تبديل infix به postfix



aaatishpare
شنبه 21 اردیبهشت 1387, 18:30 عصر
سلام دوستان.
1استك را با آرايه پياده سازي كنيم كه:
infix را به postfix تبديل كند بصورتي كه تابع هاي زير در آن بكار رفته باشد:

int/bool is empty( )
void push(int)
int pop( )
int top stack( )
int/bool is full( )
precedence( ).
چي كار كنم؟
كسي بلده كمك كنه؟
با تشكر.

H4i0 ACP
چهارشنبه 25 اردیبهشت 1387, 23:20 عصر
سلام دوست عزیز
نمی دونم دقیقا کا می کنه یا نه :


//this program can convert INFIX , POSTFIX ,PREFIX to each other
#include<iostream.h>
#include<conio.h>
#include<string.h>
//using namespace std;
//******************************
struct sstack{
char str1[100];
};

//*******************************
class stk {
private :
//sstack buf[100];
char buf[100]; char t;
int top;
public :
stk(){
top=-1;
}
int push(char);
char pop();
char topElement();
int empty();
//friend int prec(char);
//friend char in2post(char);
};

//*********************************************
//***> push the current character to stack <***
//*********************************************
int stk :: push (char ch){
top++;
buf[top]=ch;
buf[top+1]=NULL;
//strcat(buf[top].str1,ch);
//l=strlen(buf[top].str1);
//buf[top].str1[l]=ch;
return 1;
}
//***********************************
char stk :: pop(){

top--;
/*if (top<-1){
top= -1;
}*/
t=buf[top+1];
buf[top+1]=NULL;
// return buf[top+1];
return t;
}
//***********************************
char stk :: topElement(){
return buf[top];
}
//***********************************
int stk :: empty(){
if (top==-1)
return 1;
else
return 0;
}
//*************************
int prec(char a){
if(a=='*'|| a== '/' || a=='%'){
return 2;
}else if (a=='+' || a=='-')
return 1;
else
return 0;
}
//************************************************** *****
//*****> take an infix srting and return postfix <*******
//************************************************** *****
char* in2post(char* s,char* s2){
stk stk1;
//char post[100]={0};
char temp;
int l;
for (int i=0;s[i];i++){
switch (s[i]){
case '(': stk1.push(s[i]);break;
case '*':
case '/':
case '%':
case '+':
case '-':
if(stk1.empty() || prec(stk1.topElement())<prec(s[i]) ){
stk1.push(s[i]);
}else{
while( !stk1.empty() && stk1.topElement()>prec(s[i]) ){
//cout<<stk1.pop();
l=strlen(s2);
s2[l]=stk1.pop();
s2[l+1]=NULL;
//strcat(s2,stk1.pop());
}
stk1.push(s[i]);
}
break;
case ')':
while (stk1.topElement()!='('){
//cout<<stk1.pop();
l=strlen(s2);
s2[l]=stk1.pop();
s2[l+1]=NULL;
//strcat(s2,stk1.pop());

}
stk1.pop();
break;
default://cout<<s[i];
l=strlen(s2);
s2[l]=s[i];
s2[l+1]=NULL;
//strcat(s2.s[i]);
break;
}
}
while(!stk1.empty()){
//cout<<stk1.pop();
l=strlen(s2);
s2[l]=stk1.pop();
s2[l+1]=NULL;
//strcat(s2,stk1.pop());
}
return s2;
}
//************************************************** *****
//*****>take an infix string and convert to prefix <*****
//************************************************** *****
char* in2pre(char* s,char* s2){
stk stk1;
int l;
for (int i=strlen(s)-1;i>=0;i--){
switch (s[i]){
case ')': stk1.push(s[i]);break;
case '*':
case '/':
case '%':
case '+':
case '-':
if(stk1.empty() || prec(stk1.topElement())<=prec(s[i]) ){
stk1.push(s[i]);
}else
{
while( !stk1.empty() && stk1.topElement()>prec(s[i]) ){
//cout<<stk1.pop();
l=strlen(s2);
s2[l]=stk1.pop();
s2[l+1]=NULL;
}
stk1.push(s[i]);
}
break;
case '(':
while (stk1.topElement()!=')'){
//cout<<stk1.pop();
l=strlen(s2);
s2[l]=stk1.pop();
s2[l+1]=NULL;
}
stk1.pop();
break;
default://cout<<s[i];
l=strlen(s2);
s2[l]=s[i];
s2[l+1]=NULL;

}
}

while(!stk1.empty()) {
//cout<<stk1.pop();
l=strlen(s2);
s2[l]=stk1.pop();
s2[l+1]=NULL;
}
return s2;
}
//***********************************
/*char* post2in(char s,char s2){
strucstack t1;
char op[2]="( ",cp[2]=" )",tmpstk[100],temp[100];
for (int i=0;s[i];i++){
switch (s[i]){
case '*':
case '/':
case '%':
case '+':
case '-': strcat(tmpstk,op);


default : stk1.push(s[i]);
break;
}
}
} */
//***********************************
int main(){
clrscr();
char s1[100],s2[100];
s2[0]=NULL;
char s3[100]="((a/(b-2))*2)+(b+(a*c))";
int i;
//char s3[100]="a*(b+c)";
cout<<"\nEnter Infix string :\n";
cin>>s1;
cout<<"\npostfix srting is :\n";
in2post(s1,s2);
for( i=0;s2[i];i++){
cout<<s2[i];
}
cout<<"\nprefix srting is :\n";
s2[0]=NULL;
in2pre(s1,s2);
for(i=strlen(s2);i>=0;i--){
cout<<s2[i];
}
getch();
return 0;
}

aaatishpare
جمعه 27 اردیبهشت 1387, 12:54 عصر
سلام. ممنون عزيزم .من اجراش كردم اما 1 errorو 1 warning داره.
ميشه درستش كرد؟
Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
C:\Documents and Settings\user\Desktop\Cpp1.cpp(79) : warning C4101: 'temp' : unreferenced local variable
C:\Documents and Settings\user\Desktop\Cpp1.cpp(202) : error C2065: 'clrscr' : undeclared identifier
Error executing cl.exe.

Cpp1.exe - 1 error(s), 1 warning(s

emad_67
جمعه 27 اردیبهشت 1387, 13:08 عصر
کد رو بررسی نکردم ولی از توی اگه توی visual برانامه رو اجرا کردی، تابع clrscr توی این محیط وجود نداره.
http://barnamenevis.org/forum/showthread.php?t=92264

این تابعی هست که برای تبدیل infix به postfix نوشتم:


char *postfix(char *str) // convert infix to postfix
{
int i=0;
char *s=str;
char *s2=new char[strlen(str)+1];
Stack<char> st;

for(;*s!='\0';s++)
{
if(IsOprand(*s)) // check for oprand
s2[i++]=*s;

else if(*s==')')
{
for(char ch=st.pop();ch!='(';ch=st.pop())
s2[i++]=ch;
}
else // else *s is a operator
{
if(!st.IsEmpty())
{
char c=st.pop();
if(*s=='(')
{
st.push(c);
st.push(*s);
}
else if(o(*s)<=o(c))
{
s2[i++]=c;
st.push(*s);
}
else
{
st.push(c);
st.push(*s);
}
}
else
st.push(*s);

}
}
while(!st.IsEmpty())
{
s2[i++]=st.pop();
}
s2[i]='\0';
return s2;
}
همه عملیات هم در قالب رشته انجام میشه و اولویت پرانتز هم درش لحاظ شده. stack هم کلاسی هست که در برنامه نوشتم .

aaatishpare
شنبه 28 اردیبهشت 1387, 08:49 صبح
سلام.
اين 18 error داره.

emad_67
شنبه 28 اردیبهشت 1387, 13:24 عصر
سلام.
اين 18 error داره.دوست من، من فقط تابع برنامه رو برات قرار دادم، کل برنامه رو نذاشتم که.
این کل برنامه:
این هدر فایل Stack.h هست که به برنامه اضافه شده:


template<class T>
class Stack
{
public:
Stack(int=30);
~Stack();
T pop();
void push(T);
int size();
bool IsEmpty();
private:
int top;
T *a;
};
template<class T>
Stack<T>::Stack(int n)
{
a=new T[n];
top=-1;
}
template<class T>
Stack<T>::~Stack()
{
delete []a;
}
template<class T>
T Stack<T>::pop()
{
if(top>-1)
return a[top--];
return 0;
}
template<class T>
void Stack<T>::push(T arg)
{
a[++top]=arg;
}
template<class T>
int Stack<T>::size()
{
return top+1;
}
template<class T>
bool Stack<T>::IsEmpty()
{
return (top==-1);
}
اینم خود فایل cpp:


#include<iostream.h>
#include<string.h>
#include"Stack.h"
char *postfix(char *);
bool IsOprand(char);
int priority(char c);
float calculate(char *);
void main()
{
char *pf,s[20];
cout<<"enter infix :";
cin>>s;
pf=postfix(s);
cout<<"PostFix = "<<pf<<endl;
cout<<"answer = "<<calculate(pf)<<endl;
}
char *postfix(char *str) // convert infix to postfix
{
int i=0;
char *s=str;
char *s2=new char[strlen(str)+1];
Stack<char> st;

for(;*s!='\0';s++)
{
if(IsOprand(*s)) // check for oprand
s2[i++]=*s;

else if(*s==')')
{
for(char ch=st.pop();ch!='(';ch=st.pop())
s2[i++]=ch;
}
else // else *s is a operator
{
if(!st.IsEmpty())
{
char c=st.pop();
if(*s=='(')
{
st.push(c);
st.push(*s);
}
else if(priority(*s)<=priority(c))
{
s2[i++]=c;
st.push(*s);
}
else
{
st.push(c);
st.push(*s);
}
}
else
st.push(*s);

}
}
while(!st.IsEmpty())
{
s2[i++]=st.pop();
}
s2[i]='\0';
return s2;
}
bool IsOprand(char ch)
{
return (ch>='0' && ch<='9');
}
int priority(char c)
{
switch(c)
{
case '*':
case '/':
case '%':
return 2;
case '+':
case '-':
return 1;
case '(':
return 0;
}
}
float calculate(char *s) // calculate a postfix
{
Stack<float> st;
float x,y;
for(;*s;s++)
{
if(IsOprand(*s))
st.push(*s-48);
else
{
x=st.pop();
y=st.pop();
switch(*s)
{
case '*':
st.push(y*x);
break;
case '/':
st.push(y/x);
break;
case '%':
st.push(int(y)%int(x));
break;
case '+':
st.push(y+x);
break;
case '-':
st.push(y-x);
break;
}
}
}
return st.pop();
}

این برنامه برای محاسبه یه عبارت ریاضی با تبدیل به postfix هست که فقط هم برای اعداد 1 رقمی درست جواب میده. الویت پرانتز هم مهمه. ضمنا تو محیط vc++ مشکلی نداره ولی بقیه کامپایلر ها رو نمیدونم.

aaatishpare
یک شنبه 29 اردیبهشت 1387, 08:48 صبح
#include"Stack.h" رو error ميده..........چرا؟
تو vc++ هم نوشتم.
من منظورتون رو نفهميدم از كد بالايي:این هدر فایل Stack.h هست که به برنامه اضافه شده.
الان تو vc++كلا" چي بايد بنويسم.....
من گيج شدم..........خواهش ميكنم كمكم كنيد.

aaatishpare
یک شنبه 29 اردیبهشت 1387, 12:21 عصر
سلام.ممنون
يه برنامه ديگه پيدا كردم كه اجرا ميشه.اما اين توابعي كه خواستم نداره...تازه توضيحشم بلد نيستم.

aaatishpare
یک شنبه 29 اردیبهشت 1387, 12:22 عصر
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#define MAX_STACK_SIZE 100
#define MAX_EXPR_SIZE 100
typedef enum{lparen,rparen,plus,minus,times,divide,mod,eos ,operand}precedence;
int stack[MAX_STACK_SIZE];
precedence postfix_stack[MAX_STACK_SIZE];
int isp[] = {0,19,12,12,13,13,13,0};
int icp[] = {20,19,12,12,13,13,13,0};
char post_expr[MAX_EXPR_SIZE];
char infix_expr[MAX_EXPR_SIZE];
char beep[]={7,0};
precedence get_token_post(char *,int *); // Check postfix token
precedence get_token_infix(char *,int *); // Check infix token
int stack_delete(int *); // Delete from stack
void stack_add(int *,int); // Insert into stack
precedence postfix_stack_delete(int *); // Delete from postfix stack
void stack_add(int *,precedence); // Insert into portfix stack
int eval(); // Evaluate postfix expression value
void postfix(); // Convert infix 2 postfix
void make_postfix_string(char); // Insert a character into postfix expression
char token2str(precedence); // Return char value of a precedence
void main()
{

cout << "Enter Expression :\n\n";
scanf("%s",&infix_expr);
postfix();
cout << "\n\nPostfix expression:\n" << post_expr << "\n\n";
cout << infix_expr << " = " << eval() << beep << beep << beep;
getch();
}
precedence get_token_post(char *symbol,int *n)
{
*symbol = post_expr[(*n)++];
switch(*symbol)
{
case '(' : return lparen;
case ')' : return rparen;
case '+' : return plus;
case '-' : return minus;
case '/' : return divide;
case '*' : return times;
case '%' : return mod;
case '\0' : return eos;
default : return operand;
}
}
precedence get_token_infix(char *symbol,int *n)
{
*symbol = infix_expr[(*n)++];
switch(*symbol)
{
case '(' : return lparen;
case ')' : return rparen;
case '+' : return plus;
case '-' : return minus;
case '/' : return divide;
case '*' : return times;
case '%' : return mod;
case '\0' : return eos;
default : return operand;
}
}
int eval()
{
precedence token;
int temp;
char symbol;
int op1,op2,n=0,top=-1;
token = get_token_post(&symbol, &n);
while(token != eos)
{
if(token == operand)
{
cout << "Enter Value For "<< post_expr[n-1] << ":" << beep;
cin >> temp;
// stack_add(&top,symbol-'0');
stack_add(&top,temp);
}
else
{
op2 = stack_delete(&top);
op1 = stack_delete(&top);
switch(token)
{
case plus: stack_add(&top, op1+op2);
break;
case minus: stack_add(&top, op1-op2);
break;
case times: stack_add(&top, op1*op2);
break;
case divide: stack_add(&top, op1/op2);
break;
case mod: stack_add(&top, op1%op2);
}
}
token = get_token_post(&symbol, &n);
}
cout << "\n";
return stack_delete(&top);
}
void stack_add(int *top,int item)
{
if(*top >= MAX_STACK_SIZE-1)
{
cout << "Stack overflow" << beep;
getch();
exit(0);
}
stack[++*top] = item;
}
int stack_delete(int *top)
{
if(*top == -1)
{
cout << "Stack is empty" << beep;
getch();
exit(0);
}
return stack[(*top)--];
}
void postfix_stack_add(int *top,precedence item)
{
if(*top >= MAX_STACK_SIZE-1)
{
cout << "Stack overflow" << beep;
getch();
exit(0);
}
postfix_stack[++*top] = item;
}
precedence postfix_stack_delete(int *top)
{
if(*top == -1)
{
cout << "Stack is empty" << beep;
getch();
exit(0);
}
return postfix_stack[(*top)--];
}
void postfix()
{
char symbol;
precedence token;
int n=0,top=0;
postfix_stack[0] = eos;
for(int i=0;i<MAX_EXPR_SIZE;i++)
post_expr[i]=0;
for(token = get_token_infix(&symbol, &n);token != eos; token = get_token_infix(&symbol, &n))
{
if(token == operand)
{
make_postfix_string(symbol);
}
else if(token == rparen)
{
while(stack[top] != lparen)
make_postfix_string(token2str(postfix_stack_delete (&top)));
postfix_stack_delete(&top);
}
else
{
while(isp[stack[top]] >= icp[token])
make_postfix_string(token2str(postfix_stack_delete (&top)));
postfix_stack_add(&top, token);
}
}
while((token=postfix_stack_delete(&top)) != eos)
make_postfix_string(token2str(token));
make_postfix_string('\0');
}
void make_postfix_string(char s)
{
int i=0;
while(post_expr[i])
i++;
post_expr[i]=s;
}
char token2str(precedence token)
{
switch(token)
{
case lparen : return '(';
case rparen : return ')';
case plus : return '+';
case minus : return '-';
case divide : return '/';
case times : return '*';
case mod : return '%';
default:
cout << "Invalid Token" << beep;
getch();
}
return('\0');

emad_67
یک شنبه 29 اردیبهشت 1387, 18:08 عصر
#include"Stack.h" رو error ميده..........چرا؟
تو vc++ هم نوشتم.
من منظورتون رو نفهميدم از كد بالايي:این هدر فایل Stack.h هست که به برنامه اضافه شده.
الان تو vc++كلا" چي بايد بنويسم.....
من گيج شدم..........خواهش ميكنم كمكم كنيد.اون قسمتی رو که گفتم برا Stack.h هست رو کپی کن و توی یه فایل به نام Stack.h ذخیره و کنار فایل .cpp قرار بده. این کا رو با نت پد هم میتونی بکنی. وبعدش هم فایل cpp رو کامپایل و اجرا کن.

H4i0 ACP
جمعه 03 خرداد 1387, 03:31 صبح
سلام
اینو ببینید :

aaatishpare
شنبه 08 تیر 1387, 13:04 عصر
infix به postfix
سلام دوستان من كدی دارم میخوام كسی برام توضیح بده.
ممنون.http://www.cloob.com/public//public/images/smiles/16.gif


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#define MAX_STACK_SIZE 100
#define MAX_EXPR_SIZE 100
typedef enum{lparen,rparen,plus,minus,times,divide,mod,eos ,operand}precedence;
int stack[MAX_STACK_SIZE];
precedence postfix_stack[MAX_STACK_SIZE];
int isp[] = {0,19,12,12,13,13,13,0};
int icp[] = {20,19,12,12,13,13,13,0};
char post_expr[MAX_EXPR_SIZE];
char infix_expr[MAX_EXPR_SIZE];
char beep[]={7,0};
precedence get_token_post(char *,int *); // Check postfix token
precedence get_token_infix(char *,int *); // Check infix token
int stack_delete(int *); // Delete from stack
void stack_add(int *,int); // Insert into stack
precedence postfix_stack_delete(int *); // Delete from postfix stack
void stack_add(int *,precedence); // Insert into portfix stack
int eval(); // Evaluate postfix expression value
void postfix(); // Convert infix 2 postfix
void make_postfix_string(char); // Insert a character into postfix expression
char token2str(precedence); // Return char value of a precedence
void main()
{
cout << "Enter Expression :\n\n";
scanf("%s",&infix_expr);
postfix();
cout << "\n\nPostfix expression:\n" << post_expr << "\n\n";
cout << infix_expr << " = " << eval() << beep << beep << beep;
getch();
}
precedence get_token_post(char *symbol,int *n)
{
*symbol = post_expr[(*n)++];
switch(*symbol)
{
case '(' : return lparen;
case ')' : return rparen;
case '+' : return plus;
case '-' : return minus;
case '/' : return divide;
case '*' : return times;
case '%' : return mod;
case '\0' : return eos;
default : return operand;
}
}
precedence get_token_infix(char *symbol,int *n)
{
*symbol = infix_expr[(*n)++];
switch(*symbol)
{
case '(' : return lparen;
case ')' : return rparen;
case '+' : return plus;
case '-' : return minus;
case '/' : return divide;
case '*' : return times;
case '%' : return mod;
case '\0' : return eos;
default : return operand;
}
}
int eval()
{
precedence token;
int temp;
char symbol;
int op1,op2,n=0,top=-1;
token = get_token_post(&symbol, &n);
while(token != eos)
{
if(token == operand)
{
cout << "Enter Value For "<< post_expr[n-1] << ":" << beep;
cin >> temp;
// stack_add(&top,symbol-'0');
stack_add(&top,temp);
}
else
{
op2 = stack_delete(&top);
op1 = stack_delete(&top);
switch(token)
{
case plus: stack_add(&top, op1+op2);
break;
case minus: stack_add(&top, op1-op2);
break;
case times: stack_add(&top, op1*op2);
break;
case divide: stack_add(&top, op1/op2);
break;
case mod: stack_add(&top, op1%op2);
}
}
token = get_token_post(&symbol, &n);
}
cout << "\n";
return stack_delete(&top);
}
void stack_add(int *top,int item)
{
if(*top >= MAX_STACK_SIZE-1)
{
cout << "Stack overflow" << beep;
getch();
exit(0);
}
stack[++*top] = item;
}
int stack_delete(int *top)
{
if(*top == -1)
{
cout << "Stack is empty" << beep;
getch();
exit(0);
}
return stack[(*top)--];
}
void postfix_stack_add(int *top,precedence item)
{
if(*top >= MAX_STACK_SIZE-1)
{
cout << "Stack overflow" << beep;
getch();
exit(0);
}
postfix_stack[++*top] = item;
}
precedence postfix_stack_delete(int *top)
{
if(*top == -1)
{
cout << "Stack is empty" << beep;
getch();
exit(0);
}
return postfix_stack[(*top)--];
}
void postfix()
{
char symbol;
precedence token;
int n=0,top=0;
postfix_stack[0] = eos;
for(int i=0;i<MAX_EXPR_SIZE;i++)
post_expr[i]=0;
for(token = get_token_infix(&symbol, &n);token != eos; token = get_token_infix(&symbol, &n))
{
if(token == operand)
{
make_postfix_string(symbol);
}
else if(token == rparen)
{
while(stack[top] != lparen)
make_postfix_string(token2str(postfix_stack_delete (&top)));
postfix_stack_delete(&top);
}
else
{
while(isp[stack[top]] >= icp[token])
make_postfix_string(token2str(postfix_stack_delete (&top)));
postfix_stack_add(&top, token);
}
}
while((token=postfix_stack_delete(&top)) != eos)
make_postfix_string(token2str(token));
make_postfix_string('\0');
}
void make_postfix_string(char s)
{
int i=0;
while(post_expr[i])
i++;
post_expr[i]=s;
}
char token2str(precedence token)
{
switch(token)
{
case lparen : return '(';
case rparen : return ')';
case plus : return '+';
case minus : return '-';
case divide : return '/';
case times : return '*';
case mod : return '%';
default:
cout << "Invalid Token" << beep;
getch();
}
return('\0');
}

Arash m
شنبه 15 تیر 1387, 23:55 عصر
سلام من قبلا تو درس ساختمان داده برنامه ای نوشته بودم که infix رو از کاربر میگرفت و بعد از تبدیل اون به postfix جواب معادله رو میداد .
اون برنامه رو اینجا گذاشتم:


#include<iostream.h>
#include<stdio.h>
#include<conio.h>


class pushteh{
private:
int arr[50];
int count;
public:
pushteh();
int get_count(){return count;};
void push(int);
int pop();
};
pushteh::pushteh(){
for(int i=0;i<50;i++)
arr[i]=0;
count=0;
}

void pushteh::push(int in){
arr[count]=in;
count++;
}

int pushteh::pop(){
if(count<=0) return '\0';
count--;
return arr[count];

}

void infpst(char *infix,char *postfix){
pushteh my_pushteh;
int counter=0;
char ch;
while(*infix){
switch(*infix){
case '(' : my_pushteh.push('(');
break;
case '+' : my_pushteh.push('+');
break;
case '*' : my_pushteh.push('*');
break;
case '-' : my_pushteh.push('-');
break;
case '/' : my_pushteh.push('/');
break;
case ')' :
do{
ch=my_pushteh.pop();

if(ch!='('){
postfix[counter]=ch;
counter++;}
}while((ch!='(')&&(ch!='\0'));
break;
default:
postfix[counter]=*infix;
counter++;

}
infix++;
}
if(my_pushteh.get_count()>0){
do{
ch=my_pushteh.pop();

if(ch!='('){
postfix[counter]=ch;
counter++;}
}while((ch!='(')&&(ch!='\0'));
}
postfix[counter]='\0';
}

void main(){
clrscr();
pushteh my_pushteh;
int a,b,c,d;
char formol[20],postfix[50],*ptr;
cout<<"please enter a,b,c,d : ";
cin>>a>>b>>c>>d;
cout<<"Please enter formol";
cin>>formol;
infpst(formol,postfix);
cout<<"postfix = "<<postfix<<endl;
ptr=postfix;
while(*ptr){
switch(*ptr){
case 'a' : my_pushteh.push(a);
break;
case 'b' : my_pushteh.push(b);
break;
case 'c' : my_pushteh.push(c);
break;
case 'd' : my_pushteh.push(d);
break;
case '+' : my_pushteh.push(my_pushteh.pop()+my_pushteh.pop()) ;
break;
case '*' : my_pushteh.push(my_pushteh.pop()*my_pushteh.pop()) ;
break;
case '-' : my_pushteh.push(my_pushteh.pop()-my_pushteh.pop());
break;
case '/' : my_pushteh.push(my_pushteh.pop()/my_pushteh.pop());
}
ptr++;
}
cout<<"\n\njavab = "<<my_pushteh.pop();
getch();
}




اگه کد یه کم غیر استاندارد است ببخشید چون موقع نوشتن این برنامه برای تموم کردنش وقت زیادی نداشتم.