| 
    
            
         
         | 
    
    
  | 
Проверка на палиндром в 1С 8.3 | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Xilen    
     15.01.15 
            ✎
    19:49 
 | 
         
        Приветствую! 
 
        Сделал проверку на палиндром наименования в номенклатуре, но выдает ошибку {Справочник.Номенклатура.Форма.ФормаЭлемента.Форма(1019)}: Получение элемента по индексу для значения не определено Если (ТекНаим[Начало] <> ТекНаим[Конец]) Тогда Вот код: &НаКлиенте Процедура ПроверитьПалиндром(Команда) ТекНаим=СокрЛП(НРег(СтрЗаменить(Объект.Наименование," ", ""))); Начало=1; Конец=СтрДлина(ТекНаим); Палиндром=Истина; Пока (Начало < Конец) И (Начало <= СтрДлина(ТекНаим)) И (Конец >= 1) Цикл Если (ТекНаим[Начало] <> ТекНаим[Конец]) Тогда Палиндром=Ложь; Прервать; КонецЕсли; Начало=Начало+1; Конец=Конец-1; КонецЦикла; Если Палиндром=Истина Тогда Сообщить("Является палиндромом"); Иначе Сообщить("Не является палиндромом"); КонецЕсли; КонецПроцедуры В чем косяк, подскажите, пожалуйста)  | 
|||
| 
    1
    
        Лохматые Уши    
     15.01.15 
            ✎
    19:53 
 | 
         
        ТекНаим - это строка. Какой же там может быть индекс?     
         | 
|||
| 
    2
    
        Xilen    
     15.01.15 
            ✎
    19:56 
 | 
         
        Тогда как исправить? Посимвольно можно же работать со строками в 1С. Думал сработает) в с++ точно сработает такой алгоритм)     
         | 
|||
| 
    3
    
        zulu_mix    
     15.01.15 
            ✎
    20:02 
 | 
         
        кури Сред     
         | 
|||
| 
    4
    
        Cyberhawk    
     15.01.15 
            ✎
    20:07 
 | 
         
        (2) тебе уже проще засунуть строку в массив на входе     
         | 
|||
| 
    5
    
        Xilen    
     15.01.15 
            ✎
    20:10 
 | 
         
        В "Сред" заработало) правда строка "арозаупаланалапуазора" не является палиндромом Оо )) Косякнул в условии что ли..     
         | 
|||
| 
    6
    
        Salimbek    
     15.01.15 
            ✎
    20:53 
 | 
         
        (5) СокрЛП в начале используй, а то слева первый символ будет "а", а справа - пробел, вот и не сойдется.     
         | 
|||
| 
    7
    
        Xilen    
     15.01.15 
            ✎
    21:11 
 | 
         
        Отладчик показывает именно "арозаупаланалапуазора", т.е. без пробелов, но при этом результат все равно "не является".     
         | 
|||
| 
    8
    
        Крошка Ру    
     15.01.15 
            ✎
    21:34 
 | 
         
        (7) Ну ты даешь! Что в слове содержится в отладчике ты посмотрел, молодец. А посмотреть, в какой момент он на строку "Палиндром = Ложь;" попадает - это уже неспортивно?     
         | 
|||
| 
    9
    
        zulu_mix    
     15.01.15 
            ✎
    21:37 
 | 
         
        Функция РеверсСтроки(Стр) 
 
        Длина = СтрДлина(Стр); СтрокаРезультат = ""; Для н = 1 По Длина Цикл Счетчик = Длина - н; СтрокаРезультат = СтрокаРезультат + Сред(Стр, Счетчик, 1); КонецЦикла; Возврат СтрокаРезультат; КонецФункции Функция ЭтоПалиндром(Стр) Возврат Стр = РеверсСтроки(Стр) КонецФункции Сообщить(ЭтоПалиндром("арозаупаланалапуазора"));  | 
