مشکل در ساخت ماشین حساب مهندسی - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

مشکل در ساخت ماشین حساب مهندسی

0 امتیاز
سلام دوستان من یه ماشین حساب در سی شارپ درست کردم ولی درست کار نمیکنه من می خوام جملات ریاضی مثل 2+5*8/6+3 رو بدون استفاده از درخت، لیست پیوندی و اینا و فقط با یک ارایه از نوع رشته انجام بدم آیا امکانش هست؟ مثلا یه ارایه از نوع رشته بسازم با تعداد 10000 خانه و هم اعداد و هم عملگرها رو داخلش بریزم وبعد با یک حلقه و دستورات شرطی  بر اساس اولویت تقدم عملگرها دو تا دوتا عملیات مثلا ضرب ، منها و ... رو انجام بدم به این صورت که حلقه شروع به پیماش کنه و اول هرجا * یا /  یا ) رو دید بیاد خانه قبل از مثلا * رو ضرب کنه در خانه بعد از * و بریزه توی یک متغیر از نوع دسیمال و برای بقیه عملگرا هم به همین صورت ... ایا امکان پذیره از لحاظ تئوری؟ اگه اره پس کمک کنید یه شبه کد بنویسد حتما ممنون.
سوال شده تیر 26, 1395  بوسیله ی daniyaltjm (امتیاز 840)   47 88 103
ویرایش شده تیر 27, 1395 بوسیله ی daniyaltjm

2 پاسخ

0 امتیاز

با استفاده از

Microsoft Script Control 1.0 تونستم انجام بدم به این صورت:

روی نام پروژه راست کلیک کرده، روی add a reference راست کلیک کنید . از کادر باز شده به تب COM بروید ، Microsoft Script Control 1.0" را یافته و پروزه خود اضافه کنید 
MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
sc.Language = "VBScript";
string expression = "1 + 2 * 7";
object result = sc.Eval(expression);            
MessageBox.Show(result.ToString());

من می خوام با استفاده از آرایه خودم این کارو انجام بدم حداقل برای + - * / میشه؟ چطور؟

 

پاسخ داده شده تیر 27, 1395 بوسیله ی daniyaltjm (امتیاز 840)   47 88 103
0 امتیاز

آره چرا که نه

دوست عزیز شما باید گراف postfixشو بکشی

بعد براحتی هر عبارتیو حتی اونایی که حاوی توان و جذر و ....هستند رو حل کنی

هرچند که همینجوری هم به راحتی با یک تابع بازگشتی میتونی عبارت رو حساب کنی

یا همچنین از REGEX هم میشه استفاده کرد

از الگوریتم shunting yard هم میتوانید استفاده کنید 

در کل برمیگرده به اطلاعات خودتون که کدوم مورد براتون آسان و بهینه تر هست

و اشاره به ابن موضوع خالی از لطف نیست که شما میتوانید از کتابخانه های مختلف زیادی استفاده کنید 

که بهترین آنها برای زبان سی شارپ از نظر من MxParser هست که برای دانلود آن میتوانید به مخزن  رسمی این برنامه که روی گیتهاب هست مراجعه کنید https://github.com/mariuszgromada/MathParser.org-mXparser

چند تا مثال هم برات میارم که خوب متوجه بشی چجوریه 

مثلا برای عبارتی که نوشتی کد به صورت زیر میشود

Expression e = new Expression("2+5*8/6+3)");
e.calculate();

 

پاسخ داده شده اسفند 29, 1395 بوسیله ی Fire360Boy (امتیاز 2,524)   6 24 43
ویرایش شده اسفند 29, 1395 بوسیله ی Fire360Boy
...