Заинтересовался анализом данных.Допустим есть строка "а,а,а,в,ы,ы,в,в,ы,ы,а,а,а,ы,ы," есть ли возможность через 1с получить какой следующий символ будет в этой строке.может какой нибудь процент допусти а 80% б 15% ы 5%
---
silai89, Держите)
---
Есть!
---
truba, поподробней можно как это организовать
---
Я думаю изначально вам надо понять как эта задача решается математическим путём.
А описать это в 1С - уже мелочи)
---
Sevens,Допустим берем последнии 6 символов из строки, потом смотрим с начала строки есть ли такая последовательность если есть то смотрим что какой знак стоит после найденной такой же последовательности.если нету такой последовательности то берем не последних символов а 5 итд.если же находит несколько таких же последовательностей и у них следующии символ разные то выводить результат в процентном отношении
---
Смотрите Функции Лев,Прав,Сред думаю они вам подойдут.
---
silai89, вариантов расчета вероятности появления символа чуть менее чем миллион на самом деле. Выбираете модель, изучаете мат аппарат для этой модели, переносите в обычный код. На 1С или на каком другом языке - без разницы ж
---
silai89,
как пример без особого углубления:

```1c
    КолВоСимволов = 6;
    Пока Истина Цикл
    ПравыеСимволы = Прав(ТвояСтрока,КолВоСимволов);
    ЛевыеСимволы = Лев(ТвояСтрока,КолВоСимволов);
    Если ПравыеСимволы = ЛевыеСимволы Тогда
    НомерСимвола = КолВоСимволов +1;
    СледСимвол = Сред(ТвояСтрока,НомерСимвола,1);
    Прервать;
    Иначе
    КолВоСимволов =КолВоСимволов-1;
    КонецЕсли;
    КонецЦикла;
```
---
а то через синтаксис помощник я че то не понял как это сделать
---
silai89, Ну если ваши преведенные % это процент вхождения символа в строку, то тут ничего сложного совершенно) Получить длинну строки, получить кол-во разных символов и количество их вхождения в строку. Расчитать процент.
Но это не очень то верное решение. Надо использовать теорию вероятности)
---
Sevens, да да я это и имел ввиду
---
Смотрите СтрЧислоВхождений
Думаю, что это сделать легко одной двумя строками
стр = "исходная строка";

```1c
    Стр = СтрЗаменить(Стр,",",");
    Возврат СтрЧислоВхождений(Стр, ИскомыйСимвол)*100/СтрДлина(стр);
```
---
newbas, это не правильно, читай(6)
---
покужа пример есть строка
1,2,3,1,2,3,1,2, мы видим что следующий знак будет 3
через час она дополнилась на один знак как раз "тройкой"
у нас получилась
1,2,3,1,2,3,1,2,3, теперь мы видим что следующий знак будет 1
через час она заполнилась но не "единицей" а "двойкой"
у нас получилось
1,2,3,1,2,3,1,2,3,2 теперь у нас получается что следующий знак будет 3 т.к таких последовательностей нету:"3,1,2,3,2(это последнии 5 символов строки)" ,"1,2,3,2(последнии 4 символа)" ,"2,3,2(последнии 3 символа)",
"3,2(последнии 2 символа)".
остается взять последний символ "2" и видим что после него всегда идет 3.результат 2=100%
---
silai89, ой ошибся результат3=100%
---
silai89, вариант из (11) должен подойти. Только если элементы задаются через запятую, то вначале надо ещё прописать
ТвояСтрока = СтрЗаменить(Строка,",","");
Хотя вру) не совсем подойдёт
---
silai89, вариантов расчета вероятности уйма
К примеру в "белом шуме" вероятность появления цифр такова что наибольшая вероятность у тех, которых меньше всего появлялось, при распределении гауса вероятность появления определенных цифр в максимуме выше чем других и т.д. и т.п.
Т.е. для вычисления вероятности таки нужно знать свойства системы, хотя бы то, что в системе нет цифры "4".
---
truba, есть а,в и б
---
silai89,
По вашему условию получилось как-то так
На форме:
1. Поле Строка (в которую вбиваем значения);
2. Табличное поле с колонками: Символ(строка) и Процент(число);
3. Кнопка =)
Код можно оптимизировать :)

