Имя: Пароль:
1C
1С v8
Создание простой анаграммы
0 Akinetsu
 
28.10.21
20:14
На форме вводится произвольное предложение. В предложениях допускаются только буквы кириллицы и латиницы, знаки пунктуации.
Считается что слово может состоять строго из букв, цифр, символа "_". Остальные символы считаются знаками пунктуации.

По нажатию на кнопку необходимо развернуть все слова введенного текста задом на перед.
Пример 1
Ввели - Hello World!!!
Получили - olleH dlroW!!!

Пример 2
Вввели - Hi, Jack) How are you?
Получили - iH, kcaJ) woH era uoy?

Я довольно давно не занимался кодингом в 1С, да и то, когда занимался, то совсем немного. В общем мне нужна помощь, как делать подобные вещи. Я уже запутался, какой цикл делать и как вынести в разрешенные или запрещенные символы те, или иные вещи.
1 МихаилМ
 
28.10.21
20:16
в поиск. было уже.
2 Akinetsu
 
28.10.21
20:19
(1) А можно ссылочку, а то я найти не могу.
3 Злопчинский
 
28.10.21
20:22
А вам круто сделать или тупо?
4 Злопчинский
 
28.10.21
20:23
если тупо
стандартно делим на слова.
перебираем все слова
каждое слово перебираем буква сзаду наперед.
перевернутые слова снова склеиваем в предложение.
не забыаем про зпт, тчк, всклзнак итд - по сути они являются однобуквенными словами
5 Akinetsu
 
28.10.21
20:25
(4) И какой у этого код? Хотя бы пример.
6 МихаилМ
 
28.10.21
20:34
(2) алгоритмический кретинизм тут у многих.
но умение пользоваться поисковыми сервисами интернет - минимальное требование.
это форум цеховой . так что Вам здесь не место.
7 Garykom
 
гуру
28.10.21
20:44
(5) скажи а зарплату за тебя тоже другие получать будут?
8 RomanYS
 
28.10.21
20:47
(6) Что так жестко-то?
(0) задачка прикольная и реально алгоритмическая (навыков и специфики 1С не нужно совсем). Руки чешутся написать красиво, но сдержусь. Попробуй что-нибудь написать сам, тебя конечно обольют г-ном, но есть шанс что помогут.
9 Akinetsu
 
28.10.21
20:47
(7) Скажи, а ты любой запрос о помощи в чем-либо воспринимаешь в контексте наглого использования чужих ресурсов?
10 takefive
 
28.10.21
20:54
Функция Развернуть(Слово)
    Результат = "";
    Для НомерСимвола = 1 По СтрДлина(Слово) Цикл
        Результат = Сред(Слово, НомерСимвола, 1) + Результат;
    КонецЦикла;
    Возврат Результат;
КонецФункции

Процедура Сформировать(Предложение)
    Результат = "";
    Строки = СтрЗаменить(Предложение, " ", Символы.ПС);
    Для НомерСтроки = 1 По СтрЧислоСтрок(Строки) Цикл
        Слово = СтрПолучитьСтроку(Строки, НомерСтроки);
        Результат = Результат + " " + Развернуть(Слово);
    КонецЦикла;
    Сообщить(Результат);
КонецПроцедуры
11 МихаилМ
 
28.10.21
20:55
(8) я такие задачки делал классе в 6-м . для взрослого человека - задача не интересная.
для человека с подростковым менталитетом - здесь не уместная. т.к. это взрослый форум. невзирая  на то что когда форум создавался,
ВР было  лет 20.
12 HawkEye
 
28.10.21
20:56
(0) в чем проблема то разбить предложение на слова и каждое из них перевернуть?
13 Garykom
 
гуру
28.10.21
21:00
(9) Еврей?
14 RomanYS
 
28.10.21
21:01
(10) Знаки препинания не учтены
(11) прелесть подобных задач, что их сложность одинакова для 6классника и профессионала. А вся специфичные функции типа СтрРазделить здесь слабо помогают
15 Garykom
 
гуру
28.10.21
21:02
(9) Ты бы хоть показал что сам смог
Или написал алгоритм как собираешься задачу решать

Имхо пока вижу что у тебя ничего не выйдет к сожалению в этом деле
Даже если ты каким то чудом сделаешь тестовое и возьмут на стажировку за тарелку супа то очень быстро сам бросишь
16 Asmody
 
28.10.21
21:02
на мисте есть специальный сервис для переворачивания строк. можешь использовать его

https://mista.ru/strrev?mista
17 Garykom
 
гуру
28.10.21
21:03
(14) Неа
У профессионала есть дофига способов решить задачу

