private void button1_Click(object sender, EventArgs e)
        {
            var IP = new Encoder();

            int       m = 7; // число символов в алфавите
            const int N = 32;

            //алфавит слов
            string[] alph = new string[N] {
                "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31"
            };
            //двоичная форма алфавита
            string[] bin = new string[N] {
                "00000", "00001", "00010", "00011", "00100", "00101", "00110", "00111", "01000", "01001", "01010", "01011", "01100", "01101", "01110", "01111", "10000", "10001", "10010", "10011", "10100", "10101", "10110", "10111", "11000", "11001", "11010", "11011", "11100", "11101", "11110", "11111"
            };
            //порождающая матрица
            int[,] G = new int[5, 9] {
                { 1, 0, 0, 0, 0, 0, 1, 0, 1 },
                { 0, 1, 0, 0, 0, 1, 0, 1, 1 },
                { 0, 0, 1, 0, 0, 1, 1, 0, 0 },
                { 0, 0, 0, 1, 0, 0, 1, 1, 0 },
                { 0, 0, 0, 0, 1, 0, 0, 1, 1 }
            };
            //транспонированная проверочная матрица
            int[,] Ht = new int[9, 4] {
                { 0, 1, 0, 1 },
                { 1, 0, 1, 1 },
                { 1, 1, 0, 0 },
                { 0, 1, 1, 0 },
                { 0, 0, 1, 1 },
                { 1, 0, 0, 0 },
                { 0, 1, 0, 0 },
                { 0, 0, 1, 0 },
                { 0, 0, 0, 1 },
            };

            string[] erp = new string[9] {
                "0101", "1011", "1100", "0110", "0011", "1000", "0100", "0010", "0001"
            };
            string[] inw     = new string[m]; //входное слово
            string[] binalph = new string[m]; //бинарный алфавит кодовых слов
            int[]    dh      = new int[m];
            string   bs      = "";
            string   fl      = "";

            binalph = IP.Bicode(bin, G);//получение бинарного алфавита кодовых слов

            fl = textBox1.Text;
            var sep = new char[] { ' ' };
            var st1 = fl.Split(sep, StringSplitOptions.RemoveEmptyEntries);

            IP.Write("Input.txt", st1);
            inw = IP.Read("Input.txt");

            bs            = IP.Encode(binalph, inw, alph);
            textBox2.Text = bs;
            binalph       = IP.Bicode(bin, G);

            var st2 = bs.Split(sep, StringSplitOptions.RemoveEmptyEntries);

            dh = IP.DistHamm(st2);
            //bf = IP.Fix(erp, rtes, Ht);
            //bs = IP.Decode(alph, bf, binalph);
            //fl = IP.Errors(alph, dtes, binalph);

            for (int i = 0; i < binalph.Length; i++)
            {
                richTextBox2.Text += alph[i] + ": " + bin[i] + ": " + binalph[i] + Environment.NewLine;
            }

            int hi = 0;

            for (int i = 0; i < st2.Length; i++)
            {
                int j = 0;
                while (j < st2.Length)
                {
                    if (i != j)
                    {
                        richTextBox1.Text += st2[i] + " " + st2[j] + " " + dh[hi].ToString() + Environment.NewLine;
                        hi++;
                    }
                    j++;
                }
            }

            textBox4.Text = "1";
            textBox5.Text = "16";
            double dp = 0;

            dp            = 5 * (Math.Pow(2, 4) / (Math.Pow(2, 5) - 1));
            textBox6.Text = dp.ToString();
            if (dh.Length > 0)
            {
                textBox7.Text = IP.MinDH(dh);
            }
            else
            {
                textBox7.Text = "0";
            }

            var arr = bs.Split(sep, StringSplitOptions.RemoveEmptyEntries);

            IP.Write("DInput.txt", arr);
        }
