PDA

View Full Version : فرمول ریاضی



sajaaaaad
جمعه 07 شهریور 1393, 20:02 عصر
با سلام خدمت دوستان عزیز
من برنامه ای می خوام بنویسم که داخل فرمول داره، مثلا


4x-3=0


سوال اینجاس اگه من این فرمول رو به صورت رشته دریافت کنم و بعد بجای ایکس تعدادی عدد تولید کنم و یکی یکی بذارم داخل فرمول ک نتیجه رو در بیارم باید چکار کنم؟ مثلا میگم من بجای ایکس میخوام بذارم 5 چطور باید اینکارو انجام بدم؟ بعد با صفر مقایسه کنم... البته من صفرو در اوردم ها، یعنی هر بخش فرمولو جدا کردم ولی یکمی اینکار سخته، اینکه همه ی فرمول رو تکه تیکه کنی و بعد بخوام عددارو داخلش بذارم و حساب کنم، اگ روش ساده تری هست ممنون میشم کمک کنید

NASA's Spaceman
جمعه 07 شهریور 1393, 20:07 عصر
دوست عزیز ابتدا X و Y فرمولت رو مشخص کن که دو تا تکست باکس باشن و بعد دو تا متغیر عددی تعریف کن و اون دو تا تکست رو به عدد تبدیل کن و بعد خیلی راحت اون متغیر رو که مقدار دهی کنی چه تو اجرا و چه تو کدنویسی راحت میتونی کارت رو انجام بدی
با سپاس Spaceman

sajaaaaad
شنبه 08 شهریور 1393, 00:27 صبح
مرسی ایده جالب و خوبی بود ولی خب خیلی محدود میشه برنامه اینجوری، یعنی کلا ساختار برنامه ثابت میشه دیگه، من نمیخوام ثابت باشه، من الان خودم امدم برنامرو جوری نوشتم که میاد فرمولو میگیره بعد عملونداشو جدا کردم عملگرهاشم جدا کردمو توی یک لیست قرار دادم و میشه همینجوری هم ادامه بدمو برنامه رو ادامه بدم ولی سخت پیش میره و زمان بره، دنبال یک روش ساده ترم... اگ کسی میدونه راهنمایی کنه ممنون میشم

sajaaaaad
شنبه 08 شهریور 1393, 00:34 صبح
حالا یه چیز دیگه، گیریم من فورمولو به صورت رشته داشته باشم، مثلا همون جمله قبل تا مساویش، یه تعداد جمع و تفریق و حالا مثلا با پرانتز گذاری ها، میشه فرمول رو داد جواب رو برگردونه؟ بزنامه ای برای اینکار هست یا نه؟
مثلا من اینو بدم
4-5(4*6)+2
جوابشو به من بده، یا هر جمله دیگه، به صورت رشته بهش بدم به من جوابشو بده..؟
با تشکر

