PDA

View Full Version : سوال: درخواست ایده برای حل مساله



irpersian20
دوشنبه 09 اردیبهشت 1392, 17:50 عصر
سلام
من میخوام برنامه نویسیم که تمام اعداد ی که مجموع ارقام آن مضرب 5 و 8 باشد.به وسیله مالتی تردینگ حل کنم.
مشکلی با نوشتن ندارم فقط یک ایده میخوام برای نحوه کار.
یعنی مثلا مجموع ارقام یک عدد باید جمع کنیم بشه 40 ؟ بعد مالتی ترد رو ظاهرا یکی برای مضرف 5 و یکی برای تابع مضرب 8 میخوام.

irpersian20
دوشنبه 09 اردیبهشت 1392, 22:36 عصر
فقط مساله رو درک کنم . مینویسم. با مالتی تردینگ و سی شارپ کمی آشنا هستم .
اما نمیدانم چی کار باید کرد؟ ظاهرا اعدادی که مجموعشان مضرب 5 و 8 باشه . خیلی بزرگ میشه درسته؟ باید ریخت تو ارایه؟
بعد مالتی تردینگ فقط تابع مضرب 5 و 8 رو بدم به ترد ها؟

mousa1992
سه شنبه 10 اردیبهشت 1392, 01:15 صبح
تمام اعداد آقا این که تمومی نداره :P

خب اول ی توصیه برا راحتی کارت اینکه از backgroundworker استفاده کن برای نوشتن به صورت چند ترده
شما فقط کافیه از ی ترد دیگه استفاده کنید توی برنامه که کارش اینه که عدد رو تولید میکنه و ارقام رو جمع میکنه و باقیمانده بر اعداد مد نظرتون رو چک میکنه و در صورتی که صفر بشه اونو میفرسته به main thread برای نمایش اگه اعدادتون نهایت تا اخرین مقداری که int , یا long میتونه بگیرن باشه کار راحتیه ولی اگه بخای بزرگ تر از اونارو هم بررسی کنی یکم پیچیدگی بالا میره که دیگه باید از ارایه ها و ... و حتی برا تولید اعداد نیز یکم بایئ کار کنی روش

موفق باشی

irpersian20
سه شنبه 10 اردیبهشت 1392, 08:11 صبح
آقا این که تمومی نداره :P

خب اول ی توصیه برا راحتی کارت اینکه از backgroundworker استفاده کن برای نوشتن به صورت چند ترده
شما فقط کافیه از ی ترد دیگه استفاده کنید توی برنامه که کارش اینه که عدد رو تولید میکنه و ارقام رو جمع میکنه و باقیمانده بر اعداد مد نظرتون رو چک میکنه و در صورتی که صفر بشه اونو میفرسته به main thread برای نمایش اگه اعدادتون نهایت تا اخرین مقداری که int , یا long میتونه بگیرن باشه کار راحتیه ولی اگه بخای بزرگ تر از اونارو هم بررسی کنی یکم پیچیدگی بالا میره که دیگه باید از ارایه ها و ... و حتی برا تولید اعداد نیز یکم بایئ کار کنی روش

موفق باشی
سلام
من باید حتما از 2 ترد استفاده کنم. یک ترد برای تابع مضرب 5 و یک ترد برای تابع مضرب 8
و ظاهرا با main thread باقی کارا انجام بدم.

mousa1992
سه شنبه 10 اردیبهشت 1392, 18:35 عصر
سلام
چرا اصرار به استفاده از دو thread دارید ؟ با نوشتن یک ترد میتونید همه کارهاتون رو انجام بدید و محاسبه مجموع ارقام و بخشپذیری بر 5 و 8 رو بررسی میکنه و در صورت صحیح بودن عدد رو برمیگردونه و یا اگه خواستین اونایی که فقط بر 5 و یا بر 8 بخشپذیرند رو برگردونید هم میتونید با شرط گذاشتن انجامش بدید

irpersian20
سه شنبه 10 اردیبهشت 1392, 19:03 عصر
سلام
چرا اصرار به استفاده از دو thread دارید ؟ با نوشتن یک ترد میتونید همه کارهاتون رو انجام بدید و محاسبه مجموع ارقام و بخشپذیری بر 5 و 8 رو بررسی میکنه و در صورت صحیح بودن عدد رو برمیگردونه و یا اگه خواستین اونایی که فقط بر 5 و یا بر 8 بخشپذیرند رو برگردونید هم میتونید با شرط گذاشتن انجامش بدید
بله درست می فرمائید اما گفتند 2 ترد. یک ترد برای مضرب 5 و یک ترد مضرب 8. و ظاهرا یک ترد main هم داریم

mousa1992
سه شنبه 10 اردیبهشت 1392, 20:13 عصر
اپلود سایت واسم باز نشد کدهارو گذاشتم
فقط کافیه ی لیست باکس و ی باتن اضافه کنی به فرم


