زمان بندی FIFO

0 امتیاز
44 بازدید
سوال شده آذر 6, 1394 توسط M_Effatmanesh  

سلام ؛ من یه برنامه نوشتم برای سه تا فرآیند که زمان بندی بشن و سه تا خروجی متوسط زمان بازگشت و متوسط زمان انتظار و متوسط زمان بازگشت نرمال روخروجی بگیرم . برنامه ام ارور نداره اما خروجی رو به من نمیده ! لطفا کمکم کنید . برنامه توی محیط فرم نوشته شده .

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OS
{
    public partial class Form4 : Form
    {

        public float aveR;
        public float aveW;
        public float aveNR;
        
        int[] it = new int[3];
        int[] pt = new int[3];
        
        int[] IT = new int[3];
        int[] PT = new int[3];

        int[] sum = new int[3];
        int[] cross = new int[3];

        int[] s = new int[3];
        int[] f = new int[3];
        int[] r = new int[3];
        int[] w = new int[3];
        int[] nr = new int[3];

        public Form4()
        {
            InitializeComponent();
        }

        private void perform_Click(object sender, EventArgs e)
        {
            I0txt.Text = I0txt.Text.Trim();
            it[0] = Convert.ToInt32(I0txt.Text);
            I1txt.Text = I1txt.Text.Trim();
            it[1] = Convert.ToInt32(I1txt.Text);
            I2txt.Text = I2txt.Text.Trim();
            it[2] = Convert.ToInt32(I2txt.Text);

            P0txt.Text = P0txt.Text.Trim();
            pt[0] = Convert.ToInt32(P0txt.Text);
            P1txt.Text = P1txt.Text.Trim();
            pt[1] = Convert.ToInt32(P1txt.Text);
            P2txt.Text = P2txt.Text.Trim();
            pt[2] = Convert.ToInt32(P2txt.Text);

            sum[0] = it[0] + pt[0];
            cross[0] = it[0] * pt[0];
            sum[1] = it[1] + pt[1];
            cross[1] = it[1] * pt[1];
            sum[2] = it[2] + pt[2];
            cross[2] = it[2] * pt[2];

            IT[0] = it[0];
            IT[1] = it[1];
            IT[2] = it[2];

            int temp = 0;
            for (int i = 0; i < IT.Length; i++)
            {
                for (int j = 0; j < IT.Length - 1; j++)
                {
                    if (IT[j] > IT[j + 1])
                    {
                        temp = IT[j + 1];
                        IT[j + 1] = IT[j];
                        IT[j] = temp;
                    }
                }
            }

            for (int x = 0; x < PT.Length - 1; x++)
            {
                PT[x] = pt[0];
                for (int y = 0; y <= PT.Length - 1; ++y)
                {
                    if (sum[x] != IT[x] + PT[x] && cross[x] != IT[x] * PT[x])
                    {
                        PT[x] = pt[y];
                    }
                }
            }

            for (int k = 0; k <= 2; k++)
            {
                if (k == 0)
                {
                    s[0] = IT[0];
                    w[0] = 0;
                }
                else
                {
                    for (int h = 1; h <= 2; h++)
                    {
                        w[h] = f[h - 1] - IT[h];
                        s[h] = f[h - 1];
                    }
                }
                f[k] = s[k] + PT[k];
                r[k] = f[k] - IT[k];
                if(PT[k]!=0)
                {
                    nr[k] = r[k] / PT[k];
                }
   
            }

            for (int m = 0; m <= 2; m++)
            {

                aveR = aveR + r[m];
                aveW = aveW + w[m];
                aveNR = aveNR + nr[m];

            }

            aveR = aveR / 3;
            aveW = aveW / 3;
            aveNR = aveNR / 3;

        }

        private void aveRtxt_TextChanged(object sender, EventArgs e)
        {
            aveRtxt.Text = aveR.ToString();
        }

        private void avaWtxt_TextChanged(object sender, EventArgs e)
        {
            aveWtxt.Text = aveW.ToString();
        }

        private void aveNRtxt_TextChanged(object sender, EventArgs e)
        {
            aveNRtxt.Text = aveNR.ToString();
        }
    }
}

 

