PDA

View Full Version : محاسبه مقدار عددی یک عبارت ریاضی از روی عبارت رشته ای آن



alasht
شنبه 22 آبان 1389, 21:53 عصر
با سلام خدمت دوستان
نمیدونستم عنوان تاپیک رو چی بزارم در هر صورت منظورم اینه که مثلا یه مقدار داریم داخل label چطوری می تونم اون مقدار رو دربیارم و عملیات مورد نظر رو روش انجام بدیم
مثلا فرض کنید من یه لیبل به اسم و مقادیر زیر دارم

label2.Text = "2 + 2";
چطوری میتونم این مقدار رو به عدد تبدیل کنم و خروجی بگیرم
یعنی مقدار 2+2 رو به عدد تبدیل کنه و عملیات رو روش انجام بده یعنی با هم جمع کنه و تو خروجی حاصل که 4 هست رو نشون بده
امیدوارم متوجه منظورم شده باشید
با تشکر از دوستات

mahdi87_gh
شنبه 22 آبان 1389, 21:58 عصر
دوست عزیز اگه به کتاب ساختمان داده هایی که در زمان دانشجویی پاس کردی رجوع کنی، راه حلی برای این کار داره. که یادمه اومده بود از stack استفاده کرده بود. بگرد اگه پیدا نکردی و نشد، دوباره بگو . اما سعی کن خودت همیشه به جواب برسی
موفق باشی

alasht
شنبه 22 آبان 1389, 22:00 عصر
سلام
من ساختمان داده تازه دارم میخونم هنوز پاس نکردم
ولی توش چیزی در مورد سی شارپ نیست ! :متفکر:

mahdi87_gh
شنبه 22 آبان 1389, 22:07 عصر
نه دوست عزیز منظور من این نبود که توش c# رو یاد داده. منظور من این بود که در این کتاب الگوریتمی برای این کار وجود داره. که شما از این الگوریتم باید الهام بگیری و کارت رو انجام بدی. حالا میخواد زبان برنامه سازیتون C# یا VB یا Pascal یا هرچی

alasht
شنبه 22 آبان 1389, 22:10 عصر
سلام
استاد ما جزوه میده و کتاب نداریم
اگه شما مبتونید راهنمایی کنید
با تشکر

MSN_Issue
شنبه 22 آبان 1389, 22:14 عصر
مهدی عزیز راست میگن ... !
این مطلب با موضوع « ارزشیابی عبارات اینفیکس(infix) » در درس ساختمان داده ها عنوان میشه !!!
اما این در صورتیه که شما عبارت infix رو به صورت جدا جدا داشته باشید ! نه به صورت یه رشته ...
اینکه بتونید یه رشته رو ارزیابی کنید بر میگرده به درس کامپایلر که توی اون میتونید لغات (در اینجا اعداد و عملگرها) رو جدا کنید و روی اونها عملیاتی رو انجام بدید !!

alasht
شنبه 22 آبان 1389, 22:19 عصر
خوب تمام اینا به کنار من یه روش میخوام که با سی شارپ بشه فرمول رشته ای رو به فرمول قابل محاسبه تبدیل کرد
چه راهی وجود داره ؟

codelover
شنبه 22 آبان 1389, 22:28 عصر
این مربوط به c sharp نیست مربوط به همون stack هست که دوستمون گفتن معمولا تو C++ نوشته میشن
همون بخش infix و prifix و postfix اینا رو سرچ کن نمونه برنامه زیاد پیدا میکنی
این عبارتی که شما نوشتی infix هست که اگه برنامه تبدیلش به یکی از موارد بالا رو پیدا میکنی میتونی جواب آخرش رو بجای چاپ کردن محاسبه کنی و جواب آخر رو بدست بیاری اونم با اولویت

codelover
شنبه 22 آبان 1389, 22:30 عصر
مهدی عزیز راست میگن ... !
این مطلب با موضوع « ارزشیابی عبارات اینفیکس(infix) » در درس ساختمان داده ها عنوان میشه !!!
اما این در صورتیه که شما عبارت infix رو به صورت جدا جدا داشته باشید ! نه به صورت یه رشته ...
اینکه بتونید یه رشته رو ارزیابی کنید بر میگرده به درس کامپایلر که توی اون میتونید لغات (در اینجا اعداد و عملگرها) رو جدا کنید و روی اونها عملیاتی رو انجام بدید !!

والا ما تو اون ترممون که با رشته کار میکردم اگه خواستید نمونه برنامش رو تو C++ بزارم

mahdi87_gh
شنبه 22 آبان 1389, 22:30 عصر
به لینکهای زیر یه سری بزنید
http://www.codeproject.com/KB/cs/rpn_expressionparser.aspx
http://odetocode.com/code/80.aspx
موفق باشید

Salar Ashgi
شنبه 22 آبان 1389, 22:31 عصر
این عمل عموما Math Parsing نامیده میشه و روشهای زیادی هم براش وجود داره .

بعنوان یه مثال نمونه :

http://www.codeproject.com/KB/cs/MathParser.aspx

mahdi87_gh
شنبه 22 آبان 1389, 22:32 عصر
این مربوط به c sharp نیست مربوط به همون stack هست که دوستمون گفتن معمولا تو C++‎ نوشته میشن
توی C# هم Stack وجود داره و شما میتونی ازشون استفاده کنی

