صفحه 1 از 1
سوال در باره برنامه تبديل infix به postfix در ++C
ارسال شده: پنجشنبه ۱۷ دی ۱۳۸۸, ۱۲:۳۹ ق.ظ
توسط moha684
دوستان متخصص نیاز فوری به نوشتن یه برنامه دارم
خواهشا اگه کسی تو برنامه نویسی وارده یه کمکی به ما کنه
مساله: برنامه ای بنویسید که به کمک پشته عبارت INFIX ورودی را به PREFIX تبدیل کند
Re: کمک در مورد برنامه نویسی به زبان ++C
ارسال شده: پنجشنبه ۱۷ دی ۱۳۸۸, ۲:۰۴ ق.ظ
توسط SHAHRAM
دوست عزیز یکم بیشتر توضیح می دید؟تا ببینیم میتونیم کمکتون کنیم یا نه؟!

Re: کمک در مورد برنامه نویسی به زبان ++C
ارسال شده: پنجشنبه ۱۷ دی ۱۳۸۸, ۱۲:۴۴ ب.ظ
توسط arashtabaie
یعنی شما میخواید عبارت a+b رو که درحالت infix به همان صورت a+b در میاد رو با یک stack به صورت prefix یعنی ab+ در بیارید. چون احتمالا این تکلیف دانشگاهی چیزیه

فقط الگوریتم رو توضیح میدم براتون دیگه زدن کدش که کار سختی هم نیست به عهده ی خودتون
_قدم اول:رشته ی infix ورودی رو شروع کنید از آخر به اول بخونید(این کار رو میتونید با پوش کردن کاراکتر ها توی یک استک و بعد یکی یکی پاپ کردن اونها انجام بدید، غیر از این یک استک دیگه هم برای انجام عملیات میخوایم که توی مراحل وقتی نوشتم در استک پوش یا ازش پاپ شه منظورم دومیست) حالا دونه دونه کاراکتر ها رو بخونید و به ازای هر کدوم این کار ها رو انجام بدید:
اگر کاراکتر خوانده شده چیزی غیر از عملگر بود (عدد، متغیر ،...) اون رو به رشته ی prefix اضافه کنید.
اگر کاراکتر خوانده شده عملگر بود یکی از کارهای زیر:
اگر استک(دومی در توضیحات بالا!) خالی نیست و تقدم عملگر سر استک از عملگری که از رشته خوانده شده بیشتره، عملگر رو از سر استک پاپ میکنیم و به رشته ی prefix اضافه میکنیم و به عملگر خوانده شده از رشته کاری نداریم، میذاریم همونجا باشه برای iteration بعدی. اگر استک خالی یا تقدم عملگر سر استک پایین تره، عملگر خوانده شده از استک رو درون استک پوش میکنیم.
_قدم دوم: قدم اول رو اینقدر تکرار کنید که همه ی کاراکتر های رشته بررسی شن.
_قدم سوم:اگر استک خالی نشده دونه دونه عملگر های موجود در اونو پاپ میکنیم و اضافه میکنیم به رشته!
_قدم چهارم: حالا باید رشته ی prefixتون رو سروته کنید تا جواب نهایی به دست بیاد.
پ.ن.: این الگوریتم سریعترین الگوریتمی هست که برای تغییر انواع traverse ها به هم من تاحالا دیدم، همین ایده اش که همه رو سروته باهاشون کار میکنه آخرش دوباره به حالت اصلی بر میگرده خیلی باحاله!!
پ.ن.2: اگه نکته ی گنگی داشت یا نیاز به راهنمایی بیشتر داشتید بگید

Re: کمک در مورد برنامه نویسی به زبان ++C
ارسال شده: پنجشنبه ۱۷ دی ۱۳۸۸, ۳:۳۷ ب.ظ
توسط SHAHRAM
مثل اینکه من هنوز درس مربوط به این موضوغ رو پاس نکردم

....
arashtabaie, ممنون،استفاده کردم

