Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Необходмо вывести введенную пользователем строку наоборот

↓ [Волшебник, 16.11.19 - 00:27]
Необходмо вывести введенную пользователем строку наоборот
Я
   Tolh
 
08.11.19 - 20:55
Здравствуйте уважаемые гуру! Я совсем новичок в 1с программировании , подскажите где я накосячил а то результат совсем не тот что нужен , последней буквы вообще нет а первых целых три, тут то что я написал и задание,не хочется приходить на учёбу не подготовленному ,хочется разобраться.

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




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

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

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

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

НоваяСтрока ="";
Для Счётчик= -СтрДлина(Строка) По -1 Цикл
    НоваяСтрока = НоваяСтрока + Сред(Строка,-Счётчик,1);
КонецЦикла;

   Tolh
 
6 - 08.11.19 - 22:16
Спасибо!
   mikecool
 
7 - 09.11.19 - 00:08
то ли дело на питоне s[::-1] и все
   Злопчинский
 
8 - 09.11.19 - 00:57
(3) кривые курсы какие-то
пишут "Основы программирования» на русском языке!"
а где код на русском языке? 1С почему нет?
   Fram
 
9 - 09.11.19 - 04:14
Ещё рекурсией можно )
   Михаил Иванович
 
10 - 09.11.19 - 05:33
(7) всего одна строка )))
   НичегоНеПонятно
 
11 - 09.11.19 - 09:18
(7)В питоне все объекты. Даже строки. У этого тоже есть своя цена. Я как то раз переписал раскраску кода с обработки ИТС на питон. Почти дословно. Питон кушал проц как не в себя На текст 5-7к символов уходило до нескольких секунд 100% загрузки проца. В 1с- миллисекунды с минимальной задржкой
   bolero
 
12 - 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) не бесплатная.
   Kigo_Kigo
 
14 - 13.11.19 - 08:00
СтрокаПереворота=ПолучитьБуферДвоичныхДанныхИзСтроки(Данные);
СтрокаПереворота.Перевернуть();
ДанныеНовые=ПолучитьСтрокуИзБуфераДвоичныхДанных(СтрокаПереворота);
   ДенисЧ
 
15 - 13.11.19 - 08:46
(14) Мдя... На голом ASCII сработает. На уникоде? А эмодзи всякие?
   Сияющий в темноте
 
16 - 13.11.19 - 08:54
(15)особенно приятно utf8 изменится.
unicode то только порядок байтов поменяет.
   Tolh
 
17 - 15.11.19 - 23:45
Опять я к вам за помощью , хоть и посоветовали самому всё решать но тем не менее ,видимо подзамылился.
Я посчитал слова в строке а как посчитать пробелы?

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.