نمایش نتایج 1 تا 14 از 14

نام تاپیک: سورت با مولتی ترد

  1. #1

    سورت با مولتی ترد

    دوستان لطفا اگر در مود ای مساله اطلاعاتی می توانید بدهید دریغ نکنید نیمدونم جای درستی مطرح شده با نه:
    باید یک اپلایکشن بنویسم که 1000 تا عدد بگیره سه نوع SORT را انجام بدهد مثل سورت سریع و...که به صورت مولتی ترد باید پیاده شود وباید رشد شو با یه نمودار گرافیکی نشون بده (هر سه تا سورت رو باهم) چه طوری لین کار رو انجام بدم .

  2. #2
    عنوان بخش هست توسعه سیستم عامل، خودتون فکر می کنید اصلا این بحث ربطی به توسعه سیستم عامل داشته باشه؟!!
    اگر با دلفی کار میکنید، در Demo های دلفی برنامه ایی وجود داره که دقیقا این کاری که می خواید رو انجام میده.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  3. #3
    سلام
    اول یه سوال:
    شما با چه زبونی می خواهید این برنامه رو پیاده سازی کنید؟
    اما به هر حال اگه می خواهید بایکی از زبانهای مجموعه ی .Net
    (مثل VB.Net , یا #C و یا ++VC ) می خواهید بنویسیدش راه حل خیلی آسونه کافیه یه سری به MSDN ویزوال استادیو بزنید و کلمه ی thread و یا thread implementation را جستجو کنید کلی براتون نتیجه میاره
    در حالت کلی شما باید یه تابع تعریف کنید که این تابع بدنه ی نختون می شه بعدش با ید یه شی از کلاس Thread تعریف کنید
    بعدشم اونو run یا start کنید
    مثلا در #C باید به اول پروزه اضافه کنید:
    using System;
    using System.Threading;

    و اگه مثلا اسم تابع بدنه ی نخ threadproc باشه
    برای تعریف شی داریم:
    Thread t1 = new Thread(new ThreadStart(threadproc));

    برای اجرای نخ هم داریم:
    t1.start();

    امیدوارم مشکلتون حل بشه
    اگه نشد بازم همین جا تاپیک بزنید

  4. #4
    مرسی دوست عزیز بابت توجهتون .اون چیزایی روکه شما گفتید میدونستم.موضوع اینکه اگه قراره تو محیط console application این کار رو بکنیم(درسته ؟) چه طور 1000 تا عنصر رو تو یه ارایه بریزم چون فضای ارایه(system.array) نداریم .

  5. #5
    سلام
    لزومی نداره توی محیط کنسول بخواهی این کارو انجام بدی تازه توی win app باشه بهتره چون می تونی گرافیکی نتیجه رو نشون بدی
    حالا با فرض اینکه بخوای توی consol app این کارا انجام بدی(که توصیه نمیشه)نیازی به system.array نیست می تونی به راحتی برنامه ی مثالی زیر این کا رو انجام بدی
    using System;
    using System.Collections.Generic;
    using System.Text;


    namespace ConsoleApplication7
    {
    class Program
    {
    public static void bubble(/*parameters*/)
    {
    //code
    }
    int mymax = 10000;
    static void Main(string[] args)
    {
    Random rnd = new Random() ;

    int[] a = new int[mymax];
    for (int i = 0; i < max; i++)
    a[i]= rnd.Next ();


    }
    }
    }

    راستی نگفتی با چه زبونی می خوای کد بنویسی؟VB.net or Csharp

  6. #6
    using System;
    using System.Threading;

    public class ThreadExample
    {

    public static void bubble()
    {
    Random r = new Random();
    const int Max = 100;
    long[] x = new long[Max];
    long t,i,j;
    for (long ii = 0; ii < Max; ii++)
    {
    x[ii] = r.Next();//initialize x[ii]

    }
    for (i = 1; i < Max; i++) //begin of sort
    for (j = Max - 1; j >= i; j--)
    if (x[j - 1] > x[j])
    {
    // exchange elements
    t = x[j - 1];
    x[j - 1] = x[j];
    x[j] = t;
    } //end of sort
    Console.WriteLine("End of Bubble Sort***************************");
    for (long k = 0; k < Max; k++) //showing result
    Console.WriteLine("Bubble x[{1}]={0}", x[k],k);

    }

    public static void Main()
    {
    Random r = new Random();
    Thread t1 = new Thread(new ThreadStart(bubble));
    t1.Start();

    Console.ReadLine();
    }
    }

    شاید این تکه کد کمکت کنه

  7. #7
    با C#‎ دوست عزیز.من فکر می کردم که فقط تو کنسول میشه این کارو کرد اگه ممکنه بگید نتیجه رو چه طوری به صورت گرافیکی نشون داد .متشکرم

  8. #8
    با C#‎ دوست عزیز.من فکر می کردم که فقط تو کنسول میشه این کارو کرد اگه ممکنه بگید نتیجه رو چه طوری به صورت گرافیکی نشون داد
    این سایت برای #C بخش جداگانه ایی دارد.


    وَ سَيَعْلَمُ الَّذِينَ ظَلَمُوا [آل محمد حقهم] أَيَّ مُنْقَلَبٍ يَنْقَلِبُونَ - الشعراء (227)
    و ظالمین [حق آل محمد (ص) ] به زودی خواهند دانست که به کدام بازگشتگاه بازخواهند گشت.

  9. #9
    به خیلی روش ها میشه نشون داد
    مثلا چند تا progressbar بزاری و در حین اجرای ترد مقدارشونو update کنی
    یا چند تا خط روی فرو بزاری و ...
    زیاد توی این بحثش نباش فقط همون که بتونی با سه تا نخ این کارو انجام بدی و مشخص بشه کدوم الگوریتم سریع تر است کافیه .
    مثلا هر کدوم تمام شد یه message بده که من تموم شدم

  10. #10
    دوست عزیز یه نوار پیشرفت توی فرم گذاشتم با همین تابع bubble اما این پیغامو میده:

    Cross-thread operation not valid: Control 'progressBar1' accessed
    from a thread other than the thread it was created on.

    چطوری بفهمه کی باید پر بشه

  11. #11
    لطفا یه نگاهی به این کد بندازید .من همچین یکم مبتدی ام نمی دونم مشکلش چیه.چه طوری اون الگوریتم هایی رو که دارم تغییر بدم که کار کنه

  12. #12

    using
    System;
    using System.Threading;
    publicclassThreadExample
    {
    publicvoid sortArray()
    {
    q_sort( 0, x-1 );
    }
    }
    publicstaticvoid q_sort( int left, int right )
    {
    int pivot, l_hold, r_hold;
    l_hold = left;
    r_hold = right;
    pivot = a[left];
    while( left < right )
    {
    while( (a[right] >= pivot) && (left < right) )
    {
    right--;
    }
    if( left != right )
    {
    a[left] = a[right];
    left++;
    }
    while( (a[left] <= pivot) && (left < right) )
    {
    left++;
    }
    if( left != right )
    {
    a[right] = a[left];
    right--;
    }
    }
    a[left] = pivot;
    pivot = left;
    left = l_hold;
    right = r_hold;
    if( left < pivot )
    {
    q_sort( left, pivot-1 );
    }
    if( right > pivot )
    {
    q_sort( pivot+1, right );
    }
    }
    ////
    privatevoid MergeSort(string[] a)
    {
    string[] a1 = SubArray(a, 0, a.Length / 2 - 1);
    string[] a2 = SubArray(a, a.Length / 2, a.Length - 1);
    if (a1.Length > 1) MergeSort(a1);
    if (a2.Length > 1) MergeSort(a2);
    Merge(a1, a2, a);
    }
    privatevoid Merge(string[] a1, string[] a2, string[] a)
    {
    int i = 0, j = 0, h = 0;
    while (i < a1.Length || j < a2.Length)
    {
    if (i == a1.Length) a[h++] = a2[j++];
    elseif (j == a2.Length) a[h++] = a1[i++];
    else
    if (a1[i].CompareTo(a2[j]) < 0)
    {
    a[h++] = a1[i++];
    }
    elseif (a1[i].CompareTo(a2[j]) > 0)
    {
    a[h++] = a2[j++];
    }
    else
    {
    a[h++] = a1[i++];
    a[h++] = a2[j++];
    }
    }
    }
    privatestring[] SubArray(string[] array, int start, int end)
    {
    string[] sub = newstring[end - start + 1];
    for (int i = start; i <= end && i < array.Length; i++)
    {
    sub[i - start] = array[i];
    }
    return sub;
    }
    //end merge sort

    publicstaticvoid Main()
    {
    Random r =
    new Random();
    Thread t1 =
    new Thread(new ThreadStart(qsort));
    t1.Start();
    Thread t2 =
    new Thread(new ThreadStart(mergesort));
    t2.Start();

    }
    }

  13. #13
    سلام
    باید ببخشید من یه چند روزی سر نزدم
    شما نمی توانید مستقیما از ترد به فرم دسترسی پیدا کنید
    شما باید مثلا تایمر را راه بیندازید وتایمر این کارو براتون انجام بده
    آخر ترد هم تایمر را متوقف کنید.
    لازم نیست حتما به طور منظم پر بشه میتونید اونو مرتب پر و خالی کنید
    فعلا

  14. #14

    سلام

    برنامه منو ببینید(البته حرفه ای نیست)
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: zip OS.zip‏ (51.5 کیلوبایت, 59 دیدار)

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •