PDA

View Full Version : حرفه ای: تبدیل string به معادله (یه چیزی تو مایه های کمپایل)



khmahdi
یک شنبه 10 آبان 1388, 16:27 عصر
سلام بر همه ؛
می خوام یه برنامه بنویسم معادله ی y بر حسب x بگیره و اونو باترفند نقطه دهی رسم کنه؛تا این جاش حرفه ای نبود مشکل من تو رسم نیست ،بلکه مشکل من تو تبدیل string به معادله است ، کسی می تونه مشکل منو حل کنه؟
*- یعنی اگه یه textbox داشته باشم که تو خاصیت تکستش معادله ی من باشه ،
چجوری "y="2x^3+1^2 به (y=2*Math.pow(x,3)+Math.pow(1,2 تبدیل کنم؟(فکر کنم اسمش کمپایله)
*- کامپوننتی برای رسم معادله سراغ دارید؟(با این که این مشکل من نیست)

saied_genius
یک شنبه 10 آبان 1388, 17:25 عصر
string ورودي را بگير و با string.replace کاراکترهاي مورد نظر جايگزين کن.

سوالي بود در خدمتم.

موفق باشيد.

khmahdi
یک شنبه 10 آبان 1388, 17:30 عصر
می شه یه مثال بزنید؟

JaguarXF
یک شنبه 10 آبان 1388, 18:46 عصر
می شه یه مثال بزنید؟

خب، اینطور که بنظر میرسه اهل اینکه بری دنبالش و تحقیق کنی و تو گوگل سرچ کنی و ... نیستی.
یه کدی میخواهید حاضر آماده . هلو برو تو گلو :

بفرمایید: این رو دانلود کنید:
http://farm4.static.flickr.com/3120/2388284012_7af197ce95.jpg

http://weblogs.asp.net/pwelter34/archive/2007/05/05/calculator-net-calculator-that-evaluates-math-expressions.aspx

saied_genius
یک شنبه 10 آبان 1388, 19:11 عصر
اين هم يک dll که خودم نوشتم براي اجراي string به عنوان command

نحوه استفاده:


saiedDelshad09131041838Evaluate.Evaluate.Eval("MessageBox.Show(\"Test\");");موفق باشيد.

khmahdi
دوشنبه 11 آبان 1388, 15:52 عصر
باتشکر از آقای JaguarXF ،من دانلودش کردم ولی خیلی مشکل داره ، توی تقدم ها که کاملا مشکل داشت، اگه چیزی دیگه تو این مایه ها دارید لطف کنید بذارید
آقای saied_genius مثل اینکه منظور بنده رو درست نفهمیدید یا من درست از dll شما سر در نیاوردم،
من یه همچین کدی دارم:


int x=5;
string tmp="x^2*7-5";
y=?!

می خوام x رو تو معادله ای که به صورت رشته ای هست بذارم وجواب رو تو y ذخیره کنم
کمک لطفا!

saied_genius
دوشنبه 11 آبان 1388, 17:06 عصر
من حالا نمي دانم شما چيکار مي خواهيد بکنيد يا چطوري مي خواهيد معادله را حل کنيد.

ببينيد فرض را بر اين مي گيريم که شما معادله "x^2*7-5" را به Math.Pow(x,2)*7)-5) تبديل کرديد ، خوب حالا چي ؟!

شما چطوري مي خواهيد يک رشته به شکل "Math.Pow(x,2)*7)-5)" را به اجرا در بياوريد.

البته راه هاي ديگري هم هست ، مثل مثالي که دوستمان زده بودند.
در آن حالت شما در اصل رشته را parse مي کنيد و بر اساس آن به زبان #C فقط متغير ها را جايگزين مي کنيد. (فقط متغير مي دهيد)

اما در کار با dll که من گذاشتم ، نه فقط اينجا ، بلکه هر جاي ديگر هم نيازتان باشد مي توانيد هر رشته را به عنوان command اجرا کنيد. (فکرش رو بکن ! اصلاً کار راحتي نيست نوشتن چنين dll ي).

خلاصه اينکه ، تصميم با شماست که از چه راهي استفاده کنيد ولي در اصل شما بايد کل توابعي که ممکن است مورد استفاده قرار بگيرند را در يک کلاس تعريف کنيد ، تقدم ها را بيابيد و سپس با string.replace جايگزين کنيد.

اگر در هنگام جايگزيني از #C استفاده کنيد و مستقيم تبديل به تابع نماييد که هيچ، در آخر هم اجرا مي کنيد، اما اگر بخواهيد به string تبديل کنيد و در آخر string را به عنوان command اجرا کنيد ، بايد از dll من استفاده نماييد.

سوالي بود در خدمتم.

موفق باشيد.

اَرژنگ
دوشنبه 11 آبان 1388, 18:49 عصر
باتشکر از آقای JaguarXF ،من دانلودش کردم ولی خیلی مشکل داره ، توی تقدم ها که کاملا مشکل داشت، اگه چیزی دیگه تو این مایه ها دارید لطف کنید بذارید
آقای saied_genius مثل اینکه منظور بنده رو درست نفهمیدید یا من درست از dll شما سر در نیاوردم،
من یه همچین کدی دارم:


int x=5;
string tmp="x^2*7-5";
y=?!

می خوام x رو تو معادله ای که به صورت رشته ای هست بذارم وجواب رو تو y ذخیره کنم
کمک لطفا!
ببین چیزی که میخواهی اینه؟
http://www.codeproject.com/KB/cs/runtime_eval.aspx