این مطلب را به اشتراک بگذارید

1 پاسخ

+1 امتیاز
پاسخ داده شده آذر 7, 1394 توسط M_Effatmanesh  
انتخاب شده آذر 7, 1394 توسط ASHKARAN
 
بهترین پاسخ

با کمک جناب آشکاران مشکل برنامه رفع شد . به پیشنهاد خود ایشون کد درست رو هم میذارم . البته نامگذاری ها هم اصلاح و واضح تر شده .

زمان بندی FIFO :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OS
{
    public partial class Form4 : Form
    {

        public float aveR;
        public float aveW;
        public float aveNR;
        
        int[] inputT = new int[3];
        int[] processT = new int[3];

        int[] start = new int[3];
        int[] finish = new int[3];
        int[] back = new int[3];
        int[] wait = new int[3];
        int[] normalBack = new int[3];

        public Form4()
        {
            InitializeComponent();
        }

        private void perform_Click(object sender, EventArgs e)
        {
            I0txt.Text = I0txt.Text.Trim();
            inputT[0] = Convert.ToInt32(I0txt.Text);
            I1txt.Text = I1txt.Text.Trim();
            inputT[1] = Convert.ToInt32(I1txt.Text);
            I2txt.Text = I2txt.Text.Trim();
            inputT[2] = Convert.ToInt32(I2txt.Text);

            P0txt.Text = P0txt.Text.Trim();
            processT[0] = Convert.ToInt32(P0txt.Text);
            P1txt.Text = P1txt.Text.Trim();
            processT[1] = Convert.ToInt32(P1txt.Text);
            P2txt.Text = P2txt.Text.Trim();
            processT[2] = Convert.ToInt32(P2txt.Text);

            int temp1 = 0, temp2 = 0;
            for (int i = 0; i < inputT.Length; i++)
            {
                for (int j = 0; j < inputT.Length - 1; j++)
                {
                    if (inputT[j] > inputT[j + 1])
                    {
                        temp1 = inputT[j + 1];
                        inputT[j + 1] = inputT[j];
                        inputT[j] = temp1;

                        temp2 = processT[j + 1];
                        processT[j + 1] = processT[j];
                        processT[j] = temp2;
                    }
                }
            }

            for (int k = 0; k <= 2; k++)
            {
                if (k == 0)
                {
                    start[0] = inputT[0];
                }
                else
                {
                    for (int h = 1; h <= 2; h++)
                    {
                        start[h] = finish[h - 1];
                    }
                }

                finish[k] = start[k] + processT[k];
                back[k] = finish[k] - inputT[k];
                wait[k] = back[k] - processT[k];
                if (processT[k] != 0)
                {
                    normalBack[k] = back[k] / processT[k];
                }
   
            }

            for (int m = 0; m <= 2; m++)
            {

                aveR = aveR + back[m];
                aveW = aveW + wait[m];
                aveNR = aveNR + normalBack[m];

            }

            aveR = aveR / 3;
            aveW = aveW / 3;
            aveNR = aveNR / 3;

            aveRtxt.Text = aveRtxt.Text.Trim();
            aveRtxt.Text = aveR.ToString();
            aveWtxt.Text = aveWtxt.Text.Trim();
            aveWtxt.Text = aveW.ToString();
            aveNRtxt.Text = aveNRtxt.Text.Trim();
            aveNRtxt.Text = aveNR.ToString();

        }
    }
}

