صفحه: [1]   پایین
  چاپ صفحه  
نويسنده موضوع: تبديل infix به postfix  (دفعات بازدید: 855 بار)
Yas
کاربر جدید
*

تشكرها : 7
آفلاین آفلاین

تعداد ارسال: 40



ديدن مشخصات
« : 21 مرداد 1389,ساعت 11:27:12 »

با سلام سورس برنامه تبديل عبارت infix‌به postfix را ميخواستم البته خودم با سوييچ نوشتم مي خواستم بدونم با دستور if چطوري ميشه نوشت؟
خارج شده است

يا رب نظر تو برنگردد    برگشتن روزگار سهل است
كیانی
مديريت سايت
*****

تشكرها : 145
آنلاین آنلاین

جنسيت : پسر
تعداد ارسال: 1146


اليس الله بكاف عبده ؟!


ديدن مشخصات WWW
« پاسخ #1 : 21 مرداد 1389,ساعت 11:39:30 »

سلام
کدی که نوشتید رو درج کنید.

یا علی(ع)
خارج شده است

" فقال رب انی لما انزلت الی من خیر فقیر (قصص 24) * اللهم عجل لوليك الفرج"
جستجو | قوانين انجمن | آياپير | مقالات تخصصي  |عضويت درتيم آياپير
Yas
کاربر جدید
*

تشكرها : 7
آفلاین آفلاین

تعداد ارسال: 40



ديدن مشخصات
« پاسخ #2 : 21 مرداد 1389,ساعت 17:57:58 »

کد:
#include<iostream.h>
#include<conio.h>
#include<stack.hpp>
void evaluate(char a[])
{
stack st;
char ch;
for(int i=0;a[i]!='\0' ;i++)
{
switch(a[i])
{
case '+':
ch=st.display();
if(st.empty()==true || ch=='(')
st.push('+');
else
{
cout<<st.pop();
i--;
}
break;
case '-':
ch=st.display();
if(st.empty()==true || ch=='(')
st.push('-');
else
{
cout<<st.pop();
i--;
}
break;
case '*':
ch=st.display();
if(ch=='*' || ch=='/')
{
cout<<st.pop();
i--;
}
else
st.push('*');
break;
  case '/':
ch=st.display();
if(ch=='*' || ch=='/')
{
cout<<st.pop();
i--;
}
else
st.push('/');
break;
  case '(':
st.push('(');
break;
  case ')':
ch=st.pop();
while(ch!='(')
{
cout<<ch;
ch=st.pop();
}
break;
 default:
cout<<a[i];
break;
}
}
while(st.empty()==false)
cout<<st.pop();
}
int main()
{
  char infix[50];
  cout<<"\n"," enter infix string : ";
  cin>>infix;
  evaluate(infix);
  return 0 ;
}
« آخرين ويرايش: 21 مرداد 1389,ساعت 18:00:27 توسط كیانی » خارج شده است

يا رب نظر تو برنگردد    برگشتن روزگار سهل است
آرین
مدیر بازنشسته
*****

تشكرها : 96
آفلاین آفلاین

جنسيت : پسر
تعداد ارسال: 372


هیهات من الذله ...


ديدن مشخصات WWW
« پاسخ #3 : 21 مرداد 1389,ساعت 20:26:07 »

با سلام

کد:
#include <iostream>
#include <string>
#include <stack>
using namespace std;

void Convert(const string & Infix, string & Postfix);
bool IsOperand(char ch);
bool TakesPrecedence(char OperatorA, char OperatorB);

int main(void)
{
char Reply;
do
{
string Infix, Postfix; // local to this loop
cout << "Enter an infix expression (e.g. (a+b)/c^2, with no
spaces):"
<< endl;
cin >> Infix;
Convert(Infix, Postfix);
cout << "The equivalent postfix expression is:" << endl
<< Postfix << endl;
cout << endl << "Do another (y/n)? ";
cin >> Reply;
}
while (tolower(Reply) == 'y');
return 0;
}

/*
Given: ch A character.
Task: To determine whether ch represents an operand (here
understood to be a single letter or digit).
Return: In the function name: true, if ch is an operand, false
otherwise.

*/

bool IsOperand(char ch)
{
if (((ch >= 'a') && (ch <= 'z')) ||
((ch >= 'A') && (ch <= 'Z')) ||
((ch >= '0') && (ch <= '9')))
return true;
else
return false;
}

/* Given:
OperatorA A character representing an operator or
parenthesis.
OperatorB A character representing an operator or
parenthesis.
Task: To determine whether OperatorA takes precedence over OperatorB.

Return: In the function name: true, if OperatorA takes precedence
over OperatorB.
*/
bool TakesPrecedence(char OperatorA, char OperatorB)
{
if (OperatorA == '(')
return false;
else if (OperatorB == '(')
return false;
else if (OperatorB == ')')
return true;
else if ((OperatorA == '^') && (OperatorB == '^'))
return false;
else if (OperatorA == '^')
return true;
else if (OperatorB == '^')
return false;
else if ((OperatorA == '*') || (OperatorA == '/'))
return true;
else if ((OperatorB == '*') || (OperatorB == '/'))
return false;
else
return true;

}

/* Given: Infix A string representing an infix expression (no spaces).
Task: To find the postfix equivalent of this expression.
Return: Postfix A string holding this postfix equivalent.
*/

void Convert(const string & Infix, string & Postfix)
{
stack<char> OperatorStack;
char TopSymbol, Symbol;
int k;
for (k = 0; k < Infix.size(); k++)
{
Symbol = Infix[k];
if (IsOperand(Symbol))
Postfix = Postfix + Symbol;
else
{
while ((! OperatorStack.empty()) &&
(TakesPrecedence(OperatorStack.top(), Symbol)))
{
TopSymbol = OperatorStack.top();
OperatorStack.pop();
Postfix = Postfix + TopSymbol;
}
if ((! OperatorStack.empty()) && (Symbol == ')'))
OperatorStack.pop(); // discard matching (
else
OperatorStack.push(Symbol);
}
}
while (! OperatorStack.empty())
{
TopSymbol = OperatorStack.top();
OperatorStack.pop();
Postfix = Postfix + TopSymbol;
}
}
خارج شده است

كاربران گرامی : لطفاً قبل از هرگونه فعاليت ابتدا قوانين انجمن را مطالعه  و قبل از ارسال جديد در انجمن جستجو نماييد.
صفحه: [1]   بالا
  چاپ صفحه  
 
پرش به :