IamOverlord
شنبه 08 شهریور 1393, 03:17 صبح
سلام!
این رو ببین:
NCalc - Mathematical Expressions Evaluator for .NET (http://ncalc.codeplex.com/)

sohil_ww
شنبه 08 شهریور 1393, 06:48 صبح
حالا یه چیز دیگه، گیریم من فورمولو به صورت رشته داشته باشم، مثلا همون جمله قبل تا مساویش، یه تعداد جمع و تفریق و حالا مثلا با پرانتز گذاری ها، میشه فرمول رو داد جواب رو برگردونه؟ بزنامه ای برای اینکار هست یا نه؟
مثلا من اینو بدم
4-5(4*6)+2
جوابشو به من بده، یا هر جمله دیگه، به صورت رشته بهش بدم به من جوابشو بده..؟
با تشکر

اره دوست از شما می تونی از کامپایل کردن کدت در حین اجرا استفاده کنی یا به اعبارتی compile on runtime
خیلی هم راحته و خیلیم داینامیک
http://www.codeproject.com/Articles/9019/Compiling-and-Executing-Code-at-Runtime

موفق باشی

یاسردرا
شنبه 08 شهریور 1393, 13:38 عصر
4-5(4*6)+2
روش های زیادی وجود داره.
خودم هم یک اپ بر پایه پردازش رشته ها نوشتم.روالش هم اینه که بر اساس ترتیب ریاضی عبارت ها رو جدا بعدش هم محاسبه میکرد.از الگوریتم خاصی هم استفاده نکردم.
واسه معادله هم به همین صورت عمل کنید ابتدا تمام اعداد رو یک طرف محاسبه و به یک عدد ساده تر تبدیل کنید متغیر ها هم به همین روال.مابقی کار مطمءنا دستتون میاد.
پیشنهاد میکنم با رشته ها بازی کنید.
یه مثال بسیار ساده برای جمع متغیر x:

System.Collections.ArrayList listx = new System.Collections.ArrayList();

string str = "+4x-3x-3+5x+6x+1=0";
string s;

for (int i = 0; i < str.Length; i++)
{
try
{
if (str[i] == Convert.ToChar("x"))
{
s = str[i - 2].ToString() + str[i - 1].ToString() + str[i].ToString();
listx.Add(s);
}
}
catch {
s ="+"+ str[i - 1].ToString() + str[i].ToString();
listx.Add(s);

}
}


double d = double.Parse(listx[0].ToString().Substring(0, 2));

try
{
for (int i = 1; i < listx.Count; i++)
{


d = d + double.Parse(listx[i].ToString().Substring(0, 2));


}

}

catch { }
MessageBox.Show(d.ToString()+"x");

sajaaaaad
یک شنبه 09 شهریور 1393, 22:17 عصر
با تشکر از دوستان عزیز از راهنمایی تون.
یاسدرا جان روش دستی خودمم نوشتم، و با توجه به عملگرها جداشون کردمو میگم میشه ادامه داد ولی خب واقعا زمان بره..! در مورد این دوستان عزیز دیگه که لینک گذاشتن و راهنمایی کردن میشه نمونه عملیشو توضیح بدین باید چکار کرد دقیقا، آخه من دقیق متوجه اون پیجا نشدم چیه..! یکمی شفاف تر بگین ممنون میشم یا نمونشو بگین ممنون میشم. با تشکر

IamOverlord
یک شنبه 09 شهریور 1393, 23:27 عصر
با تشکر از دوستان عزیز از راهنمایی تون.
یاسدرا جان روش دستی خودمم نوشتم، و با توجه به عملگرها جداشون کردمو میگم میشه ادامه داد ولی خب واقعا زمان بره..! در مورد این دوستان عزیز دیگه که لینک گذاشتن و راهنمایی کردن میشه نمونه عملیشو توضیح بدین باید چکار کرد دقیقا، آخه من دقیق متوجه اون پیجا نشدم چیه..! یکمی شفاف تر بگین ممنون میشم یا نمونشو بگین ممنون میشم. با تشکر
سلام دوست عزیز!
توی اون سایت (http://ncalc.codeplex.com (http://ncalc.codeplex.com/)) خودش این نمونه رو اول گذاشته:
Expression e = new Expression("2 + 3 * 5");
Debug.Assert(17 == e.Evaluate());
خوب قبلش دانلودش کنید (http://ncalc.codeplex.com/releases)... فایل NCalc - Binaries.zip (http://ncalc.codeplex.com/downloads/get/283228) رو... یه DLL توش هست... اگه نمی دونید چی کارش کنید، این لینک رو ببینید:
http://stackoverflow.com/questions/5010957/call-function-from-dll

یاسردرا
دوشنبه 10 شهریور 1393, 00:08 صبح
http://stackoverflow.com/questions/333737/c-sharp-evaluating-string-342-yield-int-18

static double Evaluate(string expression) {
var loDataTable = new DataTable();
var loDataColumn = new DataColumn("Eval", typeof (double), expression);
loDataTable.Columns.Add(loDataColumn);
loDataTable.Rows.Add(0);
return (double) (loDataTable.Rows[0]["Eval"]);
}
بی معطلی.

sajaaaaad
دوشنبه 10 شهریور 1393, 11:32 صبح
با تشکر از دوستان عزیز، یاسدرا جان واقعا عالی بود داداش مرسی :تشویق::قلب:
ی سوال دیگه، البته من نگشتم خودم توی اینترنت هنوز، ولی اگ دوستان میدونن کمک کنن منون میشم من اگ بخوام بین دوتا بازه، مثلا پنج مثبت تا پنج منفی، عدد تصادفی ایجاد کنم و به صورت اعشاری، مثلا تا دو رقم اعشار، یا یک رقم اعشار، چطوری میشه انجام داد، مثلا اعداد 1.5، 2.7، 3.5، -4.8 و غیره...
من خودم معمولیشو اینجوری نوشتم ولی میخوام اعشاری بشه چکار کنم..؟
این تابع عدد رو میگیره و به تعداد جمعیت تصادفی ایجاد میکنه واسه منفی و مثبت بودنشم عدد رندم تولید میکنم.!

private void CreatePopulation(int Number)
{
Random Rand = new Random();
Population = new List<float>();
for (int i = 0; i < Number; i++)
{
if (Rand.Next(2) == 1)
{
Population.Add(Rand.Next(-5, 6));


}
else
{
Population.Add(Rand.Next(-5, 6) * -1);
}

}
}

helpsos
دوشنبه 10 شهریور 1393, 12:14 عصر
سلام
برو اینجا (http://barnamenevis.org/showthread.php?453102-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%DB%8C%DA%A9-%D9%81%D8%B1%D9%85%D9%88%D9%84-%D8%B1%D8%B4%D8%AA%D9%87-%D8%A7%DB%8C-%D8%A8%D9%87-%D8%B9%D8%AF%D8%AF) بین به دردت می خوره

یاسردرا
دوشنبه 10 شهریور 1393, 13:37 عصر
http://stackoverflow.com/questions/1064901/random-number-between-2-double-numbers
http://www.experts-exchange.com/Programming/Languages/C_Sharp/Q_28243467.html
http://www.devcurry.com/2010/01/generate-random-floating-point-number.html
http://stackoverflow.com/questions/15973043/generate-random-number-between-0-and-1-with-guassian-distributes

sajaaaaad
دوشنبه 10 شهریور 1393, 23:29 عصر
با تشکر از دوستان عزیز البته من چون میخواستم کلا دو رقم اعشار نهایتا داشته باشه اینجوری نوشتم..! تازه فهمیدم اون کد قبلیم چقد باگ داشت :لبخند: خودم گفتم بین پنج تا منفی پنج باز در منفی هم ضرب کردم :لبخند:

private void CreatePopulation(int Number) {
Random Rand = new Random();
double x;
Population = new List<double>();
for (int i = 0; i < Number; i++)
{
x = Xl + Rand.NextDouble() * (Xh - Xl);
Population.Add(Math.Round(x, 2));
}
}