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