Базовый курс. Занятие №2
Второе занятие по 0-му блоку базового курса.
Необходимо изучить следующие главы.
Глава 12. Примитивные типы данных
Глава 13. Контекст исполнения кода
Глава 14. Объектная техника
Глава 15. Сервисные средства по написанию кода
Также нужно выполнить домашнее задание, текст которого доступен на странице.
В этой же теме необходимо написать отчет о выполнении задания.
ps. Участники курса без доступа в мастер-группу отчитываться по домашним заданиям не могут.
— залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —напишите нам на e-mail поддержки.
1. Создал переменную счетчик и передал в метод добавить. Поскольку еще в первом задании напоролся, что “кэшировать” лучше через переменную. НО оказалось все не так и кэш тут не причем как я понял после просмотра решения. Почему внутри методе добавить “=” воспринимается как сравнение?
2. До сих пор “рубит”. :)
3. Первый вариант:
Начислено=1000;
Выплачено=2000;
ПромежуточнаяПеременная=Выплачено+Начислено;
Начислено=ПромежуточнаяПеременная-Начислено;
Выплачено=ПромежуточнаяПеременная-Выплачено;
Второй вариант:
Начислено=1000;
Выплачено=2000;
Начислено=Начислено+Выплачено;
Выплачено=Начислено-Выплачено;
Начислено=Начислено-Выплачено;
>Почему внутри методе добавить «=» воспринимается как сравнение
Равенство является оператором присваивания только в выражениях вида
А = …
Во всех остальных случаях это операция сравнения.
Это ведь присваивание:
Счетчик = Счетчик +1
а это сравнение:
М.Добавить(Счетчик = Счетчик +1);
Почему?
Код:
М.Добавить(Счетчик = Счетчик +1);
Соответствует выражению F.X(param).
А мы говорим о том, что присваивание будет только в случае
A = B, где B произвольное выражение.
чтобы я вас не доставал вопросами, подскажите пожалуйста какие видео пересмотреть по этому вопросу, по-моему у меня большой пробел.
Мы об этом говорим в нулевом блоке курса, попробуйте пересмотреть урок “Оператор присваивания”.
Я думал вопрос исчерпан. Если нет, то пишите.
уж простите за мою непонятливость. с присваиванием и сравнением все предельно понятно.
не понятно почему внутри скобок (параметр) присваивание становиться сравнением :)
Давайте еще раз, оператор присваивания имеет вид:
А = F(x);
Все другие способы использования символа “=” делают его оператором сравнения.
Теперь ясность наступила?
1. Цикл бесконечный, но массив не может содержать бесконечное количество элементов, поэтому должен прерваться на ошибке… Размер зависит от допустимого значения платформы или возможностью выполняющего компьютера :-)
2.Для себя узнал:
Компилятор будет преобразовывать у “слагаемого” тип строка в тип число, если будет стоять дополнительный знак +.
Если будет стоять знак “-“, то будет обязательное преобразование всех “слагаемых” в тип число.
Б.Узнал, при добавлении знака перед типом строка, обязательно будет преобразование в тип число.
3. а)Начислено = 1000;
Выплачено =200;
буфер=Начислено;
Начислено = Выплачено;
Выплачено = буфер;
б)Начислено = 1000;
Выплачено =200;
Начислено=Начислено+Выплачено;
Выплачено=Начислено-Выплачено;
Начислено=Начислено-Выплачено;
В ДЗ 02 честно видеорешение еще не смотрелось…
п.1 получается “бесконечная ложь” :) Счетчик не меняется, в массив – результат сравнения.
один вопрос: почему, если делать это в процедуре ПриСозданииНаСервере() (&НаСервере)
и в тело цикла вставить ОбработкаПрерыванияПользователя();
то синтаксис-помощник выдает ошибку:
{Форма.Форма.Форма(12,2)}: Процедура или функция с указанным именем не определена (ОбработкаПрерыванияПользователя)
<>ОбработкаПрерыванияПользователя(); (Проверка: Сервер)
п.2 самый трудоемкий для понимания оказался результат “010-101” по последнему примеру: “010”+-“010″+1
Что происходит по порядку:
– Сначала унарная операция -“010”. Система пытается избежать ошибки и приводит к числу строку “010”, получается -10.
– Далее по приоритету: строка “010”+ число -10. Во избежание ошибки система приводит к типу первого слагаемого: складывает как строки: “010-10”
– И последнее: строка “010-10” + число 1 аналогично второму шагу, оба слагаемых приводятся к типу первого и складываются как строки: “010-101”
п.3
//Начислено = 1000;
//Выплачено = 2000;
Начислено = 150;
Выплачено = 301;
////способ1 с промежуточной переменной
//Темп = Начислено;
//Начислено = Выплачено;
//Выплачено = Темп;
//способ2 без промежуточной переменной
//сохраним разницу между 2 величинами, от нее сможем вернуться
//чтоб Выплачено стало =старому начислено, надо отнять разницу
//чтоб Начислено стало =старому выплачено, надо к тому что стало =старому начислено прибавить разницу
//работает в вариантах и Начислено>=Выплачено, и Выплачено>Начислено
Начислено = Выплачено – Начислено;
Выплачено = Выплачено – Начислено;
Начислено = Выплачено + Начислено;
1) 2) Понял только после просмотра решения.
3) С переменной.
Пытаюсь догнать график группы, т.к. начала занятия позже. Мое решение Дз2.
1. Создатся объект типа Массив, и я вначале неправильно решила (тест на внимательность я не прошла) что он заполнится от первого до 999 элемента числамми от 1 до 1000.
А когда написала процедуру и запустила, то еще до результата в Табло поняла, что масссив будет заполнен Булево (Счетчик = Счетчик+1 дает ЛОЖЬ)
2. Привожу результаты, вычисленные сначала в уме, затем проверенные в Табло:
А. конкатенация строк, в результате строка “010010”
Б. сначала унарная операция со вторым слагаемым, в результате оно превращается в число 10,
затем конкатенация 1 строки и числа, в результате согласно типу первого элемента получается строка”01010″
В. сначала первый и второй операнд приводятся к числу, и ,вычисляя, получаем 10-10=0 это число,
затем сложение 2 чисел, в результате число 1
Г. сначала унарная операция со вторым слагаемым и оно превращается в число -10, затем конкатенция 1 строки и числа -10,
в результате получаем строку “010-10”; затем опять конкатенация полученной в первом действии строки и числа,
итог строка “010-101”
3.
// 1 вариант с промежуточной переменной (уже разбирался в одном из теоретических занятий)
Процедура ЗаменаЗначенийПеременных1()
Начислено = 150;
Выплачено = 301;
ВремПерем = Начислено;
Начислено = Выплачено;
Выплачено = ВремПерем;
сообщить(“Начислено “+Начислено);
сообщить(“Выплачено “+Выплачено);
КонецПроцедуры // ЗаменаЗначенийПеременных()
//2 вариант – конкатенация 2 чисел в строку и затем разбивка этой строки снова на 2 числа.
Процедура ЗаменаЗначенийПеременных2()
Начислено = 150;
Выплачено = 301;
Начислено = Строка(Начислено)+Строка(Выплачено);
сообщить(“Начислено “+Начислено);
Выплачено = СтрЗаменить(Начислено,Строка(Выплачено),””);
Начислено = СтрЗаменить(Начислено,Строка(Выплачено),””);
сообщить(“Начислено “+Начислено);
сообщить(“Выплачено “+Выплачено);
КонецПроцедуры // ЗаменаЗначенийПеременных2()
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
сообщить(“Вариант1”);
ЗаменаЗначенийПеременных1();
сообщить(“Вариант2”);
ЗаменаЗначенийПеременных2();
КонецПроцедуры
1. Попал в ловушку, думал будет массив из тысячи элементов.
2. Затруднений не вызвало. Хватило простой внимательности.
3. Решение с промежуточной переменной очевидно. Без переменной сделал так:
<code>
Начислено = 1000;
Выплачено = 2000;
Начислено = Начислено*Выплачено;
Выплачено = Начислено/Выплачено;
Начислено = Начислено/Выплачено;
</code>
Здравствуйте. Решение ДЗ2
Часть 1: Будет зацикливание, т.к.счетчик не увеличивается. Анализ был правилен, т.к. после вашего кода пришлось перезапускать 1С :)
Часть2:
//Сообщить(“010″+”010″); //”010010”
//Сообщить(“010″++”010″); //”010″+10=”01010”
//Сообщить(“010”-“010″+1); //”10-10+1=1
//Сообщить(“010″+-“010″+1); //”010″+(-10)+1=”010-10″+1=”010-101”
Часть3:
1вариант:
ПрПерем = Начислено;
Начислено = Выдано;
Выдано = ПрПерем;
2вариант:
Начислено = Начислено + Выдано;
Выдано = Начислено – Выдано;
Начислено = Начислено – Выдано;
С табло не разобралась, все делала во внешней обработке. Обещаю на майских заполнить этот пробел
Извините, что скобки кривые, это результат копирования. В конфигураторе все скобки верхние
Видимо речь о кавычках. Ничего страшного, это особенность нашего сайта.
<code>
// 1-й вариант
тмп = Начислено;
Начислено = Выплачено;
Выплачено = тмп;
// 2-й вариант
Начислено = Начислено + Выплачено;
Выплачено = Начислено – Выплачено;
Начислено = Начислено – Выплачено;
</code>
Первое задание сделала неправильно. Не предполагала, что значение будет булево.
Во втором задании правильно рассчитала только В
Третье задание выполнила быстро. Второй вариант получился такой:
<code>
Начислено = Начислено+Выплачено;
Выплачено = Начислено-Выплачено;
Начислено = Начислено-Выплачено;
</code>
1)бесконечный цикл, так как значение счетчика не увеличивается
2)все сошлось
3) с переменой
х = Начислено;
Начислено =Выплачено;
Выплачено=х;
без переменной
Начислено = Начислено + Выплачено;
Выплачено = Начислено – Выплачено;
Начислено = Начислено – Выплачено;
С первым заданием не справился с нетерпеньем ждал решения. Теперь понял после просмотра
2) 1. 010010 2. 01010 3.ошибся 4. ошибся
Долго думал над 2) -м вариантом 3-его задания.
1) Создаем временную переменную
2) методом накопления результатов