PDA

View Full Version : سوال: ساخت یک تبدیل زاویه به sin و cos



ABZiko
سه شنبه 02 دی 1393, 10:30 صبح
سلام دوستان، بنده می خوام یک textbox بزارم و وقتی کاربر نوشت : sin() یک زاویه ای رو بهش بده،(با توجه به زاویه ای که داخل پرانتز هست) یا مثلا cos اش رو بده، می شه راهنمایی کنید؟ ممنون

erfan_urchin
سه شنبه 02 دی 1393, 11:51 صبح
اگه منظورت اینه که مثلا کاربر بنویسه sin(30) برنامه خروجی رو بده 0.5 باید از یه چیزی شبیه کد زیر استفاده کنی
string[] s = new string[1];
s = textBox1.Text.Split('(');
if (s[0] == "sin")
{
string degree = s[1].Remove(s[1].Length - 1);
textBox2.Text = Math.Sin(Convert.ToDouble(degree)*Math.PI/180).ToString();
}
else if (s[0] == "cos")
{
string degree = s[1].Remove(s[1].Length - 1);
textBox2.Text = Math.Cos(Convert.ToDouble(degree) * Math.PI / 180).ToString();
}

ABZiko
سه شنبه 02 دی 1393, 14:41 عصر
خیلی ممنون، دو سوال، من برای tan و cot هم داشتم کد شما رو تبدیل می کردم، ولی برای cot کار نمی کنه و می گه همچین چیزی نداره، اگر پشت math.tan یک تقسیم بر یک بزارم مشکلی نداره؟
می شه کد ها رو توضیح بدین که چی کار کردین؟
ممنون

erfan_urchin
سه شنبه 02 دی 1393, 20:13 عصر
خیلی ممنون، دو سوال، من برای tan و cot هم داشتم کد شما رو تبدیل می کردم، ولی برای cot کار نمی کنه و می گه همچین چیزی نداره، اگر پشت math.tan یک تقسیم بر یک بزارم مشکلی نداره؟

بله شما مجبورین از 1 تقسیم بر تانژانت استفاده کنید چون متد Cot نداریم
ولی این کدی که من نوشتم یه چیزی که داره اینه که بعضی جواباش چیزایی در میاد که تاحالا ندیدین :لبخند: چون از Math.PI استفاده کردیم (مثلا اگه cot90 رو بزنید میفهمید چی میگم :لبخند:)
برای اینکه مشکل پیدا نکنید بهتره بجای math.PI از همون 3.14 استفاده کنید و در نهایت جواب آخر رو رُند کنید. یعنی کد رو به شکل زیر ویرایش کنید
string[] s = new string[1];
s = textBox1.Text.Split('(');
if (s[0] == "sin")
{
string degree = s[1].Remove(s[1].Length - 1);
textBox2.Text = Math.Round(Math.Sin(Convert.ToDouble(degree) * 3.14 / 180)).ToString();
}
else if (s[0] == "cos")
{
string degree = s[1].Remove(s[1].Length - 1);
textBox2.Text = Math.Round(Math.Cos(Convert.ToDouble(degree) * 3.14 / 180)).ToString();
}
else if (s[0] == "tan")
{
string degree = s[1].Remove(s[1].Length - 1);
textBox2.Text = Math.Round(Math.Tan(Convert.ToDouble(degree) * 3.14 / 180)).ToString();
}
else if (s[0] == "cot")
{
string degree = s[1].Remove(s[1].Length - 1);
textBox2.Text = Math.Round((1 / Math.Tan(Convert.ToDouble(degree) * 3.14 / 180))).ToString();
}

erfan_urchin
سه شنبه 02 دی 1393, 20:24 عصر
می شه کد ها رو توضیح بدین که چی کار کردین؟
ممنون
توضیح کد اینه که اول میاد نوشته کاربر رو بر اساس پرانتز باز split میکنه و میریزه داخل آرایه. یعنی نتیجه بصورت زیر در میاد

s[0] = sin و s[1] = 90)
وبعد میاد [1]s که آخرش پرانتز داره رو پاک میکنه و فقط درجه میمونه. یعنی اول [1]s اینجوریه (90 بعد میشه اینجوری 90
بعد در نهایت میاد چک میکنه میگه اگه [0]s برابر sin بود یعنی کاربر میخواد سینوس زاویه رو محاسبه کنه و آخر هم جواب محاسبه و چاپ میکنه
فقط چیزی که هست اینه که باید حتما زوایا به رادیان تغییر کنن یعنی اگه شما فقط بنویسی (90)Math.Sin یه جواب عجیب غریب میده به خاطر همین حتما باید ضربدر 3.14 و سپس تقسیم بر 180 کنی
موفق باشی