Например почему бы не тупо написать конечный автомат с перебором символов по одному и стеком?
18 RomanYS
 
28.10.21
21:03
(16) 👍 :)))
19 Garykom
 
гуру
28.10.21
21:04
(16) предлагаешь делать http запросы по каждому слову?
20 RomanYS
 
28.10.21
21:04
(17)  >> перебором символов по одному и стеком
Это и есть "красиво" и одинаково доступно и школьнику в т.ч.
21 Tatitutu
 
28.10.21
21:05
(0) создай тз или массив
С двумя столбцами
Число и символ
Циклом пробеги по строке
1 символ
2 символ
...
Отсортируй тз по первой колонки
Прочитай тз и создай новую строку
22 Asmody
 
28.10.21
21:05
(19) сервис для разбивания строки на подстроки пока в разработке
23 RomanYS
 
28.10.21
21:05
(19) можно взломать мисту и украсть алгоритм
24 Tatitutu
 
28.10.21
21:11
//если совсем просто
//или сделай рекурсию)

Колсим=стрдлина(твоя_фраза) ;
Новстр="" ;
Для сч=1 по колсим цикл
   Новстр=сред(колсим, сч, 1)+новстр;
Конеццикла;

Сообщить(новстр) ;
25 Garykom
 
гуру
28.10.21
21:12
1. Нужна функция/код которая по входному символу определит это буква, цифра или "_"
Или наоборот функция которая "Остальные символы считаются знаками пунктуации"

2. Надо пробежаться по строке и найти все "пунктуации"

3. Все что между пунктуациями развернуть
26 trad
 
28.10.21
21:12
(19) можно и одним запросом обойтись
27 RomanYS
 
28.10.21
21:12
Для каждого символа Цикл
Если ЭтоБуква Тогда СимволВНачалоБуфера
Иначе
БуферВРезультат
БуферОчистить
СимволВРезультат
КонецЕсли
КонецЦикла
БуферВРезультат
28 Garykom
 
гуру
28.10.21
21:13
(25)+ учитывая что буквы могут быть рус, лат и т.д. и разный регистр
29 trad
 
28.10.21
21:14
(0) третее предложение твоего ТЗ противоречит второму
30 RomanYS
 
28.10.21
21:14
(24) перечитай условие, слова не нужно переставлять
31 Garykom
 
гуру
28.10.21
21:19
Напомните плиз в 1С КодСимвола() там для кириллицы все в одном интервале?
32 RomanYS
 
28.10.21
21:21
(31) не удержался)
Нет
33 Garykom
 
гуру
28.10.21
21:21
(31)+ условие
Если (КодСимвола(ТекСимвол)>=КодСимвола("А")) И (КодСимвола(ТекСимвол)<=КодСимвола("я")) Тогда
прокатит?
34 Garykom
 
гуру
28.10.21
21:21
(32) жаль
35 RomanYS
 
28.10.21
21:23
(33) Зачем КодСимвола? 1С корректно сравнивает строки(символы)
36 Garykom
 
гуру
28.10.21
21:23
(35) ты думаешь я это помню?
37 RomanYS
 
28.10.21
21:27
(33) с "Ё" не прокатит)))
38 acht
 
28.10.21
21:27
(19) Это микросервис, он так работает.
39 RomanYS
 
28.10.21
21:27
(16) кириллица некорректно обрабатывается)
40 Garykom
 
гуру
28.10.21
21:27
(36)+ я вот только сча вспомнил что можно числа >0 и 0 как Истина и Ложь в условиях
41 Garykom
 
гуру
28.10.21
21:29
(37) ну тогда строку символов "букв" забить самое простое и искать в ней
42 RomanYS
 
28.10.21
21:32
(41) проще
ЭтоБуква = ((С >= "а") И (С <= "Я"))
или (С = "_")
или ....
43 Garykom
 
гуру
28.10.21
21:32
(41)

Функция ЭтоБуква(ТекСимвол)
   Буквы = "ABC...XYZ...abc..xyzАБВ...эюя012...9";
   Возврат Булево(Найти(Буквы, ТекСимвол));
КонецЕсли;
44 RomanYS
 
28.10.21
21:36
(43) Ещё прикольнее
ЭтоБуква = Врег(С) <> Нрег(С);//цифры и "_" нужно отдельно проверить
45 Garykom
 
гуру
28.10.21
21:39
(44) во пойдет
46 Asmody
 
28.10.21
21:43
(39) Ну так оно побайтово разворачивает, а кириллица в utf-8 – это 2 байта, библиотеку надо.
47 Asmody
 
28.10.21
21:46
(44) Для иврита или грузинского, например,  
не сработает
48 Garykom
 