Stack<string> s = new Stack<string>();

alasht
شنبه 22 آبان 1389, 22:32 عصر
خوب دوستان من چطوری میتونم از این الگوریتم تو سی شارپ استفاده کنم ؟
اینا رو تئوریش رو بلدم ولی تو سی شارپ نمی دونم چطوری اجرا کنم
ممنون میشم راهنمایی کنید
شرچ هم کردم چیزی پیدا نشد

alasht
شنبه 22 آبان 1389, 22:39 عصر
ماشالله یهو همه با هم پست دادین کف کردم :کف:
پستهای قبلی رو بررسی میکنم نتیجه رو اعلام میکنم
ممنون از همه دوستان

alasht
شنبه 22 آبان 1389, 22:51 عصر
دوستان ببخشید دوباره مزاحم میشم
این لینکایی که دادین درسته ولی من یه چیز ساده میخوام نه پیشرفته
مثلا فقط یه عدد یک رقمی از راست بگیره و عملگر رو از وسط و یه عدد یک رقمی از چپ و با روش عملیات ریاضی انجام بده
به عنوان مثال

Label.text ="2+3";
این رشته رو بگیره 2 و 3 و + رو جدا کنه و عملیات رو انجام بده
یعنی یک عملگر و دو عدد یک رقمی
این فکر کنم ساده باشه !

codelover
شنبه 22 آبان 1389, 23:03 عصر
اگر فقط دو تا عدد داری که میخوایی با هم جمع یا ضربشون کنی دیگه به این همه الگوریتم رنگارنگ احتیاجی نیست
این الگوریتم ها برایه این بوجود اومدن تا بتونن عبارات ریاضی مختلف مثل موارد زیر رو حل کنن که پاسخ هاشون هم طبق اولویت ها با هم فرق داره

مثل :



2*(3+4)
که جواب با پرانتز میشه 14 و بدون پرانتز میشه 10

alasht
شنبه 22 آبان 1389, 23:15 عصر
اگر فقط دو تا عدد داری که میخوایی با هم جمع یا ضربشون کنی دیگه به این همه الگوریتم رنگارنگ احتیاجی نیست

خوب چطوری میتونم رو دو تا عدد محاسبه انجام بدم ؟

group45
شنبه 22 آبان 1389, 23:27 عصر
سلام


چطوری میتونم رو دو تا عدد محاسبه انجام بدم ؟

خب. همون جور که دوستان گفتن راه اصولیش استفاده از پشته هست.و تو عبارات میان وندی روش کار اینجوریه که اعداد رو پوش کن به هر عملوندی که رسیدی (بدون در نظر گرفتن اولویت) اونو وعدد بعدش رو پوش کن بعد 3 تا پاپ کن و حالا بر اساس عملوندت مثلا اگه جمع بود اون دو تا رو جمع کن و حاصل رو پوش کن دوباره.

codelover
شنبه 22 آبان 1389, 23:44 عصر
این تیکه کد فقط برای جمع دو تا عدده که خودت میتونی برایه عملگر هایه دیگه خودت بنویسیش
ولی بازم میگم را اصولیش همون stack هستش




string str = "110+220";
int occ=str.IndexOf('+');
int x = int.Parse( str.Substring(0, occ));
int y = int.Parse(str.Substring(occ+1));
Console.WriteLine((x+y).ToString());
Console.Read();

alasht
شنبه 22 آبان 1389, 23:54 عصر
خیلی ممنون
کارم راه افتاد اما من نیومدم اینجا فقط کپی کنم :لبخند:
چند مورد هست باید یاد بگیرم

1. IndexOf چیکار می کنه ؟
2. Substring چیکار میکنه ؟
با تشکر

codelover
یک شنبه 23 آبان 1389, 00:05 صبح
احتمالا الان یکی از مدیرا میاد میگه تکراریه و این تاپیک رو پاک میکنه

1 - مکان حرف مورد نظر رو در رشته برمیگردونه
2-تو اولی از کاراکتر 0 رشته تا جایه + رو میریزه تو x و تو دومی از علامت + به بعد رو میریزه تو y

ali800
یک شنبه 30 فروردین 1394, 01:44 صبح
با سلام اساتید //// دوستان من همین مشکل رو دارم ! 27 تا عدد توی یک textbox به صورت رشته دارم میخوام با هم جمع کنم لطفا راهنمایم کنید !!!!!!!!!!!!!!!!!!!!

Fotofan
یک شنبه 30 فروردین 1394, 11:04 صبح
سلام. از عبارات با قاعده استفاده کنید خیلی بهتره. من یادم میاد یه همچین چیزی برای به دوستام بگم زیاد از برنامه نویسی سرم میشه درست کرده بودم:چشمک:. البته یکم کارش شبیه به کامپایلر هست ولی خیلی پیچیدگی نداره.یهذره دقت بکنید می فهمید چی بچیه.(اولویت بندی و پرانتز ها از قابلیت هاشه). بازم میگم زیاد کامل نیست. امیدوارم به دردتون بخوره:لبخند:

اینم لینک دانلود:
http://uplod.ir/f8e1swibrmj7/CompailerTest.zip.htm