Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
12 Дек 2017, 00:04
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Чётные и нечётные символы в строке  (Прочитано 2334 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Golickoff

  • ****
  • Сообщений: 356
  • РЕПУТАЦИЯ: 35
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
Всем привет.

Есть строка с произвольным двенадцатиразрядным числом, например "123456789012". Необходимо сложить отдельно все чётные разряды и все нечётные. То есть, получить сумму 1+3+5+7+9+1 и 2+4+6+8+0+2. Возможно ли это реализовать средствами встроенного языка 1С без применения ВК? Если да, то подскажите, пожалуйста, каким образом.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.


Оффлайн Golickoff

  • ****
  • Сообщений: 356
  • РЕПУТАЦИЯ: 35
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
А всё оказалось очень просто:
ЧётныеСимволы = Сред(Объект.Строка,2,1)
    +Сред(Объект.Строка,4,1)
    +Сред(Объект.Строка,6,1)
    +Сред(Объект.Строка,8,1)
    +Сред(Объект.Строка,10,1)
    +Сред(Объект.Строка,12,1);
Затем таким же образом выбираем нечётные.
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
А если строка будет "353746789012"? Посимвольное чтение будет более универсальным

Оффлайн Golickoff

  • ****
  • Сообщений: 356
  • РЕПУТАЦИЯ: 35
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
А если строка будет "353746789012"? Посимвольное чтение будет более универсальным
Не могу понять, чем отличаются эти строки. А как реализовать посимвольное чтение?
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
А если строка будет "353746789012"? Посимвольное чтение будет более универсальным
Не могу понять, чем отличаются эти строки. А как реализовать посимвольное чтение?
В данном случае вот эта конструкция вернет нечетное число.
Сред(Объект.Строка,2,1).
Также через Сред, только в цикле от 1 до длины строки, например
СтрокаЧтения = Объект.Строка;
Для к = 1 По СтрДлина(СтрокаЧтения) Цикл
    ТекущийСимвол = Сред(СтрокаЧтения, к, 1);
    //если в строке могут быть только цифры, то проверяете остаток от деления на 2. Если без остатка, то четное, если есть остаток, то нечетное. Ну и про 0 не забываем
    к = к + 1;
КонецЦикла;

Оффлайн Golickoff

  • ****
  • Сообщений: 356
  • РЕПУТАЦИЯ: 35
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
А если строка будет "353746789012"? Посимвольное чтение будет более универсальным
Не могу понять, чем отличаются эти строки. А как реализовать посимвольное чтение?
В данном случае вот эта конструкция вернет нечетное число.
Сред(Объект.Строка,2,1).
Также через Сред, только в цикле от 1 до длины строки, например
СтрокаЧтения = Объект.Строка;
Для к = 1 По СтрДлина(СтрокаЧтения) Цикл
    ТекущийСимвол = Сред(СтрокаЧтения, к, 1);
    //если в строке могут быть только цифры, то проверяете остаток от деления на 2. Если без остатка, то четное, если есть остаток, то нечетное. Ну и про 0 не забываем
    к = к + 1;
КонецЦикла;
Небольшое добавление: строка всегда состоит из цифр и длина строки всегда равна 12ти символам, оба этих условия проверяются в начале работы со строкой. Поэтому код меняем до
СтрокаЧтения = Объект.Строка;
Для к = 1 По 12 Цикл
    ТекущийСимвол = Сред(СтрокаЧтения, к, 1);
    к = к + 1;
КонецЦикла;
Теперь идём этим кодом по строке "353746789012" и получаем при к=1 значение 3, затем "к" становится равным "2" и мы получаем 5 и так далее. В итоге из этой строки получается эта же строка :dfbbdrfb: Наверное, "к" должно быть равно к + 2?
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
Видимо Вы не поняли меня. Полностью код будет примерно такой
ЧетныеСимволы = ""; НечетныеСимволы = "";
СтрокаЧтения = Объект.Строка;
Для к = 1 По 12 Цикл
    ТекущийСимвол = Сред(СтрокаЧтения, к, 1);
    ТекущийСимволЧисло = Число(ТекущийСимвол);
    Если Не ТекущийСимволЧисло = 0 Тогда //насчет 0 не знаю куда его записывать
        Если ТекущийСимволЧисло % 2 = 0 Тогда //четное
            ЧетныеСимволы = ЧетныеСимволы + ТекущийСимвол;
        Иначе
            НечетныеСимволы = НечетныеСимволы + ТекущийСимвол;
        КонецЕсли;
    КонецЕсли;
    к = к + 1;
КонецЦикла;

Оффлайн Golickoff

  • ****
  • Сообщений: 356
  • РЕПУТАЦИЯ: 35
  • КПД: 10%
  • Регистрация: 2015-02-05
  • Сайт: 
  • Профессия: Ученик 1С
Видимо Вы не поняли меня.
Теперь понял. Безусловно, такой код выглядит красивее. Спасибо :)
Правило поведения на форуме №6: Не следует пытаться привлечь внимание к своему сообщению ... рассылкой персональных сообщений и/или электронных писем отдельным участникам форума с просьбой ответить в теме.

