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

Есть проблема с пониманием

Есть проблема с пониманием
Я
   ДереВово
 
17.02.21 - 18:00
Привет, я Дмитрий 1С увлекаюсь для себя, подскажите кому не лень.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
Перем ИсходныеДанные;
ИсходныеДанные = "";
    // 1. Ввести данные
    Если НЕ     ВвестиСтроку(ИсходныеДанные, "Что считать ?") Тогда
            Возврат;
    КонецЕсли;
        
    // 2. Разобрать данные на операнды и операцию
    ПозицияОперации = 0;
    ТекущаяОперация = "^";
    ПозицияОперации=Найти(ИсходныеДанные,ТекущаяОперация);
    Если ПозицияОперации=0 Тогда
        Сообщить("Операция """+ТекущаяОперация+""" не найдена!");
        Возврат;
    КонецЕсли;
    
    Если ПозицияОперации=1 ИЛИ ПозицияОперации=СтрДлина(ИсходныеДанные) Тогда
        Сообщить ("Не хватает операндов!");
        Возврат;
    КонецЕсли;
    
    Операнд1= Лев(ИсходныеДанные,ПозицияОперации-1) ;
    Операнд2= Сред(ИсходныеДанные,ПозицияОперации+1) ;
    // 3. Произвести вычисление
        Результат = Pow(Операнд1,Операнд2);
        // 4. Вывести результат
         Сообщить(ИсходныеДанные+" = "+Результат) ;
КонецПроцедуры

Почему переменная ПозицияОперации равна 0, и как это вообще понимать.

ПозицияОперации = 0;
ТекущаяОперация = "^";
ПозицияОперации=Найти(ИсходныеДанные,ТекущаяОперация);

Я правильно понимаю что ТекущаяОперация занимает центральное место в выражении?

Операнд1= Лев(ИсходныеДанные,ПозицияОперации-1) ;
Операнд2= Сред(ИсходныеДанные,ПозицияОперации+1) ;

Операнды занимают места с лева и с права от ТекущаяОперация  

а то на видео от 1С основы программирование не стали объяснять таких мелочей.
Спасибо кто ответит, надеюсь понятно написал
   Ёпрст
 
1 - 17.02.21 - 18:03
(0) нет.
   Ёпрст
 
2 - 17.02.21 - 18:04
Просто прочитай описание от метода Сред.
В данном случае, это будет строка от найденной позиции+1 и все символы, что справа.
   Ёпрст
 
3 - 17.02.21 - 18:06
И..можно было проще написать -

массивХрени =   СтрРазделить(ИсходныеДанные, "^",Ложь);
Операнд1= массивХрени[0];
Операнд2 = массивХрени[1];
....
ОперандN = массивХрени[N];
   ДереВово
 
4 - 17.02.21 - 18:24
Спасибо за ответ.

Это было упражнение перед созданием калькулятора, так что массивы еще не проходил.

Второй день сижу и гуглю про эту ПозицияОперации = 0;

Весь мозг сломал? Зачем писать ПозицияОперации = 0 если изменяя на ПозицияОперации = 15 или на любое число код по прежнему работает, почему именно 0

или таким способом просто ввели переменную?

Скорее всего я что то не допонял.
   ДереВово
 
5 - 17.02.21 - 18:39
Зачем вообще было писать эту строку ПозицияОперации = 0;
   Andreyyy
 
6 - 17.02.21 - 18:43
Может тот кто писал был слегка педантичен.
Или недоверял методу "Найти", что в случае отсутствия искомого значения вернется "0".
   fisher
 
7 - 17.02.21 - 18:45
(5) Это атавизм. Машинальная инициализация новой переменной дефолтовым значением (страхует от использования неинициализированной переменной, если дальнейшее изменение переменной происходит по каким-то условиям). В данном коде не имеет смысла, так как ниже переменная также явно переинициализируется. Возможно, изначально код был несколько другой.
   ДереВово
 
8 - 17.02.21 - 18:52
Спасибо огромное, ввело меня в заблуждение т.к всегда мне говорили что код должен быть оптимальным, а тут на тебе_)
спасибо еще раз.
   Йохохо
 
9 - 17.02.21 - 18:58
(7) или у афтара в руках такая тряпка и мел еще, оп чик и там уже цикл

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