```1c
    Процедура СледСимволНажатие(Элемент)
    ТвояСтрока = СтрЗаменить(Строка,",",");
    КолВоСимволов = 6;
    ТабСимволы.Очистить();
    Пока Истина Цикл
    ПравыеСимволы = Прав(ТвояСтрока,КолВоСимволов);
    ЧислоВхождений = СтрЧислоВхождений(ТвояСтрока, ПравыеСимволы);
    Для а =1 По ЧислоВхождений Цикл
    Найдено = Найти(твояСтрока,ПравыеСимволы ); //Получаем номер начального символа
    ЛевыеСимволы = лев(ТвояСтрока,КолВоСимволов);
    Если (СтрДлина(ТвояСтрока)-(Найдено+СтрДлина(ЛевыеСимволы)))<= 0 Тогда
    Продолжить;
    КонецЕсли;
    Если Найдено>0 Тогда
    ЛевыеСимволы = Сред(ТвояСтрока,Найдено,КолВоСимволов);
    КонецЕсли;
    Если ЛевыеСимволы = ПравыеСимволы Тогда
    НомерСимвола = КолВоСимволов +1;
    Если Найдено>0 тогда
    НомерСимвола = Найдено+СтрДлина(ПравыеСимволы ); //В +1 Не уверен
    КонецЕсли;

    СледСимвол = Сред(ТвояСтрока,НомерСимвола,1);
    НоваяСтрока =ТабСимволы.Добавить();
    НоваяСтрока.Символ=СледСимвол;
    КонецЕсли;
    ТвояСтрока = Сред(ТвояСтрока,Найдено+СтрДлина(ЛевыеСимволы),СтрДлина(ТвояСтрока)-(Найдено+СтрДлина(ЛевыеСимволы)-1));
    КонецЦикла;
    Если ТабСимволы.Количество()>0 Или КолВоСимволов =0 Тогда
    Если КолВоСимволов=0 Тогда
    Сообщить("не удалось определить следующий символ");
    КонецЕсли;
    Прервать;
    Иначе
    КолВоСимволов =КолВоСимволов-1;
    КонецЕсли;
    КонецЦикла;
    ТЗ = ТабСимволы.Скопировать();
    ТабСимволы.Очистить();
    Для каждого стр Из ТЗ Цикл
    НайденнаяСтрока = ТабСимволы.Найти(Стр.Символ,"Символ");
    Если НайденнаяСтрока= Неопределено ТОгда
    НоваяСтрока= ТабСимволы.Добавить();
    НоваяСтрока.Символ=Стр.Символ;
    НоваяСтрока.Процент = 100/ТЗ.Количество();
    Иначе
    НайденнаяСтрока.Процент = НайденнаяСтрока.Процент+100/ТЗ.Количество();
    КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
```
---
Sevens, если не сложно скинте конфу с (20)
---
silai89,
Это внешняя обработка) скидывать?
---
Sevens, да
---
silai89, Держите)
---
Sevens, Спасибо
---
Вот так поидее.

```1c
    ТвояСтрока = СтрЗаменить(Строка,",",");
    КолВоСимволов = 6;
    Пока Истина Цикл
    ЛевыеСимволы = Лев(ТвояСтрока,КолВоСимволов);
    Найдено = Найти(твояСтрока,ЛевыеСимволы ); //Получаем номер начального символа
    ПравыеСимволы = Прав(ТвояСтрока,КолВоСимволов);
    Если Найдено>0 Тогда
    ПравыеСимволы = Сред(ТвояСтрока,Найдено,КолВоСимволов);
    КонецЕсли;
    Если ПравыеСимволы = ЛевыеСимволы Тогда
    НомерСимвола = КолВоСимволов +1;
    Если Найдено>0 тогда
    НомерСимвола = Найдено+СтрДлина(ПравыеСимволы )+1; //В +1 Не уверен
    КонецЕсли;

    СледСимвол = Сред(ТвояСтрока,НомерСимвола,1);
    Прервать;
    Иначе
    КолВоСимволов =КолВоСимволов-1;
    КонецЕсли;
    КонецЦикла;
```