Оффлайн andante

  • *
  • Сообщений: 7
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Ученик 1С
ЧетныеСимволы = ""; НечетныеСимволы = "";   //  В условии нужны суммы нечетных и четных цифр поэтому ЧетныеСимволы = 0;  НечетныеСимволы = 0;
СтрокаЧтения = Объект.Строка;
Для к = 1 По 12 Цикл
    ТекущийСимвол = Сред(СтрокаЧтения, к, 1);
    ТекущийСимволЧисло = Число(ТекущийСимвол);
    Если Не ТекущийСимволЧисло = 0 Тогда //насчет 0 не знаю куда его записывать  На 0 проверка не нужна, пусть суммируется
        Если ТекущийСимволЧисло % 2 = 0 Тогда //четное     Четность определяет переменная цикла, поэтому  Если к % 2 = 0
            ЧетныеСимволы = ЧетныеСимволы + ТекущийСимвол;  //  ЧетныеСимволы = ЧетныеСимволы + ТекущийСимволЧисло;
        Иначе
            НечетныеСимволы = НечетныеСимволы + ТекущийСимвол;  // НечетныеСимволы = НечетныеСимволы + ТекущийСимволЧисло;
        КонецЕсли;
    КонецЕсли;
    к = к + 1;
КонецЦикла;


    Вот как-то так

Оффлайн has

  • Модератор
  • *****
  • Сообщений: 1308
  • РЕПУТАЦИЯ: 285
  • КПД: 22%
  • Регистрация: 2011-01-28
  • Сайт: 
  • Профессия: Программист 1С
andante, да, упустил, что там нужна сумма. Именно так.


 

В строке номер "1" табличной части "Состав набора": Не заполнено значение реквиз

Автор ХеляРаздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 6823
Последний ответ 18 Сен 2011, 16:07
от Хеля
В строке "1" табличной части "Состав набора": Не заполнено значение реквизитов Цена

Автор rusalkaРаздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 2425
Последний ответ 11 Апр 2014, 16:52
от rusalka
Адрес в строке "Грузополучатель" в счете-фактуре

Автор МаксиРаздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 1729
Последний ответ 04 Дек 2015, 11:05
от Макси
в строке номер документа основания (108)не сохраняется "0"

Автор NadinAstraРаздел Пользователям "1С - Предприятие 8"

Ответов: 5
Просмотров: 1551
Последний ответ 04 Май 2016, 14:23
от Игорь Иванов
Как ватащить вытащить дополнительные свойства номенклатуре в одной строке запросом ?

Автор supiyanРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 2792
Последний ответ 30 Июн 2014, 17:48
от Klyacksa

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
166 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
55 Сообщений
alex0402
46 Сообщений
andron81_81
42 Сообщений
AIFrame
36 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
BuhRust
28 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 268
  • Точка Скрытых: 0
  • Точка Пользователей: 2
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal