PDA

View Full Version : مبتدی: مرتب سازی به همراه تایمر



msasan1367
جمعه 16 اردیبهشت 1390, 17:44 عصر
سلام
می خواهم برنامه ای بنویسم که اعدادی دریافت کنه و با زدن یک دکمه مرتب سازی حبابی شروع بشه و پس از پایان زمان مرتب سازی را نشان بدهد

morteza271
جمعه 16 اردیبهشت 1390, 19:17 عصر
شما میتونید یه متغیر عمومی از نوع int تعریف کنید و یه تایمر بسازید و مقدار Interval اون رو 1000 که همون 1ثانیه هست بکنید.
و در رویداد کلیک کلید شروع مرتب سازی تون بنویسید.

timer1.Enable = true;

و در رویداد tick تایمر بنویسید:
Counter همون متغیر عمومی هست:

private void timer1_Tick(object sender, EventArgs e)
{
Counter++;
}

فقط یادتون باشه وقتی مرتب سازی تموم شد این کد رو حتما بنویسید:

timer1.Enable = false;
Counter = 0;

موفق باشید

Directx
جمعه 16 اردیبهشت 1390, 20:38 عصر
دوست عزیز این اصلا کد مناسبی برای اندازه گیری زمان انجام یه الگوریتم تو یه سیستم مخصوص نیست تازه ممکنه که یه مرتب سازی خیلی ( یعنی خیلی خیلی خیلی :لبخند:) زود تر از یه ثانیه انجام بشه

msasan1367
شنبه 17 اردیبهشت 1390, 18:20 عصر
سلام
با تشکر از توجهتون
بذارید بهتر توضیح بدم
یک مجموعه از اعداد داریم با چند نوع مرتب سازی، می خواهیم ببینیم کدام مرتب سازی سریعتر انجام می شه؟

morteza271
یک شنبه 18 اردیبهشت 1390, 11:15 صبح
دوست عزیز این اصلا کد مناسبی برای اندازه گیری زمان انجام یه الگوریتم تو یه سیستم مخصوص نیست تازه ممکنه که یه مرتب سازی خیلی ( یعنی خیلی خیلی خیلی :لبخند:) زود تر از یه ثانیه انجام بشه

اگه شما روش بهتری دارید بگین.ممنون میشم.
در ضمن میتونین مقدار Interval تایمر رو کمتر از 1 ثانیه قرار دهید.
مثلا 1 که میشه 1میلی ثانیه.

Directx
یک شنبه 18 اردیبهشت 1390, 11:26 صبح
دوست عزیز همینکه تو هر میلی ثانیه سیستم یه کاری غیر از الگوریتم انجام مید ه یه زمانی صرف می شه روشش اینه که اصلا از تایمر استفاده نکنیم مثلا یکی از ساده ترین راه هاش(برای کلاس اولیا) اینه که بیاییم قبل از انجام الگوریتم زمان رو اینجوری

DateTime startTime = DateTime.Now

اندازه بگیرم و در آخر هم زمان رو همینجوری اندازه بگیریم از هم کنیم
ولی اکه بخوایین دقیق اندازه بگیریم باید از thread ها و زمان اندازه گیری دقیقتر یا مثلا high resolution timer استفاده کنیم

morteza271
یک شنبه 18 اردیبهشت 1390, 12:34 عصر
اولا که تایمر توی یه ترد دیگه اجرا میشه و ربطی به مرتب سازی(برنامه اصلی) نداره !! گفتم که بدونید! :گیج:
دوما روش شما که خیلی ضعیف تر نشون میده !!!

ali.rezaei7
یک شنبه 18 اردیبهشت 1390, 13:20 عصر
Stopwatch این کارو براتون انجام میده.

Stopwatch s = new Stopwatch();
s.Start();
//قطعه کدی که باید محاسبه بشه
s.Stop();
MessageBox.Show(string.Format("MiliSecond Format: {0}\nTimeSpan Format:{1}", s.ElapsedMilliseconds,s.Elapsed));


using System.Diagnostics

Directx
یک شنبه 18 اردیبهشت 1390, 14:22 عصر
اولا که تایمر توی یه ترد دیگه اجرا میشه و ربطی به مرتب سازی(برنامه اصلی) نداره


دوست عزیز و گرامی پس این کد چی

Counter++;


ثانیا قبل از اینکه رو روشی که خودتون می گید پافشاری کنید بهتره یه ریزه مطالعه کنید در ضمن ایا من گفتم که روشم درسته و کاملا استاندارده؟؟ با این جور تعصبات هیچ وقت نمی تونید یه برنامه نویس خوب بشین در ضمن اینم بگم که هیچکی نمیاد برای فهمیدن کارایی الگوریتمش زمان اجرای اون رو تو یه سیستم بررسی نمی کنه بلکه این یه موضوع کاملا ریاضیه و مرتبه زمانی الگوریتم رو می شه بدون وابستگی به سیستم های مختلف به راحتی اندازه گیری و با هم مقایسه کرد:قلب:

morteza271
یک شنبه 18 اردیبهشت 1390, 15:51 عصر
دوست عزیز و گرامی پس این کد چی

Counter++;


ثانیا قبل از اینکه رو روشی که خودتون می گید پافشاری کنید بهتره یه ریزه مطالعه کنید در ضمن ایا من گفتم که روشم درسته و کاملا استاندارده؟؟ با این جور تعصبات هیچ وقت نمی تونید یه برنامه نویس خوب بشین در ضمن اینم بگم که هیچکی نمیاد برای فهمیدن کارایی الگوریتمش زمان اجرای اون رو تو یه سیستم بررسی نمی کنه بلکه این یه موضوع کاملا ریاضیه و مرتبه زمانی الگوریتم رو می شه بدون وابستگی به سیستم های مختلف به راحتی اندازه گیری و با هم مقایسه کرد:قلب:


خوب گفتم که این کد اصلا به برنامه اصلی کاری نداره!
رویداد Tick تایمر توی یه ترد جدا از ترد اصلی برنامه اجرا میشه.
فک نمیکنم مشکلی داشته باشه.
در ضمن من هیچوقت روی روش خودم پافشاری نمیکنم ولی چون به نظر من این روش مناسب بود دارم دفاع میکنم.در آخر هم مطمئن باشید اگه روش بهتری پیدا بشه من حتما اون ور خواهم آموخت. مثلا روشی که دوستمون ali.rezaei7 (http://barnamenevis.org/member.php?130237-ali.rezaei7) گفتن هم خیلی خوبه.و حتی تستش هم کردم ودیدم درسته و خوب جواب میده.
موفق باشی برنامه نویس!!!!!!