BackgroundWorker bgw5;
BackgroundWorker bgw8;
public Form1()
{
InitializeComponent();
// یک ترد برای بررسی مضارب 5
bgw5 = new BackgroundWorker();
bgw5.WorkerReportsProgress = true;
bgw5.DoWork += new DoWorkEventHandler(bgw5_DoWork);
bgw5.ProgressChanged += new ProgressChangedEventHandler(bgw5_ProgressChanged);
// برای بررسی مضارب 8
bgw8 = new BackgroundWorker();
bgw8.WorkerReportsProgress = true;
bgw8.DoWork += new DoWorkEventHandler(bgw8_DoWork);
bgw8.ProgressChanged += new ProgressChangedEventHandler(bgw8_ProgressChanged);
}
/// <summary>
/// تمام اعدادی که مضرب 5 هستند
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void bgw5_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i < int.MaxValue; i++)
{
bgw5.ReportProgress(i * 5);
System.Threading.Thread.Sleep(10);
}
}

/// <summary>
/// پیدا کردن مضارب 8
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void bgw8_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i < int.MaxValue / 8; i++)
{
bgw8.ReportProgress(i * 8);
System.Threading.Thread.Sleep(10);
}
}

/// <summary>
/// اگر عدد دریافت شده بر 8 نیز بخشپذیر باشد و در لیست موجود نباشد ان را اضافه میکند
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void bgw5_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage % 8 == 0 && !listBox1.Items.Contains(e.ProgressPercentage))
listBox1.Items.Add(e.ProgressPercentage);
}

/// <summary>
/// اگر بر 5 بخشپذیر باشد و در لیست موجود نباشد اضافه می شود
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void bgw8_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage % 5 == 0 && !listBox1.Items.Contains(e.ProgressPercentage))
listBox1.Items.Add(e.ProgressPercentage);
}

private void button1_Click(object sender, EventArgs e)
{
bgw5.RunWorkerAsync();
bgw8.RunWorkerAsync();
}


موفق باشی

Mahmoud.Afrad
سه شنبه 10 اردیبهشت 1392, 21:36 عصر
آقای mousa1992 (http://barnamenevis.org/member.php?252440-mousa1992) اشتباه نوشتی! مجموع ارقام مورد نظر هست.


مطمئنی منظور بخشپذیری ارقام بر 5و 8 همزمان بوده. شاید منظور استادت "یا" بوده.(بخشپذیر بر 5 یا بر 8).
اگر منظور "و" بوده که باید در یک ترد بنویسی و یا مثل کاری که mousa1992 (http://barnamenevis.org/member.php?252440-mousa1992) کرده منتها در این حالت یکسری کار تکراری انجام میشه چون دو حلقه پیاده میشه.
اگر منظور "یا" هست که راحته دو ترد که یکی 5 و دیگری 8 رو چک میکنه.

irpersian20
سه شنبه 10 اردیبهشت 1392, 23:36 عصر
سلام
برنامه ای که همه اعداد ی که مجموع ارقام انها مضرب پنج و مضرب هشت هستند را توسط دو ریسمان به صورت موازی بنویسید و در خروجی نمایش دهید
2 تابع یکی مضرب پنج و یکی مضرب هشت
حتی گفته شده در خروجی طوری نویسید که دو ترد کارش معلوم باشد و زیرش نمایش دهد.
Thread 1 Thread 2


من والا اصلا منظور سوال نمی فهمم و گرنه کار با ترد ها و حل مساله مشکلی ندارم.!

mousa1992
چهارشنبه 11 اردیبهشت 1392, 12:51 عصر
آقای mousa1992 (http://barnamenevis.org/member.php?252440-mousa1992) اشتباه نوشتی! مجموع ارقام مورد نظر هست.


عذر میخوام متوجه نبودم - کار سختی نیست تغییرش


برنامه ای که همه اعداد ی که مجموع ارقام انها مضرب پنج و مضرب هشت هستند را توسط دو ریسمان به صورت موازی بنویسید و در خروجی نمایش دهید
2 تابع یکی مضرب پنج و یکی مضرب هشت

فک میکنم منظورشون اینه که دوتا ترد باشه یکی برای محاسبه اعدادی که مجموع ارقامشون بر 5 بخشپذیر هست و یکی هم برا هشت و نتایج رو نمایش بدن

Mahmoud.Afrad
چهارشنبه 11 اردیبهشت 1392, 18:09 عصر
فک میکنم منظورشون اینه که دوتا ترد باشه یکی برای محاسبه اعدادی که مجموع ارقامشون بر 5 بخشپذیر هست و یکی هم برا هشت و نتایج رو نمایش بدن
این میشه اجتماع(همون "یا" OR ( || )).
منم فکر میکنم منظور همین هست.