Имя: Пароль:
1C
1С v8
Необходмо вывести введенную пользователем строку наоборот
🠗 (Волшебник 16.11.2019 00:27)
0 Tolh
 
08.11.19
20:55
Здравствуйте уважаемые гуру! Я совсем новичок в 1с программировании , подскажите где я накосячил а то результат совсем не тот что нужен , последней буквы вообще нет а первых целых три, тут то что я написал и задание,не хочется приходить на учёбу не подготовленному ,хочется разобраться.

Процедура ПриНачалеРаботыСистемы()
    Строка = "";
    ВвестиЗначение(Строка,"Введите слово");
        
    
    Счётчик = СтрДлина(Строка);
    Символ = "";
    ЧислоСимволов = СтрДлина  (Строка);
    Пока Счётчик >= 0 Цикл
        Счётчик = Счётчик - 1;
        Символ = Сред(Строка,Счётчик,1);
        Сообщить(Символ);
    КонецЦикла;
    Сообщить("Проверены все " + ЧислоСимволов + " символов !");
КонецПроцедуры




// Необходмо вывести введенную пользователем строку наоборот, например:
// - если введено слово "Привет!", вывести "!тевирП";
// - если "абвгде", вывести "едгвба".
// При выполнении задания использовать оператор ВвестиЗначение и СтрДлина
// Переменная Счетчик изначально должна быть ровна длине строки
// Счетчик в цикле должен уменьшаться на 1, пока не станет равным 0
// Склеивание символов будет происходить следующей командой: "Слово = Слово + Символ;"
// Переменная слово изначально имеет значение "" (пустое значение).
1 hhhh
 
08.11.19
21:06
Пока Счётчик > 0 Цикл
        Символ = Сред(Строка,Счётчик,1);
         Счётчик = Счётчик - 1;
       Сообщить(Символ);
    КонецЦикла;
2 Tolh
 
08.11.19
21:54
Большое спасибо !!!!
3 Кодер
 
08.11.19
21:57
1. Возьми листок и, представляя себя компьютером, выполни свою же программу. Поймёшь, что лишнее сделал, где ошибся.

2. Учебные и тестовые примеры полезно решать самостоятельно.

3. Не делай сразу вывод, а собери переменную. "Всё должно быть функцией".

4. Может, не стоит в 1С? https://javarush.ru/quests/QUEST_HARVARD_CS50
4 Tolh
 
08.11.19
22:08
Спасибо за советы , а на счёт стоит или нет в 1С рано ещё говорить ,совсем мало времени я занимаюсь, да и на платных курсах я , надо уж добить а там посмотрим что из меня получится
5 Ёпрст
 
08.11.19
22:13
ну или так


НоваяСтрока ="";
Для Счётчик= -СтрДлина(Строка) По -1 Цикл
    НоваяСтрока = НоваяСтрока + Сред(Строка,-Счётчик,1);
КонецЦикла;
6 Tolh
 
08.11.19
22:16
Спасибо!
7 mikecool
 
09.11.19
00:08
то ли дело на питоне s[::-1] и все
8 Злопчинский
 
09.11.19
00:57
(3) кривые курсы какие-то
пишут "Основы программирования» на русском языке!"
а где код на русском языке? 1С почему нет?
9 Fram
 
09.11.19
04:14
Ещё рекурсией можно )
10 Михаил Иванович
 
09.11.19
05:33
(7) всего одна строка )))
11 НичегоНе Понятно
 
09.11.19
09:18
(7)В питоне все объекты. Даже строки. У этого тоже есть своя цена. Я как то раз переписал раскраску кода с обработки ИТС на питон. Почти дословно. Питон кушал проц как не в себя На текст 5-7к символов уходило до нескольких секунд 100% загрузки проца. В 1с- миллисекунды с минимальной задржкой
12 bolero
 
09.11.19
12:13
(11) в том и дело, что переписал дословно, а вероятно надо было с учетом средств нового языка

тем паче для раскраски кода есть гора готовых быстрых решений, только определение синтаксиса допиши для них

пример:
для каждого значение из массив1: если значение не в списке значений массив2, то добавить значение в массив2
если написать такое в лоб в 1С - это вобщем-то нормально, потому что по-другому - НИКАК
если написать такое в лоб на питоне, а массивы по 10к вхождений - он загрузит проц на несколько секунд
а если сделать array2 = list(set(array2).union(set(array1)) - отработает за 10 мс
13 НичегоНе Понятно
 
13.11.19
03:51
(12)Я не говорю, что это не решаемая задача. В конце концов, надо просто использовать регулярные выражения. Я говорю что красота в (7) не бесплатная.
14 Kigo_Kigo
 
13.11.19
08:00
СтрокаПереворота=ПолучитьБуферДвоичныхДанныхИзСтроки(Данные);
СтрокаПереворота.Перевернуть();
ДанныеНовые=ПолучитьСтрокуИзБуфераДвоичныхДанных(СтрокаПереворота);
15 ДенисЧ
 
13.11.19
08:46
(14) Мдя... На голом ASCII сработает. На уникоде? А эмодзи всякие?
16 Сияющий в темноте
 
13.11.19
08:54
(15)особенно приятно utf8 изменится.
unicode то только порядок байтов поменяет.
17 Tolh
 
15.11.19
23:45
Опять я к вам за помощью , хоть и посоветовали самому всё решать но тем не менее ,видимо подзамылился.
Я посчитал слова в строке а как посчитать пробелы?

Процедура ПриНачалеРаботыСистемы()
    Строка = "В этой  $строке&  не  ровно   _6_  слов... ";
    ПодсчётСлов(Строка);
    ПодсчётПробелов(Строка);
КонецПроцедуры

Процедура ПодсчётСлов(Строка)
    ДлинаСтроки = СтрДлина(Строка);
    ТекущаяПозиция = 1;
    СчётчикСлов = 0;
    Пока ТекущаяПозиция <= ДлинаСтроки Цикл
        ТекущийСимвол = Сред(Строка,ТекущаяПозиция,1);
        Если ТекущийСимвол = " " Тогда
            Если ТекущаяПозиция > 1 Тогда
                СчётчикСлов = СчётчикСлов + 1;
            КонецЕсли;
            
            Пока ТекущийСимвол = " " И ТекущаяПозиция <= ДлинаСтроки Цикл
                ТекущийСимвол = Сред(Строка,ТекущаяПозиция,1);
                ТекущаяПозиция = ТекущаяПозиция + 1;
            КонецЦикла;
        Иначе
            ТекущаяПозиция = ТекущаяПозиция + 1;
        КонецЕсли;
    КонецЦикла;
    
    Если ТекущийСимвол <> " " Тогда
        СчётчикСлов = СчётчикСлов + 1;
    КонецЕсли;
    
    
    Сообщить("В этой строке " + СчётчикСлов + " слов");
    
КонецПроцедуры
18 Fram
 
16.11.19
02:54
Если бы ПодсчётСлов написал ты сам, с подсчётом пробелов у тебя не возникло бы никаких вопросов
19 Tolh
 
16.11.19
13:13
ПодсчётСлов я написал под руководством преподавателя а тут остался один на один с кодом , то есть просто принципиально никто не поможет