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

نام تاپیک: طریقه نوشتن یک الگوریتم متوالی

  1. #1

    طریقه نوشتن یک الگوریتم متوالی

    با سلام خدمت دوستان
    در یک برنامه ما چند متغیر داریم که در یک Thread جداگانه مرتب مقدارشان تغییر می کند. حال می خواهیم در برنامه یک کلاس تعریف کنیم که یک الگوریتمی را به شکل زیر پیاده سازی کند:
    مثلاً ابتدا متغیر a را دائماً چک کند هر گاه این متغیر مقدار مشخصی گرفت آنگاه به مرحله بعد می رود. در این مرحله مثلاً 4 متغیر b1 تا b4 را دائماً چک می کند. هرگاه این 4 متغیر در شرایط خاصی قرار گرفتند آنگاه به مرحله بعدی می رود. در این مرحله مثلاً متغیر c را چک می کند و ال آخر
    می خواستم بدانم روش اصولی پیاده سازی چنین الگوریتمی چگونه است. من خودم با استفاده از تایمرها پیاده سازی کردم. مثلاً ابتدا تایمر اول شروع به کار می کند و در فواصل زمانی مشخص متغیر a را چک می کند. هر گاه a شرط لازم را داشت آنگاه تایمر اول غیر فعال شده و تایمر دوم شروع به کار می کند. این تایمر نیز در فواصل زمانی مشخص مقادیر 4 متغیر b1 تا b4 را چک می کند. هر زمان این 4 متغیر شرایط مورد نظر ما را داشتند آنگاه تایمر دوم را هم غیر فعال می کنم و تایمر سوم شروع به کار می کند و ال آخر.

    ممنون می شوم دوستان راهنمایی کنند که آیا این کار اصولی است یا خیر و اصولاً روش منطقی برای پیاده سازی اینچنین الگوریتم ها چیست؟ ممنون

  2. #2

    نقل قول: طریقه نوشتن یک الگوریتم متوالی

        public class MyData
    {
    private enum Steps
    {
    A = 1,
    B,
    C,
    D
    }
    private Steps _step;
    private int _a;
    private int _b1;
    private int _b2;

    public int a
    {
    get { return _a; }
    set { _a = value; a_Changed(); }
    }
    public int b1
    {
    get { return _b1; }
    set { _b1 = value; b_Changed(); }
    }
    public int b2
    {
    get { return _b2; }
    set { _b2 = value; b_Changed(); }
    }


    private void a_Changed()
    {
    if (_step == Steps.A)
    {
    if (_a == 10) _step = Steps.B;
    }
    }

    private void b_Changed()
    {
    if (_step == Steps.B)
    {
    if (_b1 == 20 && _b2 == 30)
    _step = Steps.C;
    }
    }
    }

  3. #3

    نقل قول: طریقه نوشتن یک الگوریتم متوالی

    ممنون از راهنماییتان. خیلی جالب بود. می خواستم بدانم اینگونه الگوریتم ها که ما State های مختلفی داریم و بر حسب شرایط برنامه باید از یک State به State دیگر برویم، نام و عنوان خاصی دارند؟ آیا منبعی برای توضیحات کامل تر برای این نوع برنامه ها سراغ دارید؟ ممنون

  4. #4

    نقل قول: طریقه نوشتن یک الگوریتم متوالی

    نقل قول نوشته شده توسط smt1383 مشاهده تاپیک
    می خواستم بدانم اینگونه الگوریتم ها که ...... نام و عنوان خاصی دارند؟
    نمیدونم ... من همینجوری این به فکرم رسید نوشتم ...
    نقل قول نوشته شده توسط smt1383 مشاهده تاپیک
    آیا منبعی برای توضیحات کامل تر برای این نوع برنامه ها سراغ دارید؟
    از اونجایی که نمیدونم اینگونه برنامه ها چی هستن پس نه ... اینجا a_Changed() در واقع یه event handler سادس ... کاملترش میشه اینجوری ...
        public enum Steps
    {
    A = 1,
    B,
    C,
    D
    }
    public class MyData
    {
    public Steps Step { get; set; }
    private int _a;
    private int _b1;
    private int _b2;

    public delegate void ValueChangedEventHandler(object sender, EventArgs e);
    public event ValueChangedEventHandler PropertyValueChanged;

    public int a
    {
    get { return _a; }
    set { _a = value; PropertyValueChanged(this, new EventArgs()); }
    }
    public int b1
    {
    get { return _b1; }
    set { _b1 = value; PropertyValueChanged(this, new EventArgs()); }
    }
    public int b2
    {
    get { return _b2; }
    set { _b2 = value; PropertyValueChanged(this, new EventArgs()); }
    }
    }


    private void button2_Click(object sender, EventArgs e)
    {
    MyData data = new MyData();
    data.PropertyValueChanged += new MyData.ValueChangedEventHandler(data_PropertyValue Changed);
    }

    void data_PropertyValueChanged(object sender, EventArgs e)
    {
    MyData data = sender as MyData;
    switch (data.Step)
    {
    case Steps.A:
    if (data.a == 10) data.Step = Steps.B;
    break;
    case Steps.B:
    if (data.b1 == 20 && data.b2 == 30)
    data.Step = Steps.C;
    break;
    case Steps.C:
    break;
    case Steps.D:
    break;
    }
    }


    البته این به حالت کلیه ... میتونین برای هر متغیر یه event جداگانه تعریف کنین ...

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

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