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

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

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

ارسال پست
Major II
Major II
پست: 221
تاریخ عضویت: یک شنبه 25 اسفند 1387, 7:00 pm
سپاس‌های ارسالی: 329 بار
سپاس‌های دریافتی: 448 بار

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

پست توسط moha684 » پنج شنبه 17 دی 1388, 12:39 am

دوستان متخصص نیاز فوری به نوشتن یه برنامه دارم
خواهشا اگه کسی تو برنامه نویسی وارده یه کمکی به ما کنه
مساله: برنامه ای بنویسید که به کمک پشته عبارت INFIX ورودی را به PREFIX تبدیل کند
[FONT=System][لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] 
[FONT=System] 
[FONT=System]618 

Super Moderator
Super Moderator
نمایه کاربر
پست: 1166
تاریخ عضویت: سه شنبه 3 مرداد 1385, 11:49 am
سپاس‌های ارسالی: 946 بار
سپاس‌های دریافتی: 2886 بار

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

پست توسط SHAHRAM » پنج شنبه 17 دی 1388, 2:04 am

دوست عزیز یکم بیشتر توضیح می دید؟تا ببینیم میتونیم کمکتون کنیم یا نه؟! :?
"هرکس از راه رسید نانش دهید و از ایمانش مپرسید . چه ، آنکس که به درگاه باریتعالی به جان ارزد ، قطعا بر سفره بوالحسن به نان ارزد "
( شیخ ابوالحسن خرقانی )

Captain II
Captain II
نمایه کاربر
پست: 246
تاریخ عضویت: یک شنبه 9 فروردین 1388, 9:11 am
سپاس‌های ارسالی: 780 بار
سپاس‌های دریافتی: 791 بار
تماس:

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

پست توسط arashtabaie » پنج شنبه 17 دی 1388, 12:44 pm

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

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

پ.ن.: این الگوریتم سریعترین الگوریتمی هست که برای تغییر انواع traverse ها به هم من تاحالا دیدم، همین ایده اش که همه رو سروته باهاشون کار میکنه آخرش دوباره به حالت اصلی بر میگرده خیلی باحاله!!
پ.ن.2: اگه نکته ی گنگی داشت یا نیاز به راهنمایی بیشتر داشتید بگید :-)

Super Moderator
Super Moderator
نمایه کاربر
پست: 1166
تاریخ عضویت: سه شنبه 3 مرداد 1385, 11:49 am
سپاس‌های ارسالی: 946 بار
سپاس‌های دریافتی: 2886 بار

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

پست توسط SHAHRAM » پنج شنبه 17 دی 1388, 3:37 pm

مثل اینکه من هنوز درس مربوط به این موضوغ رو پاس نکردم :shock: .... arashtabaie, ممنون،استفاده کردم :razz:
"هرکس از راه رسید نانش دهید و از ایمانش مپرسید . چه ، آنکس که به درگاه باریتعالی به جان ارزد ، قطعا بر سفره بوالحسن به نان ارزد "
( شیخ ابوالحسن خرقانی )

Major II
Major II
پست: 221
تاریخ عضویت: یک شنبه 25 اسفند 1387, 7:00 pm
سپاس‌های ارسالی: 329 بار
سپاس‌های دریافتی: 448 بار

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

پست توسط moha684 » پنج شنبه 17 دی 1388, 9:27 pm

دوست عزیز arashtabaie
ممنون از زحمتی که کشیدی
ولی مشکل حل نشد چون این برنامه رو واسه یه دانشجوی رشته ریاضی محض میخوام که از برنامه نویسی چیزی سر در نمیاره.
دوستان مطلع اگه میتونن زحمتشو بکشن
ممنون از همه دوستان
[FONT=System][لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] 
[FONT=System] 
[FONT=System]618 

New Member
پست: 1
تاریخ عضویت: دو شنبه 3 خرداد 1389, 8:16 pm

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

پست توسط Moh3en7a » دو شنبه 31 خرداد 1389, 2:21 am

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

من یه کمپایلر برای برنامه نویسی به زبان ++C نیاز دارم که بتونه دستورات و توابع تابع کتابخونه ای graphics.h رو اجرا کنه.
چون یه پروژه به کمک Turbo C تحت داس نوشته بودم که داخلش خیلی از توابع گرافیکی استفاده شده بود ولی الان اون برنامه رو ندارم و هر جایی رو هم که گشتم اونو پیدا نکردم و نرم افزار های دیگه هم دقیقا از همون توابع ارور میگیره.
راستی اگر بجای graphics.h میشه از تابع دیگه ای استفاده کرد ممنون میشم اطلاع بدید.
با تشکر

Administrator
Administrator
نمایه کاربر
پست: 15674
تاریخ عضویت: جمعه 7 بهمن 1384, 7:51 pm
سپاس‌های ارسالی: 70844 بار
سپاس‌های دریافتی: 31298 بار
تماس:

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

پست توسط Mahdi1944 » سه شنبه 1 تیر 1389, 8:39 pm

  ,
ضمن عرض خوش آمد به شما دوست گرامي
از اين لينک Turbo C 3 که نسخه‌ي تحت داس هست رو دانلود کنيد
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
زندگي صحنه يکتاي هنرمندي ماست هرکسي نغمه خود خواند و از صحنه رود
صحنه پيوسته به جاست خرم آن نغمه که مردم بسپارند به ياد


[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | مجله الکترونيکي سنترال کلابز

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید] | [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

لطفا سوالات فني را فقط در خود انجمن مطرح بفرماييد، به اين سوالات در PM پاسخ داده نخواهد شد

Captain I
Captain I
نمایه کاربر
پست: 433
تاریخ عضویت: یک شنبه 12 اردیبهشت 1389, 1:48 pm
سپاس‌های ارسالی: 733 بار
سپاس‌های دریافتی: 1342 بار

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

پست توسط abbas.m.k » پنج شنبه 4 شهریور 1389, 7:23 pm

اين كد ميتونه به شما كمك كنه:
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
تاریخ عضویت: یک شنبه 12 اردیبهشت 1389, 1:48 pm
سپاس‌های ارسالی: 733 بار
سپاس‌های دریافتی: 1342 بار

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

پست توسط abbas.m.k » پنج شنبه 4 شهریور 1389, 7:26 pm

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

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

اينم آدرس source code :

[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]

اين سايتم خوبه:
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]
[HIGHLIGHT=#1F497D] بهترين مترجم كيست كه سكوت را ترجمه كند.  

ارسال پست

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