برای زمان بندی LIFO هم دقیقا از همین کد فقط با تغییر سورت از صودی به نزولی استفاده کردم که اون رو هم میذارم فقط یه مشکلی داره ! اونم اینکه اعداد خروجی در حد دهم و صدم با اعداد واقعی تفاوت دارن ! ممنون میشم کمک کنید این مشکل هم حل شه !

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace OS
{
    public partial class Form5 : Form
    {

        public float aveR;
        public float aveW;
        public float aveNR;

        int[] inputT = new int[3];
        int[] processT = new int[3];

        int[] start = new int[3];
        int[] finish = new int[3];
        int[] back = new int[3];
        int[] wait = new int[3];
        int[] normalBack = new int[3];

        public Form5()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            I0txt.Text = I0txt.Text.Trim();
            inputT[0] = Convert.ToInt32(I0txt.Text);
            I1txt.Text = I1txt.Text.Trim();
            inputT[1] = Convert.ToInt32(I1txt.Text);
            I2txt.Text = I2txt.Text.Trim();
            inputT[2] = Convert.ToInt32(I2txt.Text);

            P0txt.Text = P0txt.Text.Trim();
            processT[0] = Convert.ToInt32(P0txt.Text);
            P1txt.Text = P1txt.Text.Trim();
            processT[1] = Convert.ToInt32(P1txt.Text);
            P2txt.Text = P2txt.Text.Trim();
            processT[2] = Convert.ToInt32(P2txt.Text);

            int temp1 = 0, temp2 = 0;
            for (int i = 0; i < inputT.Length; i++)
            {
                for (int j = 0; j < inputT.Length - 1; j++)
                {
                    if (inputT[j] < inputT[j + 1])
                    {
                        temp1 = inputT[j + 1];
                        inputT[j + 1] = inputT[j];
                        inputT[j] = temp1;

                        temp2 = processT[j + 1];
                        processT[j + 1] = processT[j];
                        processT[j] = temp2;
                    }
                }
            }

            for (int k = 0; k <= 2; k++)
            {
                if (k == 0)
                {
                    start[0] = inputT[0];
                }
                else
                {
                    for (int h = 1; h <= 2; h++)
                    {
                        start[h] = finish[h - 1];
                    }
                }

                finish[k] = start[k] + processT[k];
                back[k] = finish[k] - inputT[k];
                wait[k] = back[k] - processT[k];
                if (processT[k] != 0)
                {
                    normalBack[k] = back[k] / processT[k];
                }

            }

            for (int m = 0; m <= 2; m++)
            {

                aveR = aveR + back[m];
                aveW = aveW + wait[m];
                aveNR = aveNR + normalBack[m];

            }

            aveR = aveR / 3;
            aveW = aveW / 3;
            aveNR = aveNR / 3;

            aveRtxt.Text = aveRtxt.Text.Trim();
            aveRtxt.Text = aveR.ToString();
            aveWtxt.Text = aveWtxt.Text.Trim();
            aveWtxt.Text = aveW.ToString();
            aveNRtxt.Text = aveNRtxt.Text.Trim();
            aveNRtxt.Text = aveNR.ToString();

        }
    }
}

این برنامه با زبان سی شارپ و در محیط فرم نوشته شده !
 

دارای دیدگاه آذر 7, 1394 توسط ASHKARAN  
با تشکر از شما

امیدوارم موفق باشید.
دارای دیدگاه آذر 9, 1394 توسط ASHKARAN  

برای مشکلی که فرمودید احتمالا جایی در محاسبات اعشار رند میشن.....

مثلا در تبدیل نوع داده ای از String  به Double  و ....

به عنوان مثال به قسمت زیر توجه بفرمایید:

aveR = aveR / 3;

کد رو بیشتر بررسی کنید ان شاالله مشکل حل میشه....

دارای دیدگاه آذر 9, 1394 توسط M_Effatmanesh  
ممنون از راهنماییتون ! اما این اتفاق برای زمان بندی fifo نمیفته ! فقط برای lifo این مشکل وجود داره در صورتی که من برای lifo فقط یه علامت کوچکتر بزرگتر رو تغییر دادم ! برای همین متوجه اشکال نمیشم !

1,004 سوال

838 پاسخ

1,352 دیدگاه

1,308 کاربر

این مطلب را به اشتراک بگذارید

ali.ashkaran@gmail
ما .....
  • سعی بر پاسخگویی به سوالات دیگران داریم.
  • به سوال و یا نظر دیگران احترام می گذاریم .
  • این وبسایت را به دیگران معرفی می کنیم.
  • همواره صمیمیت و ادب را رعایت می کنیم.
  • به سوالمان برچسب های مرتبط اضافه می کنیم.
  • در حین طرح سوال فرد خاصی را مخاطب قرار نمی دهیم .
...