@a63826ndrew
Студент, новичок в Python

Где находится ошибка и как ее исправить?

Здравствуйте, мастера по С#, надеюсь на вашу помощь!
У меня есть данный код, переделанный под WinForms:
int n = 10, k = 0;
            bool key = false;
            string[] str = new string[k];
            var sb = new StringBuilder();
            var result = sb.ToString();
            while (n < 1 || n > 5)
            {
                n = Convert.ToInt32(FunctionAmount.Text);
            }
            string znach = FunctionValues.Text;
            if (znach.Length != (int)Math.Pow(2, n))
            {
                MessageBox.Show("Введено неверное количество значений функции");
                goto end;
            }
            for (int i = 0; i < (int)Math.Pow(2, n); i++)
                if (Convert.ToInt32(znach[i]) < 49 && Convert.ToInt32(znach[i]) > 50)
                {
                    MessageBox.Show("Введены недопустимые значения функции");
                    goto end;
                }
            for (int i = 0; i < (int)Math.Pow(2, n); i++)
                if (znach[i] == '1')
                {
                    k++;
                    Array.Resize<string>(ref str, k);
                    char[] chars = Convert.ToString(i, 2).PadLeft(n, '0').ToCharArray();
                    for (int j = 0; j < n; j++)
                    {
                        if (chars[j] == '0')
                            chars[j] = Convert.ToChar(97 + j);
                        if (chars[j] == '1')
                            chars[j] = Convert.ToChar(65 + j);
                    }
                    string strr = new string(chars);
                    str[k - 1] = strr;
                }
            foreach (string strng in str)
            {
                sb.AppendLine(strng + " ");
            }
            sb.AppendLine();
            while (!key)
            {
                key = true;
                string[] ptr = new string[0];  //массив для склеек на данном этапе
                int[] reuse = new int[str.Length];  //массив меток
                for (int l = 0; l < reuse.Length; l++) //метка использования (был ли задействован кусок ДНФ на данной итерации)
                {
                    reuse[l] = 0;
                }
                for (int i = 0; i < str.Length; i++) //попарно сравниваем
                {
                    for (int j = i + 1; j < str.Length; j++)
                    {
                        if (str[i].Length == str[j].Length) //если длинв одинаковы то вперед
                        {
                            int sbnr = 20, sbcnt = 0, sbcntt = 0;   //переменные для нахождения кол-ва различных знаков иномера знака с различием
                            char[] charsi = str[i].ToCharArray();  //конвертнем в массивы
                            char[] charsj = str[j].ToCharArray();
                            for (int l = 0; l < charsi.Length; l++)
                            {
                                if (Convert.ToInt32(charsi[l]) - Convert.ToInt32(charsj[l]) == 32)
                                {
                                    sbnr = l;
                                    sbcnt++;
                                }
                                if (charsi[l] == charsj[l])
                                {
                                    sbcntt++;
                                }
                            }
                            sbcntt++;
                            if (sbcnt == 1 && sbcntt == charsi.Length) //если куски ДНФ различаются на 1 знак
                            {
                                for (int u = sbnr; u < charsi.Length - 1; u++)
                                {
                                    charsi[u] = charsi[u + 1];
                                }
                                reuse[i] = 1;
                                reuse[j] = 1;
                                key = false;
                                Array.Resize<char>(ref charsi, charsi.Length - 1);  //то удаляем его
                            }
                            string strr = new string(charsi);
                            if (ptr.Length == 0 && !key)   //заносим получившуюся склейку в ptr
                            {
                                Array.Resize<string>(ref ptr, 1);
                                ptr[0] = strr;
                                key = true;
                            }
                            if (ptr.Length != 0 && !key)  //если ptr уже содержит куски
                            {
                                for (int t = 0; t < ptr.Length; t++)
                                {
                                    if (ptr[t] == strr)
                                    {
                                        key = true;
                                    }
                                }
                                if (!key)
                                {
                                    Array.Resize<string>(ref ptr, ptr.Length + 1);
                                    ptr[ptr.Length - 1] = strr;
                                    key = true;
                                }
                            }
                        }  //конец склейки
                    }
                }
                for (int i = 0; i < reuse.Length; i++) //добавление кусков не участвовавших в склейке
                {
                    if (reuse[i] == 0)
                    {
                        Array.Resize<string>(ref ptr, ptr.Length + 1);
                        ptr[ptr.Length - 1] = str[i];
                    }
                    if (reuse[i] == 1)
                    {
                        key = false;
                    }
                }
                Array.Resize<string>(ref str, ptr.Length);  //переносим ptr в str
                for (int i = 0; i < ptr.Length; i++)
                {
                    str[i] = ptr[i];
                }
                foreach (string strng in str)
                {
                    sb.AppendLine(strng + " ");
                }
            }   //едем на обратно на while
            for (int i = 0; i < str.Length; i++)
            {
                if (!key)
                    sb.AppendLine(" V ");
                key = false;
                sb.AppendLine(str[i]);
                textbox1.Text = str[i];
            }
        end:

И при проверке работоспособности кода я заметил, что код работает неправильно
Вот правильный вариант
5e123282699ac066623844.png
А вот мой вариант
5e12329f03d96273656953.png
И я никак не могу найти ошибку, отладка не упростила мне эту задачу
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Ну скорее всего там где вы делаете вывод результата - вы в цикле затираете старое значение textBox,
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы