PDA

View Full Version : سوال: ساخت ماشین حساب بوسیله پشته



atp1.ir
چهارشنبه 06 دی 1391, 10:04 صبح
سلام :قلب:

من میخواستم ی ماشین حساب با پشته بنویسم. تمام ساختمان داده اش رو هم میدونم که باید تبدیل به prefix کرد. اما شدیدا گیج شدم. میشه یه راهنمایی بکنید منو که چند تا پشته تعریف کنم ؟؟ توی کجا باید infix رو تبدیل به prefix کنم و کد نویسیش چجوریه که بخواد تبدیل بشه.

پیشاپیش از راهنماییتون ممنون.

morteza5358
چهارشنبه 06 دی 1391, 13:09 عصر
:متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر:

atp1.ir
جمعه 08 دی 1391, 09:56 صبح
:گریه::گریه::گریه::گریه::گریه: :گریه::گریه::گریه::گریه::گریه: :گریه:

SEZAR.CO
شنبه 09 دی 1391, 12:14 عصر
:متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر::متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر::متفکر: :متفکر: :متفکر: :متفکر: :متفکر:
:متفکر: :متفکر: :متفکر: :متفکر: :متفکر:اول میشه سما ما رو راهنمایی کنید و بیشتر توضیح دهید:متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر:
:متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر::متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر: :متفکر::متفکر: :متفکر: :متفکر: :متفکر: :متفکر:

atp1.ir
دوشنبه 11 دی 1391, 08:35 صبح
سلام.

برای ساخت ماشین حسابی که بتونه فرمولهای بزرگ رو حساب کنه فکر کنم نیاز به پشته باشه. من میخوام توی ماشین حساب اعدادی که وارد میشن اول تبدیل prefix یا postfix بشن بعد اینها ریخته بشه داخل پشته بعد هر جا که به پرانتز بسته رسید محتویات داخل پرانتز رو حساب کنه .

morteza5358
دوشنبه 11 دی 1391, 16:15 عصر
سلام
الگوریتمش فکر کنم تو کتاب ساختمان داده بود.
برو از اونجا بخون.....

the king
دوشنبه 11 دی 1391, 20:21 عصر
سلام :قلب:

من میخواستم ی ماشین حساب با پشته بنویسم. تمام ساختمان داده اش رو هم میدونم که باید تبدیل به prefix کرد. اما شدیدا گیج شدم. میشه یه راهنمایی بکنید منو که چند تا پشته تعریف کنم ؟؟ توی کجا باید infix رو تبدیل به prefix کنم و کد نویسیش چجوریه که بخواد تبدیل بشه.

پیشاپیش از راهنماییتون ممنون.

Prefix یا Postfix؟ اگر اختیار انتخاب با خودتونه همیشه از Postfix استفاده کنید، نسبت به Prefix روال خیلی ساده تری داره. اصلا دلیل اینکه از Infix
مستقیما استفاده نمیشه همین دشواری پردازش اش ئه، Prefix هم خودش پردازش اش دشواره، بر خلاف Postfix که پردازش اش ساده است.
شما دو تا آرایه لازم دارید و یک پشته. آرایه اول همون عملیاتی یه که ماشین حساب قراره انجام بده، هم عدد و هم عملگر ها داخلش این آرایه به ترتیب infix
که کاربر بهش عادت داره نوشته شده، ترتیب قرار گرفتن مقادیر در خونه های این آرایه دقیقا مطابق همان ترتیبی است که دکمه های ماشین حساب فشرده میشه.

این آرایه Infix باید در آرایه دیگری به Postfix تبدیل بشه، پشته بصورت موقتی اینجا لازمه، اعداد مستقیما در آرایه دوم (برای Postfix) نوشته می شوند اما
عملگر ها موقتا داخل پشته می روند و طی فرایند تبدیل Infix به Potfix به تدریج به آرایه دوم منتقل می شوند. وقتی کار تمام شد، پشته خالی است و
آرایه دوم دقیقا معادل Postfix ئه آرایه اول است که Infix بود.

شما الان برای پردازش مقادیر آرایه دوم و محاسبه کردن نتیجه عملیات یک پشته لازم دارید، چون اون پشته که برای تبدیل Postfix استفاده کرده بودید الان
خالی است، نیازی به پشته جدیدی نیست. از همان برای نگهداری موقتی اعداد (عملوند ها) استفاده خواهید کرد تا آرایه دوم (Postfix) بصورت
محاسبات ریاضی پردازش شود. وقتی کار تمام شد عددی که نتیجه نهایی محاسبه است تنها مقداری است که در پشته باقی می ماند و باید برداریدش.

atp1.ir
سه شنبه 12 دی 1391, 16:01 عصر
میشه الگوریتمشو بزارید ؟

m.lajevardi
پنج شنبه 08 فروردین 1392, 08:58 صبح
میشه الگوریتمشو بزارید ؟
2 تا لینک زیر بدردت میخوره
http://geekswithblogs.net/venknar/archive/2010/07/09/algorithm-for-infix-to-postfix.aspx (http://http://geekswithblogs.net/venknar/archive/2010/07/09/algorithm-for-infix-to-postfix.aspx)
http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix

C#‎_best_Programmer
پنج شنبه 08 فروردین 1392, 10:05 صبح
دادشم تبدیل به پرفیکسشو باید با یه رشته انجام بدی

m.lajevardi
پنج شنبه 08 فروردین 1392, 10:10 صبح
دادشم تبدیل به پرفیکسشو باید با یه رشته انجام بدی
من تو برنامه ای که خودم نوشتم prefix را درون آرایه ای از رشته گذاشتم

tooraj_azizi_1035
پنج شنبه 08 فروردین 1392, 12:53 عصر
http://faculty.cs.niu.edu/~hutchins/csci241/eval.htm (http://faculty.cs.niu.edu/%7Ehutchins/csci241/eval.htm)

Expression e = new Expression("2 + 3 * 5");
Debug.Assert(e.Evaluate());