سوال در باره برنامه تبديل infix به postfix در ++C

در اين بخش مي‌توانيد در مباحث مربوط به زبانهاي بر پايه C به بحث بپردازيد

مدیران انجمن: abbas.m.k, athlon64x2, شوراي نظارت

ارسال پست
Major II
Major II
پست: 221
تاریخ عضویت: یک‌شنبه ۲۵ اسفند ۱۳۸۷, ۷:۰۰ ب.ظ
سپاس‌های ارسالی: 329 بار
سپاس‌های دریافتی: 448 بار

سوال در باره برنامه تبديل infix به postfix در ++C

پست توسط moha684 »

دوستان متخصص نیاز فوری به نوشتن یه برنامه دارم
خواهشا اگه کسی تو برنامه نویسی وارده یه کمکی به ما کنه
مساله: برنامه ای بنویسید که به کمک پشته عبارت INFIX ورودی را به PREFIX تبدیل کند
[FONT=System][External Link Removed for Guests] 
[FONT=System] 
[FONT=System]618 
Super Moderator
Super Moderator
نمایه کاربر
پست: 1166
تاریخ عضویت: سه‌شنبه ۳ مرداد ۱۳۸۵, ۱۱:۴۹ ق.ظ
سپاس‌های ارسالی: 946 بار
سپاس‌های دریافتی: 2887 بار

Re: کمک در مورد برنامه نویسی به زبان ++C

پست توسط SHAHRAM »

دوست عزیز یکم بیشتر توضیح می دید؟تا ببینیم میتونیم کمکتون کنیم یا نه؟! :?
"هرکس از راه رسید نانش دهید و از ایمانش مپرسید . چه ، آنکس که به درگاه باریتعالی به جان ارزد ، قطعا بر سفره بوالحسن به نان ارزد "
( شیخ ابوالحسن خرقانی )
Captain II
Captain II
نمایه کاربر
پست: 246
تاریخ عضویت: یک‌شنبه ۹ فروردین ۱۳۸۸, ۹:۱۱ ق.ظ
سپاس‌های ارسالی: 780 بار
سپاس‌های دریافتی: 791 بار
تماس:

Re: کمک در مورد برنامه نویسی به زبان ++C

پست توسط arashtabaie »

یعنی شما میخواید عبارت a+b رو که درحالت infix به همان صورت a+b در میاد رو با یک stack به صورت prefix یعنی ab+ در بیارید. چون احتمالا این تکلیف دانشگاهی چیزیه :grin: فقط الگوریتم رو توضیح میدم براتون دیگه زدن کدش که کار سختی هم نیست به عهده ی خودتون :-)

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

پ.ن.: این الگوریتم سریعترین الگوریتمی هست که برای تغییر انواع traverse ها به هم من تاحالا دیدم، همین ایده اش که همه رو سروته باهاشون کار میکنه آخرش دوباره به حالت اصلی بر میگرده خیلی باحاله!!
پ.ن.2: اگه نکته ی گنگی داشت یا نیاز به راهنمایی بیشتر داشتید بگید :-)
Super Moderator
Super Moderator
نمایه کاربر
پست: 1166
تاریخ عضویت: سه‌شنبه ۳ مرداد ۱۳۸۵, ۱۱:۴۹ ق.ظ
سپاس‌های ارسالی: 946 بار
سپاس‌های دریافتی: 2887 بار

Re: کمک در مورد برنامه نویسی به زبان ++C

پست توسط SHAHRAM »

مثل اینکه من هنوز درس مربوط به این موضوغ رو پاس نکردم :shock: .... arashtabaie, ممنون،استفاده کردم :razz:
"هرکس از راه رسید نانش دهید و از ایمانش مپرسید . چه ، آنکس که به درگاه باریتعالی به جان ارزد ، قطعا بر سفره بوالحسن به نان ارزد "
( شیخ ابوالحسن خرقانی )
Major II
Major II
پست: 221
تاریخ عضویت: یک‌شنبه ۲۵ اسفند ۱۳۸۷, ۷:۰۰ ب.ظ
سپاس‌های ارسالی: 329 بار
سپاس‌های دریافتی: 448 بار

Re: کمک در مورد برنامه نویسی به زبان ++C

پست توسط moha684 »

