Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2020, 22:57   #1
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию Алгоритм RLE

Код:
private void button1_Click(object sender, EventArgs e)
        {
            string element = text_input.Text, result = "", symbol = "";
            int i, count;
            int j;
            for (i = 0; i < element.Length;)
            { // от 0 до длины строки
                symbol = element[i].ToString(); // получаем текущий символ из строки str1
                count = 0; //счетчик количества повторяющихся символов
                if (i == element.Length - 1)
                { // если последний символ
                    result += Convert.ToString(symbol);
                    break; //выходим из цикла
                }

                if (element[i + 1].ToString() == symbol) 
                {
                    for (j = i; j < element.Length; j++)
                    {
                        if (element[j].ToString() == symbol) ////если текущий символ равен символу из строки 
                            count++; //увеличиваем счетчик
                        else
                            break;
                    }
                    i = j;
                }
                else
                {
                    i++;
                }

                if (count != 0)
                    result += Convert.ToString(count) + Convert.ToString(symbol);
                else
                    result +="0"+Convert.ToString(symbol);
            }
            text_output.Text = result;
            button1.Enabled = true;
        }
При одинаковых символах все нормально(т.е.FFFBBB =>3F3B)
При разных символах он должен писать 0_длина последовательности(разных элементов)_последовательность(т.е. ABS=>03ABS)
А он после каждой различной буквы ставит 0
plktre вне форума Ответить с цитированием
Старый 24.04.2020, 05:49   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
             if (element[i + 1].ToString() == symbol) 
                {
                    for (j = i; j < element.Length; j++)
                    {
                        if (element[j].ToString() == symbol) ////если текущий символ равен символу из строки 
                            count++; //увеличиваем счетчик
                        else
                            break;
                    }
                    i = j; //продвигаемся на длину одинаковых
                }
                else
                {
                    i++; // и что мы делаем если разные ???? 
                }
// а дальше вывод посчитанного выше
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.04.2020 в 05:53.
evg_m на форуме Ответить с цитированием
Старый 24.04.2020, 11:39   #3
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию

evg_m, Если разные, то нам надо что-то записать в count?
plktre вне форума Ответить с цитированием
Старый 24.04.2020, 12:44   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

посчитать сколько их таких(разных).
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 24.04.2020, 12:51   #5
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию

evg_m, а как посчитать?(((
plktre вне форума Ответить с цитированием
Старый 24.04.2020, 13:02   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

"почти" также как считали одинаковые.(чуть выше)
тот же цикл, но немного другое условие.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 24.04.2020, 13:10   #7
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию

evg_m,
Код:
else //если разные, то надо посчитать сколько их таких разных
                {
                    for (j = i; j < element.Length; j++)
                    {
                        if (element[j].ToString() != symbol)
                            count++;
                    }
                    i++;
                }
Так он тоже выводит после каждого различного знака цифру,а должен только в начале
plktre вне форума Ответить с цитированием
Старый 24.04.2020, 13:14   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

а что значит "различные"?
все соседние элементы отличаются друг от друга.
так и сравнивать надо соседние.
соседние =индексы отличаются на 1.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 24.04.2020, 13:28   #9
plktre
Пользователь
 
Регистрация: 09.09.2019
Сообщений: 43
По умолчанию

evg_m,
Код:
else //если разные, то надо посчитать сколько их таких разных
                {
                    for (j = i; j+1< element.Length; j++)
                    {
                        if (element[j]!= element[j+1])
                        {
                            count++;
                            i++;
                        }
                    }
а так он выдает(ABS->2AB) и вообще он удаляет как-то букву...

Последний раз редактировалось plktre; 24.04.2020 в 13:33.
plktre вне форума Ответить с цитированием
Старый 24.04.2020, 13:36   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

а почему бы не посчитать(не добавить) и последний элемент?
или проверять не последующий (j+1) а предыдущий (j-1) ?
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм Эндрью (Улучшенный алгоритм Грэхема) tszavyalova Помощь студентам 0 20.01.2014 21:49
Разветвляющийся алгоритм,циклический алгоритм и Многомерные массивы (Pascal) TrapperPTZ Помощь студентам 1 26.01.2012 08:58
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм. iamhated Помощь студентам 1 15.01.2012 16:24
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм iamhated Помощь студентам 1 14.01.2012 16:22
Алгоритм TMDS (Алгоритм передачи данных интерфейса DVI) Pro4RE Помощь студентам 2 24.04.2011 21:55