Exemple #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            var IP = new Encoder();

            int m  = 7;                     // число символов в алфавите
            int dw = 5;                     // число символов в слове

            double[] p1   = new double[m];  //распределение
            double[] p    = new double[m];  //распределение для создания строки
            double[] q    = new double[m];  //кумулятивная вероятность
            double[] sigm = new double[m];  //кодировка в десятичной форме
            string[] alp  = new string[m];  //алфавит слов
            string[] alph = new string[m];  //кодировка в двоичной форме
            string[] en   = new string[m];  // алфавит кодов
            string[] inw  = new string[dw]; //входное слово
            int[]    wl   = new int[m];
            string   bf   = "";
            string   fl   = "";
            double   A_l  = 0; // Средняя длина
            double   Entr = 0; // Энтропия



            fl = textBox1.Text;
            var sep = new char[] { ' ' };
            var st1 = fl.Split(sep, StringSplitOptions.RemoveEmptyEntries);

            string[] arr = new string[st1.Length];
            for (int i = 0; i < st1.Length; i++)
            {
                arr[i] = st1[i];
            }

            IP.Write("Input.txt", arr);
            //Form2 f = new Form2();

            if (radioButton1.Checked)
            {
                p1 = IP.ReadArray("P1.txt");
            }
            if (radioButton2.Checked)
            {
                p1 = IP.ReadArray("P2.txt");
            }
            if (radioButton3.Checked)
            {
                p1 = IP.ReadArray("Rav.txt");
            }


            // p1 = IP.ReadArray("P1.txt");
            alp = IP.Read("ALP.txt");

            //ВЕСЬ КОД НИЖЕ РАБОТАЕТ !!!ВМЕСТО!!! ВВОДА СЛОВ ВРУЧНУЮ. ОН САМ СОЗДАЁТ ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ ДЛЯ КОДИРОВАНИЯ
            //ДОБАВЬ КНОПКИ ДЛЯ ВЫБОРА РАСПРЕДЕЛЕНИЯ ДЛЯ ФОРМИРОВАНИЯ СТРОКИ
            if (radioButton6.Checked)
            {
                p = IP.ReadArray("P1.txt");
            }
            if (radioButton5.Checked)
            {
                p = IP.ReadArray("P2.txt");
            }
            if (radioButton4.Checked)
            {
                p = IP.ReadArray("Rav.txt");
            }

            string str_buf = "";
            double p_i;
            int    pb;
            int    simv = 0;

            for (int i = 0; i < 7; i++)
            {
                p_i   = 1000 * p[i];
                pb    = (int)p_i;
                simv += pb;
                for (int j = 0; j < p_i; j++)
                {
                    str_buf += alp[i];
                    str_buf += " ";
                }
            }
            textBox8.Text = simv.ToString();

            textBox1.Text = str_buf;

            var st3 = str_buf.Split(sep, StringSplitOptions.RemoveEmptyEntries);

            string[] ar = new string[st3.Length];
            for (int i = 0; i < st3.Length; i++)
            {
                ar[i] = st3[i];//МАССИВ AR НУЖНО ЗАПИСАТЬ В ФАЙЛ.
            }
            IP.Write("Input.txt", ar);

            /////////////////////////////////////////////////////

            inw = IP.Read("Input.txt");

            q             = IP.Cumul_Prob(p1, m);
            sigm          = IP.Alphabet(m, p1, q);
            wl            = IP.Words_len(p1, m);
            alph          = IP.TenToBin(wl, sigm, m);
            bf            = IP.Encode(alph, inw, alp);
            textBox2.Text = bf;

            textBox6.Clear();
            // Вывод закодированного алфавита
            for (int j = 0; j < m; j++)
            {
                textBox6.Text += alp[j].ToString() + ": " + alph[j].ToString() + Environment.NewLine;
            }

            textBox5.Clear();
            if (IP.Kraft(wl, m))  // Проверка неравенства Крафта
            {
                textBox5.Text = "Выполняется";
            }
            else
            {
                textBox5.Text = "Не выполняется";
            }


            A_l = IP.Average_length(wl, p1, m);
            textBox3.Clear();
            textBox3.Text = A_l.ToString(); // Средняя длина

            Entr = IP.Entropy(p1, m);
            textBox7.Clear();
            textBox7.Text = IP.Entropy(p1, m).ToString(); // Энтропия

            textBox4.Clear();
            textBox4.Text = IP.Redundancy(A_l, Entr).ToString(); // Избыточность

            var st2 = bf.Split(sep, StringSplitOptions.RemoveEmptyEntries);

            string[] t = new string[st2.Length];
            for (int i = 0; i < st2.Length; i++)
            {
                t[i] = st2[i];
            }
            IP.Write("DInput.txt", t);
        }