دوست عزیز arashtabaie
ممنون از زحمتی که کشیدی
ولی مشکل حل نشد چون این برنامه رو واسه یه دانشجوی رشته ریاضی محض میخوام که از برنامه نویسی چیزی سر در نمیاره.
دوستان مطلع اگه میتونن زحمتشو بکشن
ممنون از همه دوستان
[FONT=System][External Link Removed for Guests] 
[FONT=System] 
[FONT=System]618 
New Member
پست: 1
تاریخ عضویت: دوشنبه ۳ خرداد ۱۳۸۹, ۸:۱۶ ب.ظ

Re: کمک در مورد برنامه نویسی به زبان ++C

پست توسط Moh3en7a »

سلام دوستان
سوال من هیچ ربطی به سوال مطرح شده در پست اول نداره و چون موضوعش درباره ++C هست اینجا مطرح کردم.

من یه کمپایلر برای برنامه نویسی به زبان ++C نیاز دارم که بتونه دستورات و توابع تابع کتابخونه ای graphics.h رو اجرا کنه.
چون یه پروژه به کمک Turbo C تحت داس نوشته بودم که داخلش خیلی از توابع گرافیکی استفاده شده بود ولی الان اون برنامه رو ندارم و هر جایی رو هم که گشتم اونو پیدا نکردم و نرم افزار های دیگه هم دقیقا از همون توابع ارور میگیره.
راستی اگر بجای graphics.h میشه از تابع دیگه ای استفاده کرد ممنون میشم اطلاع بدید.
با تشکر
Administrator
Administrator
نمایه کاربر
پست: 15899
تاریخ عضویت: جمعه ۷ بهمن ۱۳۸۴, ۷:۵۱ ب.ظ
سپاس‌های ارسالی: 72687 بار
سپاس‌های دریافتی: 31681 بار
تماس:

Re: کمک در مورد برنامه نویسی به زبان ++C

پست توسط Mahdi1944 »

  ,
ضمن عرض خوش آمد به شما دوست گرامي
از اين لينک Turbo C 3 که نسخه‌ي تحت داس هست رو دانلود کنيد
[External Link Removed for Guests]
زندگي صحنه يکتاي هنرمندي ماست هرکسي نغمه خود خواند و از صحنه رود
صحنه پيوسته به جاست خرم آن نغمه که مردم بسپارند به ياد


[External Link Removed for Guests] | [External Link Removed for Guests] | مجله الکترونيکي سنترال کلابز

[External Link Removed for Guests] | [External Link Removed for Guests] | [External Link Removed for Guests]

لطفا سوالات فني را فقط در خود انجمن مطرح بفرماييد، به اين سوالات در PM پاسخ داده نخواهد شد
Captain I
Captain I
نمایه کاربر
پست: 433
تاریخ عضویت: یک‌شنبه ۱۲ اردیبهشت ۱۳۸۹, ۱:۴۸ ب.ظ
سپاس‌های ارسالی: 733 بار
سپاس‌های دریافتی: 1344 بار

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';


}
[HIGHLIGHT=#1F497D] بهترين مترجم كيست كه سكوت را ترجمه كند.  
Captain I
Captain I
نمایه کاربر
پست: 433
تاریخ عضویت: یک‌شنبه ۱۲ اردیبهشت ۱۳۸۹, ۱:۴۸ ب.ظ
سپاس‌های ارسالی: 733 بار
سپاس‌های دریافتی: 1344 بار

Re: کمک در مورد برنامه نویسی به زبان ++C

پست توسط abbas.m.k »

اين كد هم از سايت هاي خارجي گرفتم كه ميتونه كمكت كنه:

[External Link Removed for Guests]

اينم آدرس source code :

[External Link Removed for Guests]

اين سايتم خوبه:
[External Link Removed for Guests]
[HIGHLIGHT=#1F497D] بهترين مترجم كيست كه سكوت را ترجمه كند.  
New Member
پست: 1
تاریخ عضویت: دوشنبه ۱۶ تیر ۱۳۹۹, ۱۲:۵۲ ب.ظ

Re: سوال در باره برنامه تبديل infix به postfix در ++C

پست توسط Marjann »

سلام
سریع جواب میخوام اگه مقدوره فردا امتحان دارم
ممکنه تبدیل عبارت infix به عبارت prefix رو توضیح بدید
البته فکر کنم یه راهش اینه که postfix عبارت بدست بیاریم و بعد جواب نهایی رو برعکس کنیم
ولی اگه ممکنه راه اصلی توضیح بدید
لطفا اولویت ها رو هم تواین قسمت توضیح بدید و اگر الویت با عملگ های پایینتر بود چطوری باید واردشون کنیم تششششششکر
لطفا فوری :lol:
ارسال پست

بازگشت به “C Base Programming”