гуру
28.10.21
21:48
(47) в ТЗ только латиница и кириллица
выноса в функцию достаточно для решения, если что ее допилить ))
49 pechkin
 
28.10.21
21:49
Более сложный вариант задачи.
Перевернуть слово, оставив все небуквы на своем месте
50 Garykom
 
гуру
28.10.21
21:50
(49) неа не сложней
небуквы в шаблон-матрицу, затем буквами заполняем пустые места в матрице

только что считать разделителем слов?
51 RomanYS
 
28.10.21
21:52
(49) что должно получиться из "аб_вгд"?
52 Homer
 
28.10.21
22:01
Процедура ПриОткрытии()
    Текст = "Hi, Jack) How are you?";
    //Текст = "Hello World!!!";
КонецПроцедуры

Процедура КнопкаВыполнитьНажатие(Кнопка)
    Результат = "";
    Для НомерСимвола = 1 По СтрДлина(Текст) Цикл
        мСимвол = Сред(Текст, НомерСимвола, 1);
        мСимвол = ПроверкаСимвола(мСимвол);
        Результат = Результат + Строка(мСимвол);
    КонецЦикла;
    Сформировать(Результат);
КонецПроцедуры

Функция ПроверкаСимвола(мСимвол)
    мКодСимвола = КодСимвола(мСимвол);
    Если НЕ мКодСимвола = 32 и мКодСимвола < 65 Тогда
        мСимвол = " @@" + Строка(мСимвол);
    КонецЕсли;
    Возврат мСимвол;
КонецФункции

Процедура Сформировать(Предложение)
    Результат = "";
    Строки = СтрЗаменить(Предложение, " @", Символы.ПС);
    Строки = СтрЗаменить(Предложение, " ", Символы.ПС);
    Для НомерСтроки = 1 По СтрЧислоСтрок(Строки) Цикл
        Слово = СтрПолучитьСтроку(Строки, НомерСтроки);
        Результат = Результат + Развернуть(Слово);
    КонецЦикла;
    Результат = СтрЗаменить(Результат,"@"," ");
    Сообщить(Результат);
КонецПроцедуры

Функция Развернуть(Слово)
    Результат = "";
    Для НомерСимвола = 1 По СтрДлина(Слово) Цикл
        мСимвол = Сред(Слово, НомерСимвола, 1);
        Если мСимвол = "@" Тогда
            Возврат СтрЗаменить(Слово,"@","");
        КонецЕсли;
        Результат = мСимвол + Результат;
    КонецЦикла;
    Возврат " " + Результат;
КонецФункции
53 Asmody
 
28.10.21
22:02
(49) судя по этой странице https://unicode-table.com/ru/alphabets/ понять что такое "небуква" – нифига не тривиальное занятие
54 Garykom
 
гуру
28.10.21
22:04
(52) 1. Много буков
2. Ниасилил ты, ошибки у тебя
55 RomanYS
 
28.10.21
22:07
(52) ой, не красиво. И кстати показательно в контексте(11): такое решение шестиклассник не напишет, а красивое может
56 Garykom
 
гуру
28.10.21
22:08
(55) кстати да
студент в смысле кандидат в стажеры в принципе не способен написать идеально правильное решение
надо обязательно ошибки оставлять (незначительные) - это еще когда курсовые/контрольные на заказ делал ))
57 mikecool
 
28.10.21
22:10
Результат = Новый Массив;
Для Сч = 1 По СтрДлина(НашаСтрока) Цикл
  ОдинСимвол = Сред(НашаСтрока, 1, 1);
  Если Результат.Количество() = 0 тогда
    Результат.Добавить(ОдинСимвол);
  Иначе
    Результат.Вставить(0, ОдинСимвол);
  КонецЕсли;
КонецЦикла;

Вывести массив в прямом порядке, мне лень
58 mikecool
 
28.10.21
22:10
+57 да и массив тут лишний, можжно сразу строку формировать
59 RomanYS
 
28.10.21
22:17
(57) смотри (30)
60 nodrama
 
28.10.21
22:29
Остался вопрос. Какая ситуация должна случится в базе 1с что бы понадобилось в 1с перевернуть где то слова задом на перед. Или это так для общего развития ?
61 RomanYS
 
28.10.21
22:31
(60) вероятно тест. Для простого теста прямо огонь-задачка
62 mikecool
 
28.10.21
22:35
(60) они не перешли на 19 платформу, но внедряют арабам конфигу
63 МихаилМ
 
28.10.21
23:48
64 Asmody
 
28.10.21
23:55
(46) я зарелизил 2ю версию сервиса-переворачивателя! теперь оно поддерживает кириллицу!

https://mista.ru/strrev?кириллица
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.