|
Проверка на палиндром в 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
ТекНаим=СокрЛП(НРег(СтрЗаменить(Объект.Наименование," ", ""))); все, работает))) спасибо)) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |