Ejemplo n.º 1
0
 void generateToolStripMenuItem_Click(object sender, EventArgs e)
 {
     try
     {
         GenForm gf = new GenForm();
         if (gf.ShowDialog() != DialogResult.OK)
         {
             return;
         }
         int      smpCount = int.Parse(gf.tbSmpCount.Text);
         double   mN = double.Parse(gf.tbMN.Text), sN = double.Parse(gf.tbSN.Text);
         double   mQ = double.Parse(gf.tbMQ.Text), sQ = double.Parse(gf.tbSQ.Text);
         double   AQL = double.Parse(gf.tbAQL.Text);
         int[]    arrQ;
         string[] arrCT;
         Result[] arrRes;
         arrStr = StatInspection.Inspect(smpCount, mN, sN, mQ, sQ, AQL, gf.cbCT.Text, gf.cbCL.Text,
                                         out arrN, out arrAc, out arrQ, out arrCT, out arrRes);
         lv.Items.Clear();
         for (int i = 0; i < arrN.Length; i++)
         {
             lv.Items.Add(new ListViewItem(new string[] {
                 string.Format("{0}", i + 1), arrN[i].ToString(), arrAc[i].ToString(),
                 arrQ[i].ToString(), arrRes[i].ToString(), arrCT[i]
             }));
         }
     }
     catch
     {
         MessageBox.Show("Ошибочные исходные данные");
     }
 }
Ejemplo n.º 2
0
        void lv_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                int i = lv.SelectedIndices[0];
                wb.DocumentText = arrStr[i];
                ps.Clear();
                double[] arrP, arrL;
                arrL = StatInspection.GetL(arrN[i], arrAc[i], out arrP);

                LinePlot lp = new LinePlot(arrL, arrP);
                lp.Color = Color.Red;
                ps.Add(lp);
                ps.Title        = "Оперативная характеристика (по закону Пуассона)";
                ps.XAxis1.Label = "Уровень качества, q";
                ps.YAxis1.Label = "Оперативная характеристика, L";
                ps.Refresh();
            }
            catch { }
        }
Ejemplo n.º 3
0
        static public string[] Inspect(int smpCount, double mN, double sN,
                                       double mQ, double sQ, double AQL, string controlType, string controlLevel,
                                       out int[] arrN, out int[] arrAc, out int[] arrQ,
                                       out string[] arrControlType, out Result[] arrResult)
        {
            List <string> listStr = new List <string>();
            List <int>    listN   = new List <int>();
            List <int>    listAc  = new List <int>();
            List <int>    listQ   = new List <int>();
            List <string> listCT  = new List <string>();
            List <Result> listRes = new List <Result>();

            for (int i = 0; i < smpCount; i++)
            {
                int    nLot = Generator.NextN(mN, sN);
                string nCode = StatInspection.GetNCode(controlLevel, nLot);
                int    n = StatInspection.GetN(nCode, controlType);
                int    Re, Ac = StatInspection.GetAcRe(nCode, controlType, AQL, out Re);
                int    q   = Generator.NextQ(nLot, mQ, sQ);
                Result res = Result.Не_определено;
                if (q <= Ac)
                {
                    res = Result.Принята;
                }
                else if (q >= Re)
                {
                    res = Result.Забракована;
                }
                string s = string.Format("Объем партии: {0}<br>Вид контроля: {1}<br>" +
                                         "Код объема выборки: {2}<br>Объем выборки: {3}<br>Ac = {4}<br>Re = {5}<br>" +
                                         "q = {6}<br>Результат: {7}<br>",
                                         nLot, controlType, nCode, n, Ac, Re, q, res);
                listN.Add(n);
                listAc.Add(Ac);
                listQ.Add(q);
                listCT.Add(controlType);
                listRes.Add(res);

                if (controlType == "Нормальный")
                {
                    int j, k = 0;
                    for (j = 0; j < 5; j++)
                    {
                        int index = listCT.Count - 1 - j;
                        if (index < 0 || listCT[index] != "Нормальный")
                        {
                            break;
                        }
                        if (listRes[index] == Result.Забракована)
                        {
                            k++;
                        }
                    }
                    if (j == 5 && k >= 2)
                    {
                        controlType = "Усиленный";
                        s          += " (переход на усиленный контроль: из пяти партий две или более забракованы)";
                        listStr.Add(s);
                        continue;
                    }

                    k = 0;
                    for (j = 0; j < 10; j++)
                    {
                        int index = listCT.Count - 1 - j;
                        if (index < 0 || listCT[index] != "Нормальный" ||
                            listRes[index] == Result.Забракована)
                        {
                            break;
                        }
                        k += listQ[index];
                    }
                    int lim = StatInspection.GetLim(n, AQL);
                    if (j == 10 && k <= lim)
                    {
                        controlType = "Ослабленный";
                        s          += " (переход на ослабленный контроль: десять партий приняты, " +
                                      "суммарное количество дефектов не превышает предельное приемочное число "
                                      + lim.ToString() + ")";
                        listStr.Add(s);
                        continue;
                    }
                }

                if (controlType == "Усиленный")
                {
                    int j, k = 0;
                    for (j = 0; j < 5; j++)
                    {
                        int index = listCT.Count - 1 - j;
                        if (index < 0 || listCT[index] != "Усиленный")
                        {
                            break;
                        }
                        if (listRes[index] == Result.Забракована)
                        {
                            k++;
                        }
                    }
                    if (j == 5 && k == 0)
                    {
                        controlType = "Нормальный";
                        s          += " (переход на нормальный контроль: пять партий приняты)";
                        listStr.Add(s);
                        continue;
                    }
                }

                if (controlType == "Ослабленный")
                {
                    if (res == Result.Забракована || res == Result.Не_определено)
                    {
                        controlType = "Нормальный";
                        s          += " (переход на нормальный контроль: партия не принята)";
                        listStr.Add(s);
                        continue;
                    }
                }
                listStr.Add(s);
            }
            arrN           = listN.ToArray();
            arrAc          = listAc.ToArray();
            arrQ           = listQ.ToArray();
            arrControlType = listCT.ToArray();
            arrResult      = listRes.ToArray();
            return(listStr.ToArray());
        }