Re: کمک در مورد برنامه نویسی به زبان ++C
ارسال شده: پنجشنبه ۱۷ دی ۱۳۸۸, ۹:۲۷ ب.ظ
توسط moha684
دوست عزیز arashtabaie
ممنون از زحمتی که کشیدی
ولی مشکل حل نشد چون این برنامه رو واسه یه دانشجوی رشته ریاضی محض میخوام که از برنامه نویسی چیزی سر در نمیاره.
دوستان مطلع اگه میتونن زحمتشو بکشن
ممنون از همه دوستان
Re: کمک در مورد برنامه نویسی به زبان ++C
ارسال شده: دوشنبه ۳۱ خرداد ۱۳۸۹, ۲:۲۱ ق.ظ
توسط Moh3en7a
سلام دوستان
سوال من هیچ ربطی به سوال مطرح شده در پست اول نداره و چون موضوعش درباره ++C هست اینجا مطرح کردم.
من یه کمپایلر برای برنامه نویسی به زبان ++C نیاز دارم که بتونه دستورات و توابع تابع کتابخونه ای graphics.h رو اجرا کنه.
چون یه پروژه به کمک Turbo C تحت داس نوشته بودم که داخلش خیلی از توابع گرافیکی استفاده شده بود ولی الان اون برنامه رو ندارم و هر جایی رو هم که گشتم اونو پیدا نکردم و نرم افزار های دیگه هم دقیقا از همون توابع ارور میگیره.
راستی اگر بجای graphics.h میشه از تابع دیگه ای استفاده کرد ممنون میشم اطلاع بدید.
با تشکر
Re: کمک در مورد برنامه نویسی به زبان ++C
ارسال شده: سهشنبه ۱ تیر ۱۳۸۹, ۸:۳۹ ب.ظ
توسط Mahdi1944
,
ضمن عرض خوش آمد به شما دوست گرامي
از اين لينک Turbo C 3 که نسخهي تحت داس هست رو دانلود کنيد
[External Link Removed for Guests]
Re: کمک در مورد برنامه نویسی به زبان ++C
ارسال شده: پنجشنبه ۴ شهریور ۱۳۸۹, ۷:۲۳ ب.ظ
توسط abbas.m.k
اين كد ميتونه به شما كمك كنه:
include<iostream.h>
#include<conio.h>
#include<cstring.h>
#define m 21
class stack
{
public:
stack();
void push(char);
char pop();
int empty();
void popandtest(char & , int &);
void topandtest(char & , int &);
void display();
void pushandtest(char & , int &);
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);
}
//////////////////////////
void stack::popandtest(char &temp , int &underflow)
{
if(empty())
underflow=1;
else
{
temp=items[mytop--];
underflow=0;
}
}
//////////////////////////////////
void stack::pushandtest(char &x,int &overflow)
{
if(mytop==m-1)
overflow=1;
else
{
overflow=0;
items[++mytop]=x;
}
}
//////////////////
void stack::topandtest(char &x , int &underflow)
{
if(empty())
underflow=1;
else
{
x=items[mytop];
underflow=0;
}
}
void convert(char[],char[]);
int cheak(char);
int main()
{
char infix[m],prefix[m];
clrscr();
cout<<"please enter the infix expertion: ";
cin.get(infix,m);
convert(infix , prefix);
int len=strlen(prefix);
for(int i = 0 ; i<len;i++)
cout<<prefix[i];
return 0;
}
int cheak(char symbol)
{
if (symbol>='a' && symbol <='z')
return 1;
return 0;
}
void convert(char infix[],char prefix[])
{ int len;
char symbol ,temp, topsymbol;
int underflow,overflow , j=0;
stack s1;
stack s2;
len=strlen(infix);
for(int i =len-1;i>=0;i--)
{
symbol=infix[i];
if(cheak(symbol))
s2.pushandtest(symbol,overflow);
/////////////////////////////
if(symbol=='(')
{
s1.popandtest(temp,underflow) ;
if(temp=='+'|| temp=='*'|| temp=='-'|| temp=='/')
{
s2.pushandtest(temp,overflow);
}
s1.popandtest(temp,underflow) ;
if(temp=='+' || temp=='*'|| temp=='-'|| temp=='/')
s2.pushandtest(temp,overflow);
}
//////////////////////////
else
s1.pushandtest(symbol,overflow);
}
while(!s1.empty())
{
s1.popandtest(temp,underflow) ;
if(temp=='+'|| temp=='-'|| temp=='*'|| temp=='/')
{
s2.pushandtest(temp,overflow);
}
i=0;
}
for(i=0;underflow!=1;i++)
{
s2.popandtest(prefix[i],underflow);
}
prefix[i-1]='\0';
}
Re: کمک در مورد برنامه نویسی به زبان ++C
ارسال شده: پنجشنبه ۴ شهریور ۱۳۸۹, ۷:۲۶ ب.ظ
توسط abbas.m.k
اين كد هم از سايت هاي خارجي گرفتم كه ميتونه كمكت كنه:
[External Link Removed for Guests]
اينم آدرس source code :
[External Link Removed for Guests]
اين سايتم خوبه:
[External Link Removed for Guests]
Re: سوال در باره برنامه تبديل infix به postfix در ++C
ارسال شده: دوشنبه ۱۶ تیر ۱۳۹۹, ۱۲:۵۸ ب.ظ
توسط Marjann
سلام
سریع جواب میخوام اگه مقدوره فردا امتحان دارم
ممکنه تبدیل عبارت infix به عبارت prefix رو توضیح بدید
البته فکر کنم یه راهش اینه که postfix عبارت بدست بیاریم و بعد جواب نهایی رو برعکس کنیم
ولی اگه ممکنه راه اصلی توضیح بدید
لطفا اولویت ها رو هم تواین قسمت توضیح بدید و اگر الویت با عملگ های پایینتر بود چطوری باید واردشون کنیم تششششششکر
لطفا فوری