|||
| 
    10
    
        Xilen    
     15.01.15 
            ✎
    21:52 
 | 
         
        Посмотрел где) но после того как написал сюда) 
 
        Спасибо за помощь! Буду разбираться))  | 
|||
| 
    11
    
        Armando    
     15.01.15 
            ✎
    21:58 
 | 
         
        Просто интересно, какую задачу решаете таким образом?     
         | 
|||
| 
    12
    
        Xilen    
     15.01.15 
            ✎
    21:58 
 | 
         
        Проверить на полиндром значение поля "Наименование"     
         | 
|||
| 
    13
    
        zulu_mix    
     15.01.15 
            ✎
    22:01 
 | 
         
        вообще правильнее так:
 
        Функция ЭтоПалиндром(Стр) Возврат ВРЕГ(СтрЗаменить(Стр," ","")) = ВРЕГ(СтрЗаменить(РеверсСтроки(Стр)," ","")) КонецФункции  | 
|||
| 
    14
    
        Адимр    
     15.01.15 
            ✎
    22:02 
 | 
         
        (9) Проверь последовательность нуклеотидов в дезоксирибонуклеиновой кислоте на палиндромы,скачать можно сдесь http://www.gutenberg.org/ebooks/author/856     
         | 
|||
| 
    15
    
        Записьдампа    
     15.01.15 
            ✎
    22:07 
 | 
         
        (13) Повышаем градус! =)
 
        Функция ЭтоПалиндром(Фраза) Возврат Фраза = "" Или (Лев(Фраза, 1) = Прав(Фраза, 1) И ЭтоПалиндром( Сред(Фраза, 2, СтрДлина(Фраза) - 2))); КонецФункции  | 
|||
| 
    16
    
        Крошка Ру    
     15.01.15 
            ✎
    22:09 
 | 
         
        (15) Повышать, так повышать:
 
        Возврат ОбщийМодульЛингвистическихФункций.ЭтоПалиндром(Фраза);  | 
|||
| 
    17
    
        Armando    
     15.01.15 
            ✎
    22:11 
 | 
         
        (12) Это понятно. Практический смысл какой?     
         | 
|||
| 
    18
    
        Xilen    
     15.01.15 
            ✎
    22:12 
 | 
         
        (17) Тема курсовой.. А смысла практического нет) Баловство)     
         | 
|||
| 
    19
    
        zulu_mix    
     15.01.15 
            ✎
    22:12 
 | 
         
        (15) как думаешь, при какой длине строки выпадет твой ник?     
         | 
