PDA

View Full Version : آموزش: محیط دایره در C#‎



kyrie-chan
پنج شنبه 16 آذر 1391, 21:52 عصر
سلام . یه راهنمایی می خوام .... من برا نوشتم محیط دایره اگه float و int باشه اینجوری نوشتم :


public double mohit1(int r){
return(r*2*mohit.pI);
}
public float mohit2(float r){
return (r*2*mohit.pI);
}


حالا اگه بخوایم اینجوری بنویسیم که کاربر اگه شعاع رو اعشاری داد بره به تابع اعشاری و اگه شعاع رو صحیح داد بیاد به تابع صحیح .... چجوری باید این کارُ بکنیم .... اصلا برنامه ابتدایی من درسته ؟ چون نرم افزار VB ندارم امتحان بکنم .... میشه کمکم کنین ؟

silverfox
پنج شنبه 16 آذر 1391, 22:18 عصر
overloading
http://www.dotnetperls.com/overload
مثلا اینطوری
public float mohit(int r){
return (r*2*mohit.pI);
}
public float mohit(float r){
return (r*2*mohit.pI);
}

حالا اگه این تابع رو با parameter از نوع call, int کنی تابع اول و اگر با call, float کنی دومی اجرا می شه.
ولی برای این مثال خاص کلا چه int گرفتی چه float به cast, float کن با یه تابع کار کن

Mahmoud.Afrad
پنج شنبه 16 آذر 1391, 22:23 عصر
فکر نمیکنم نیاز به دو تابع باشه(در هر صورت تابع زیر برای مفادیر int هم جواب میده). ورودی و خروجی رو از نوع دابل بگیرید:
public double mohit(double r)
{
return (r * 2 * System.Math.PI);
}

kyrie-chan
جمعه 17 آذر 1391, 09:16 صبح
overloading
http://www.dotnetperls.com/overload
مثلا اینطوری
public float mohit(int r){
return (r*2*mohit.pI);
}
public float mohit(float r){
return (r*2*mohit.pI);
}

حالا اگه این تابع رو با parameter از نوع call, int کنی تابع اول و اگر با call, float کنی دومی اجرا می شه.
ولی برای این مثال خاص کلا چه int گرفتی چه float به cast, float کن با یه تابع کار کن

ممنون ... برای صدا زدن باید یه تابع دیگه هم تعریف کنم ؟ آخه مثلا یه همچین چیزی داریم :

http://www.4shared.com/photo/szT9VsJ9/Untitled.html

بعد که کاربر شعاع مدنظرشُ بنویسه ، تشخیص اعشاری یا صحیح بودنش با ماست ... بعد وقتی رو محاسبه کلیک کنه باید اونجا این تابع ها رو صدا بزنم؟

kyrie-chan
جمعه 17 آذر 1391, 09:22 صبح
فکر نمیکنم نیاز به دو تابع باشه(در هر صورت تابع زیر برای مفادیر int هم جواب میده). ورودی و خروجی رو از نوع دابل بگیرید:
public double mohit(double r)
{
return (r * 2 * System.Math.PI);
}

ممنون . آخه می خوام مثلا اعلام کنه در انتهای محاسبه با یه مسیج که شعاع اعشاری بود ... یا مثلا صحیح بود ....

Mahmoud.Afrad
جمعه 17 آذر 1391, 11:25 صبح
ممنون . آخه می خوام مثلا اعلام کنه در انتهای محاسبه با یه مسیج که شعاع اعشاری بود ... یا مثلا صحیح بود ....
مشکلی نداره با همون یک تابع کار راه میفته. برای تشخیص int یا float بودن هم باید خود شعاع رو بررسی کنی ابتدا اگر قابل تبدیل به int بود که صحیح هست اگر نه برای تبدیل به float تست میکنی و در پیغام میگی اعشاری. در هر صورت هم با همون یک تابع محیط رو بدست میاری(مقدار int به float(اعشاری) cast خواهد شد):

private void button8_Click(object sender, EventArgs e)
{
try
{
int r = int.Parse(textBox1.Text.Trim());
double m = mohit(r);
MessageBox.Show("mohit:" + m + " r is int");
}
catch
{
try
{
float r = float.Parse(textBox1.Text.Trim());
double m = mohit(r);
MessageBox.Show("mohit:" + m + " r is float");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}

public double mohit(float r)
{
return (r * 2 * System.Math.PI);
}

kyrie-chan
جمعه 17 آذر 1391, 12:12 عصر
مشکلی نداره با همون یک تابع کار راه میفته. برای تشخیص int یا float بودن هم باید خود شعاع رو بررسی کنی ابتدا اگر قابل تبدیل به int بود که صحیح هست اگر نه برای تبدیل به float تست میکنی و در پیغام میگی اعشاری. در هر صورت هم با همون یک تابع محیط رو بدست میاری(مقدار int به float(اعشاری) cast خواهد شد):

private void button8_Click(object sender, EventArgs e)
{
try
{
int r = int.Parse(textBox1.Text.Trim());
double m = mohit(r);
MessageBox.Show("mohit:" + m + " r is int");
}
catch
{
try
{
float r = float.Parse(textBox1.Text.Trim());
double m = mohit(r);
MessageBox.Show("mohit:" + m + " r is float");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}

public double mohit(float r)
{
return (r * 2 * System.Math.PI);
}


خیلی ممنون. خدا خیرتون بده :لبخندساده:

ASKaffash
شنبه 18 آذر 1391, 07:37 صبح
برای حل این مسائل بهتر است از جنریک استفاده کنید تا همه نوع های int و long و float و ... را پوشش دهد مثل سورس ذیل :


public static T P<T>(T r)
{
object o = 2d *Math.PI *Convert.ToDouble(r);
return (T)o;
}


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


private void Test()
{
long x = P<long>(100);
}