PDA

View Full Version : سوال: تشخیص عملوند و عملگر در تکست و محاسبه آنها



MaHyaR.DrAcOulA
شنبه 04 دی 1389, 10:23 صبح
سلام به همگی
من میخوام در یک تکست یه سری عملوند و عملگر وارد کنم.(تا اینجا که مشکلی وجود نداره)
مشکل کار من اینه که وقتی عملگر دوم رو میزنم نمیتونم 2 عملوند قبل و 1 عملگر رو با هم محاسبه کنم
مثل :
24 * 12
در اصل بعد از این وقتی یک عملگری مثل / بیاد باید اینها محاسبه بشن بعد جوابش یعنی :
288 / عدد بعدی رو وارد میکنم
و همین طور الی آخر
اگه کسی هست لطفا یه راهنمایی بکنه ممنون میشم

tooraj_azizi_1035
شنبه 04 دی 1389, 10:42 صبح
سلام،
شما باید یک اولویت برای عملگرها تعیین بکنی (Operator Precedence). در صورتی که از پرانتزها استفاده می کنی باید یکی یکی هر عنصر تشکیل دهنده عبارت رو داخل پشته بریزی. به محض رسیدن به یک پرانتز بسته باید برگردی و عبارت داخل پشته رو تا رسیدن به اولین پرانتز باز ادامه بدی. که کار سختی نیست با شناسایی عملوند و رسیدن به عملگر و بعد مجدداً یک عملوند می فهمیم که باید نتیجه را محاسبه و ارزیابی عبارت رو ادامه بدیم. توی کتاب ساختمان داده این بحث آورده شده. البته شما به محض رسیدن به یک عملگر نباید بلافاصله حاصل رو بدست بیاری بلکه مهم اولویت عملگرهاست.
در مرد مشکلت هم شما باید چند بار عبارت رو Scan کنی یعنی : 10/24*12 باید تبدیل به 10/288 بشه بعد یه بار دیگه عبارت رو محاسبه کنی.

MaHyaR.DrAcOulA
شنبه 04 دی 1389, 10:46 صبح
سلام،
شما باید یک اولویت برای عملگرها تعیین بکنی (Operator Precedence). در صورتی که از پرانتزها استفاده می کنی باید یکی یکی هر عنصر تشکیل دهنده عبارت رو داخل پشته بریزی. به محض رسیدن به یک پرانتز بسته باید برگردی و عبارت داخل پشته رو تا رسیدن به اولین پرانتز باز ادامه بدی. که کار سختی نیست با شناسایی عملوند و رسیدن به عملگر و بعد مجدداً یک عملوند می فهمیم که باید نتیجه را محاسبه و ارزیابی عبارت رو ادامه بدیم. توی کتاب ساختمان داده این بحث آورده شده. البته شما به محض رسیدن به یک عملگر نباید بلافاصله حاصل رو بدست بیاری بلکه مهم اولویت عملگرهاست.
من یکم گیج شدم
میشه یه نمونه کوچیکی واسم مثال بزنین؟

MaHyaR.DrAcOulA
شنبه 04 دی 1389, 10:52 صبح
نگاه کنین مثلا من میخوام به این صورت فعلا پیش برم :
2.2 + 0.8 - 1 * 3 / 2
بعد باید به ترتیب برنامه بیاد به این صورت عمل کنه :
1) 2.2 + 0.8 = 3

2) 3 - 1 = 2

3) 2 * 3 = 6

4) 6 / 2 = 3 # final answer
فعلا نمیخوام از پرانتزی استفاده بکنم
در ضمن در این مثال همه اعداد رو کنار هم یه جا نوشتم میخوام وقتی به یک عملگری رسید قبل خودشو نگاه کنه و 2 عملوند و عملگر رو محاسبه کنه و پشت این عملگر دوم بذاره
نمیدونم تونستم منظور خودمو برسونم یا نه؟؟؟

Reza_Yarahmadi
شنبه 04 دی 1389, 10:58 صبح
كلاس پيوست شده رو نگاه كنيد.(براي ايده گرفتن ميتونه كمكتون كنه)
اين كلاس از عملگرهاي + - * / ^ % پشتيباني ميكنه، هرجايي ازش كه سوال داشتيد بپرسيد تا توضيح بدم.

tooraj_azizi_1035
شنبه 04 دی 1389, 11:08 صبح
منظور شما رو متوجه می شم. عبارت ریاضی از چپ به راست ارزیابی میشه. ضمن اینکه اولویت ها باید رعایت بشه. اگه می خواین بدون اولویت کار کنین خیلی ساده با دو متغیر کار کنید. با خواندن عملوند اول مثلاً x برابر 4 می شود سپس به عملگر می رسیم آن را در یک متغیر کاراکتری نگه می داریم. سپس عملوند دوم را خوانده و در y می ریزیم. پس از اجرای این سه مرحله از switch استفاده می کنیم تا بسته به نوع عملگر عبارت رو محاسبه بکنه. نتیجه عبارت رو توی یه متغیر نگه می داریم و کار رو به همین صورت تا انتها ادامه می دیم. اگر اولویت ها برایتان مهم است باید از پشته استفاده کنید.
اگه خودت کدی نوشتی بذار تا با هم درستش کنیم.

MaHyaR.DrAcOulA
شنبه 04 دی 1389, 12:36 عصر
لطفا دوستان یه نمونه بذارن
نمیدونم چرا تو عمل نمیشه کاری کرد؟؟؟

Reza_Yarahmadi
شنبه 04 دی 1389, 12:54 عصر
مثال ساده زير رو نگاه كنيد