|||
| 
    20
    
        Записьдампа    
     15.01.15 
            ✎
    22:15 
 | 
         
        (19) Ну тогда вот так =)
 
        Функция ЭтоПалиндром(Фраза) Возврат КодВозвратаДиалога.Да = Вопрос("Фраза """ + Фраза + """ является палиндромом?", РежимДиалогаВопрос.ДаНет); КонецФункции  | 
|||
| 
    21
    
        Xilen    
     15.01.15 
            ✎
    22:20 
 | 
         
        Тогда вопрос поставлю по-другому: как грамотно написать условие:
 
        Если (Сред(ТекНаим,Начало,Конец) <> Последний символ из ТекНаим) Тогда ну и соответственно последний уменьшается на 1 в цикле  | 
|||
| 
    22
    
        Xilen    
     15.01.15 
            ✎
    22:21 
 | 
         
        В общем, сравнение первого символа и последнего в цикле, 
 
        причем будет первый+1, последний-1  | 
|||
| 
    23
    
        zulu_mix    
     15.01.15 
            ✎
    22:22 
 | 
         
        зачем эти сложности? реверс строки и сравнение с оригиналом гораздо гораздее     
         | 
|||
| 
    24
    
        Записьдампа    
     15.01.15 
            ✎
    22:26 
 | 
         
        (21) 
 
        ЭтоПалиндром = Истина; Начало = 1; Конец = СтрДлина(ТекНаим); Пока Начало < Конец Цикл Если Сред(ТекНаим, Начало, 1) <> Сред(ТекНаим, Начало, 1) Тогда ЭтоПалиндром = Ложь; Прервать; КонецЕсли; Начало = Начало + 1; Конец = Конец - 1; КонецЦикла;  | 
|||
| 
    25
    
        Записьдампа    
     15.01.15 
            ✎
    22:27 
 | 
         
        Тьфу.
 
        Если Сред(ТекНаим, Начало, 1) <> Сред(ТекНаим, Конец 1) Тогда Кончено же  | 
|||
| 
    26
    
        Xilen    
     15.01.15 
            ✎
    22:29 
 | 
         
        (23) ну, если говорить о загрузке, то посимвольное сравнение с начала и конца быстрее произойдет, нежели взять строку, реверснуть и сравнить обе) правда это доли секунды) 
 
        просто когда искал материал по работе со строками в 1с наткнулся на этот пример, решил попробовать) но там написано простыми словами, а не кодом) Спасибо, Записьдампа) я пытался сделать также, только не единицы ставил, а длину строки)  | 
|||
| 
    27
    
        Xilen    
     15.01.15 
            ✎
    22:31 
 | 
         
        Хотя отбой, даже слово "трепет" при твоем условии сочло палиндромом)     
         | 
|||
| 
    28
    
        Записьдампа    
     15.01.15 
            ✎
    22:36 
 | 
         
        (27) Я ведь ща 1С запущу =)
 
        Функция ЭтоПалиндром(ТекНаим) ЭтоПалиндром = Истина; Начало = 1; Конец = СтрДлина(ТекНаим); Пока Начало < Конец Цикл Если Сред(ТекНаим, Начало, 1) <> Сред(ТекНаим, Конец, 1) Тогда ЭтоПалиндром = Ложь; Прервать; КонецЕсли; Начало = Начало + 1; Конец = Конец - 1; КонецЦикла; Возврат ЭтоПалиндром; КонецФункции Сообщить(ЭтоПалиндром("трепет")); Сообщить(ЭтоПалиндром("арозаупаланалапуазора"));  | 
|||
| 
    29
    
        Записьдампа    
     15.01.15 
            ✎
    22:38 
 | 
         
        В качестве списка литературы к курсовой синтаксис-помощник 1С будешь указывать? =)     
         | 
|||
| 
    30
    
        Xilen    
     15.01.15 
            ✎
    22:39 
 | 
         
        &НаКлиенте
 
        Процедура ПроверитьПалиндром(Команда) ТекНаим=СокрЛП(НРег(СтрЗаменить(ТекНаим," ", ""))); Начало=1; Конец=СтрДлина(ТекНаим); Палиндром=Истина; Пока Начало < Конец Цикл Если Сред(ТекНаим,Начало,1) <> Сред(ТекНаим,Конец,1) Тогда Палиндром=Ложь; Прервать; КонецЕсли; Начало=Начало+1; Конец=Конец-1; КонецЦикла; Если Палиндром=Истина Тогда Сообщить("Является палиндромом"); Иначе Сообщить("Не является палиндромом"); КонецЕсли; КонецПроцедуры результат: "трепет" - палиндром) просто я в карточке номенклатуры сделал кнопку на командной панели и привязал к процедуре  | 
|||
| 
    31
    
        Xilen    
     15.01.15 
            ✎
    22:39 
 | 
         
        (29) обойдемся без списка литературы :D     
         | 
|||
| 
    32
    
        Записьдампа    
     15.01.15 
            ✎
    22:40 
 | 
         
        ТекНаим откуда берется?     
         | 
|||
| 
    33
    
        Xilen    
     15.01.15 
            ✎
    22:44 
 | 
         
        (32) тьфу блин))) видать удалил случайно вместе с комментом и оставил не ту строку XD 
 
        ТекНаим=СокрЛП(НРег(СтрЗаменить(Объект.Наименование," ", ""))); все, работает))) спасибо))  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |