PDA

View Full Version : محاسبه فرمول وارد شده توسط کاربر در یک Edit



علامت سوال
شنبه 30 تیر 1386, 18:27 عصر
با سلام
من میخام برنامه ای بنویسم که در یک Edit کاربر فرمولی شبیه 2+5/6 یا (7+4-3*4)/4 رو وارد میکنه.برنامه باید بتونه حاصل رو محاسبه کنه.
هر فرمولی ممکنه در ورودی وارد بشه
راهنمایی لطفا
با تشکر فراوان

mzjahromi
شنبه 30 تیر 1386, 19:04 عصر
باید از پشته استفاده کنی
حالا کجاش رو مشکل داری؟
تمرین هست یا هدف کاربردی داری؟

علامت سوال
شنبه 30 تیر 1386, 19:32 عصر
ممنون از جوابتون
این یه قسمتی از پروژه هست.
روند استفاده از پشته رو لطفا بفرمایید از یک پشته کافیه؟

mzjahromi
شنبه 30 تیر 1386, 19:35 عصر
این چیزی نیست که من بخوام اینجا توضیح بدم
یه بحث کامل است که معمولا توی کتابهای ساختمان داده ها مطرح میشه
ولی اگه بخوای از کامپوننتهای آماده استفاده کنی 1stClass یه Calcedit داره که میتونه یه ماشین حساب رو زیر یک Edit باز کنه
اگر هم اولویت عملگرها و پرانتزها برات مهم نیست من فکر کنم یک نمونه کد دارم(محمود؟)

SYNDROME
شنبه 30 تیر 1386, 19:47 عصر
با سلام

با سلام
من میخام برنامه ای بنویسم که در یک Edit کاربر فرمولی شبیه 2+5/6 یا (7+4-3*4)/4 رو وارد میکنه.برنامه باید بتونه حاصل رو محاسبه کنه.
هر فرمولی ممکنه در ورودی وارد بشه
راهنمایی لطفا
با تشکر فراوان
روشی که دوستمان گفت درست است.
ولی می توانی از یک آرایه نیز استفاده کنی.
موفق باشی

علامت سوال
شنبه 30 تیر 1386, 19:55 عصر
با سلام

روشی که دوستمان گفت درست است.
ولی می توانی از یک آرایه نیز استفاده کنی.
موفق باشی
خب همون پشته میشه دیگه.پیاده سازی پشته با هزار و یک راه میشه انجام داد.

علامت سوال
دوشنبه 01 مرداد 1386, 08:14 صبح
اینم پیاده سازیش با پشته
برای استفاده دیگران گذاشتم
http://www.delphi32.com/vcl/5613/
توی این سایت کامپیوننت های مجانی دیگه ای هم هست

Answer
دوشنبه 01 مرداد 1386, 09:02 صبح
اگر ساختمان داده رو خونده باشی بهترین کار تبدیل فرمول به عبارت post Fix میباشد و سپس محاسبه عبارت جدید.

علامت سوال
دوشنبه 01 مرداد 1386, 09:04 صبح
ترکیب (علامت سوال) و (Answer) خیلی جالبه
اگه بخام همه این کارها رو خودم بکنم قیمت پروژه به شدت افزایش پیدا میکنه ابزارهای مجانی و آماده که با هدف کاهش کد نویسی برنامه نویس ایجاد شدن بهترین گزینه هستند

SYNDROME
دوشنبه 01 مرداد 1386, 09:18 صبح
با سلام

خب همون پشته میشه دیگه.پیاده سازی پشته با هزار و یک راه میشه انجام داد.
درست است می توانی این کار را انجام دهید.
ولی منظور بنده دقیقا پشته واقعی بود که شما با یا Readدارید یا Write نا با استفاده از آرایه.
مدیریت آن نیاز به تجربه دارد و به نظر بنده کمی هم سخت است.
موفق باشید.

علامت سوال
دوشنبه 01 مرداد 1386, 09:27 صبح
مدیریت آن نیاز به تجربه دارد و به نظر بنده کمی هم سخت است.

ممنون از جوابت ولی پیاده سازی پشته انقدر ها هم سخت نیست
یه push , pop ساده هست چند خط بیشتر هم کد نویسی نداره .
همون طوری که دوستان گفتن از مباحث ساختمان داده ست و راحت میشه پیداش کرد چیز ساده ایه.

ولی این مسئله با وجود عدد منفی وجود پرانتز و همچنین اولویت عملگر ها مثل ضرب و تقسیم یه ذره پیچیده میشه که بهتره بجای وقت گذاشتن روش از نمونه های آماده و مجانی استفاده بشه

SYNDROME
دوشنبه 01 مرداد 1386, 12:36 عصر
با سلام


ولی این مسئله با وجود عدد منفی وجود پرانتز و همچنین اولویت عملگر ها مثل ضرب و تقسیم یه ذره پیچیده میشه که بهتره بجای وقت گذاشتن روش از نمونه های آماده و مجانی استفاده بشه
بخاطر همین گفتم از آرایه استفاده کن.
مثلا عبارت


100 * 2000 - (-200)

برای ذخیره به شکل زیر عمل می کنی.


100
*
2000
-
200-

حالا با یک بار پیمایش در آرایه آرایه را به شکل زیر تغییر می دهید.


100
*
2000
+
200

و کارهای دیگر هم به همین شکل.
راحتر از پشته است و نیازی به خالی کردن پشته نیست تا به -200 برسیم
موفق باشید

Arman_1367
دوشنبه 01 مرداد 1386, 14:08 عصر
خوب اگر بخواهد همپین کاری بکند برای پشتیبانی بهتر پرانتزها بهتره از لیست های پیوندی استفاده کنه.

علامت سوال
دوشنبه 01 مرداد 1386, 14:54 عصر
هیچ راه حلی به زیبایی پشته نمیشه تازه اگه راه حلی بجز پشته هم داشته باشه

Arman_1367
دوشنبه 01 مرداد 1386, 15:37 عصر
مگه می خواهد کمپایلر یا مترجم بنویسه.