Базовый курс. Домашнее задание №2
Второе задание по 0-му блоку базового курса.
Для выполнения рекомендуется изучить следующие главы 0-го блока.
Глава 11. Программный код
Глава 12. Примитивные типы данных
Глава 13. Контекст исполнения кода
Глава 14. Объектная техника
Глава 15. Сервисные средства по написанию кода
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.
Задание выполнил.
1. Массив заполняется ложью, идет бесконечный цикл.
2. Ошибся в Б и Г, табло позже подсказало.
3.1 Тут комментировать нечего
3.2 Сделал через сложение/вычитание.
Зацикливание, сразу предположил. После проверки, оказался прав.
Б и Г были трудности, табло их развеяло.
3.1
Вр=Начислено;
Начислено=Выплачено;
Выплачено=Вр;
3.2 Начислено= Начислено+ Выплачено;
Выплачено=Начислено- Выплачено;
Начислено=Начислено- Выплачено;
1. зацикливание
2. Б и Г – результаты не совпали с моими предположениями
3. без промежуточной переменной следующее решение:
Начислено = 1000;
Выплачено = 2000;
Выплачено = Выплачено – Начислено;
Начислено = Выплачено + Начислено;
по-моему, такого решения здесь еще никто не предложил
Такой вариант подойдет только для данного частного случая, для других значений не взлетит
1) Получается бесконечный цикл
2) «010» + «010» = 010010
«010» ++ «010» = 01010
«010» – «010» + 1 =1
«010» + – «010» = 010-101
3.1) Врем = Начислено;
Начислено = Выплачено;
Выплачено = Врем;
3.2) Ответ нашел в комментариях и выполнил
По поводу задания 2) Б и Г так получилось потому, что унарная операция выполнилаь первой, а потом по порядку следования операндов, с приведением к типу первого операнда
Классический вариант решения решения.
Н = 1
В = 2
Н = Н + В
В = Н – В
Н = Н – В
1.Понятно сразу.Бесконечный цикл.
2.Проблем с промежуточной переменной не возникло.Обработка:
Процедура КнопкаВыполнитьНажатие(Кнопка)
Начислено = 1000;
Выплачено = 2000;
Сообщить(“Начислено равно” + Начислено + “Выплачено равно” + Выплачено);
Чендж = Начислено;
Начислено = Выплачено;
Выплачено = Чендж;
Сообщить( “Было Ваше” + Выплачено + “Стало Наше” + Начислено);
КонецПроцедуры
Без промежуточной
Выплачено = Начислено + Выплачено;
Начислено = Выплачено – Начислено;
Выплачено = Выплачено – Начислено;
Здесь тоже трудностей не возникно.
Извиняюсь за опоздание.Только подключился к группе.
Ничего страшного, еще не все участники подключились..
1. Бесконечный цикл с добавлением в массив значения ЛОЖЬ – это понял быстро.
2. Догадался, что второй знак – это знак унарной операции, и тогда всё легко получается.
3. С промежуточной переменной изложено в уроках. Без промежуточной – про фишку со сложением и вычитанием чисел не знал, и в голову такое не пришло. Организовал через строки:
А = Строка(А) + “_” + Строка(Б);
а далее извлекаем из этой строки нужные числа.
Для произвольных переменных предполагал, что можно сделать через структуру
А = Новый Структура(“_1,_2”, А, Б);
но в комментариях у Rusja обнаружил, что всё гораздо сложнее. Пока не разобрался.
Сначала хотел извиниться за то, что поздно – был в дороге и не имел возможности ответить.
По первому заданию все просто : действительно бесконечный цикл в котором в массив добавляется “Ложь”.
По поводу сообщения Rusja о том что по Esc не прерывается:
оно и не должно прерываться и через диспетчер не должен процесс убиваться. Ежели хочешь иметь возможность в любой момент прервать цикл, то нужно поместить в нем : ОбработкаПрерыванияПользователя();
и тогда можно будет прервать по ctrl + break =)
По второму вопросу как и у многих возникли проблемы с “Г” так и не разобрался почему так получается о_О
По третьему тоже оригинальностью не блесну.
Первый вариант действительно более читаемый, а со вторым у незнающего зачем что тут делается человека могут возникнуть проблемы.
Говоря про вариант со структурой, можно взять строку=) будет геморно, непонятно, нечитаемо, но в отношении занимаемости память более эргономично на мой взгляд =)
Спасибо за подсказку с ОбработкаПрерыванияПользователя() , буду пользовать :),
А поповоду снятия процесса окна обработки без закрытия всего приложения – это логичное ожидание от тенденции развития платформы: независимые окна, клиент-серверное взаимодействие… полшага до независимости процесса каждой обработки, как мне кажется :)…
Закрывается процесс, убиваются все его данные.
В случае с 1С процесс один. То что реализовано множество окон в панели задач ничего не значит.
1) проблем не возникло (вспомнил, что писал Евгений в комментариях к решению ДЗ №1)
2) благодаря тому, что прочитал задание несколько раз смог сделать без ошибок
3) без дополнительной переменной сделал через сумму
Спасибо Руслану за ДЗ №2.5 :)
п.1 – бесконечный цикл и бесконечный массив (вероятно, до падения платформы – проверять не стал), заполненный ложью.
п.2.а – “010” + “010” = “010010”
п.2.б – “010” ++ “010” = “01010”
п.2.в – “010” – “010” + 1 = 1
п2.г -“010” +- “010” + 1 = “010-101”
второй знак в сдвоенных (“++” и “+-“) относятся к следующему значению как знак числа
п.3 – оба варианта классика. Само собой, интересен вариант без промежуточной переменной – для решения с текущими цифрами можно использовать вариант а = а + б; б = а – б; а = а – б; ну, или аналогичное с первым вычитанием. В общем случае необходимо добавить условия выбора метода, что бы не произошло переполнения промежуточных результатов.
1. Цикл бесконечный, так в массив добавляется результат сравнения и переменная “счетчик” не наращивается.
2. Для Б и Г не знал. Разобрался.
3. По длине код одинаковый, но первый читается легче:
Пром=Начислено;
Начислено=Выплачено;
Выплачено=Пром;
Начислено=Начислено+Выплачено;
Выплачено=Начислено-Выплачено;
Начислено= Начислено-Выплачено;
Задание сделано.
1. Счётчик остаётся равным нулю и следовательно,
цикл – бесконечный.
2. Табло расставило все точки над i.
3. Пункт 3.1 – ну, с этим ясно.
Пункт 3.2 – давно известная ФИШКА.
ДЗ №2 выполнил
Задание №1
правильно, бесконечный цикл заполнения массива значением “Ложь”, который не прерывается по “ESCape” к тому же. “CTRL+ALT+DEL” – молодцы 1С! окно обработки – отдельный процесс в диспетчере задач, значит можно закрыть только его при зависании без закрытия всего приложения!… ой! после завершения процесса окна приложения тоже вылетело не попрощавшись :(… чтож…будем ждем новых релизов платформы…
Задание №2
А. правильно
Б. не учел потерю первого нолика после преобразования строки к числу
В. предполагал правильный вариант, но все равно непонятно, почему? ведь компилятор должен приводить типы по первому слагаемому?
Г. правильно (благодаря ошибке в Б. предугадал потерю нолика :)
Задание №3
С числовыми переменными без вспомогательной было нетрудно догадаться, но захотелось универсального алгоритма для любого типа. Пришлось залезть в “Блок 1”, решение вроде бы нашлось (сомнения чуть позже).
Надеюсь, структура Б и ее элемент Б.Б не считаются разными переменными по условию? Впрочем я стремился реализовать не формальное отсутствие других имен переменных, а реально избежать создания в памяти 3-го экземпляра значения, поскольку думаю, что в реальной задаче нам никто не запретит объявить еще одну переменную, а вот вспомогательное значение при обмене значениями между переменными очень большого размера (предположим, в каждой лежит картинка мегабайт по 500) – это уже может сказаться на скорости работы алгоритма.
Итак, код:
ВариантРешения = “Вспомогательная переменная – это не круто!”;
А = “Значение А”; Б = “Значение Б”; // “инициализация”
Если ВариантРешения = “Вспомогательная переменная” Тогда
В=А; А=Б; Б=В;
ИначеЕсли ТипЗнч(А)=Тип(“Число”) И ТипЗнч(Б)=Тип(“Число”) Тогда //а вдруг Е.Гилев ошибся, и одна из переменных не Число? Вылетим с ошибкой? Нет!
А=А+Б; Б=А-Б; А=А-Б; // вариант для числовых А и Б… думаю, арифметические операторы в неявном виде все-таки используют память для хранения 3-го значения (промежуточного результата)
Иначе // а теперь попробуем сэмулировать работу через указатели… ох, как их не хватает в 1С для этой задачи!
А = Новый Структура (“А”, А);
Б = Новый Структура (“Б”, Б);
Б = Новый Структура (“Б,А”,Б,А);
А.А = А.А+”, тест1″; // Тест1, в табло видно, что А.А и Б.А.А указывают на одно и тоже “Значение А, тест1”!
А = Б.Б; //ВОТ ОНО!!! структура Б передается по ссылке, а не по значению! (проверка в след строке), вариант А = Б.Б.Б все испортил бы (т.к.передача произошла бы по значению, соответственно в памяти появилось бы 2 независимых экземпляра “Значение Б”)
Б.Б.Б = Б.Б.Б+”, тест2″; // Тест2, в табло видно, что А.Б и Б.Б.Б указывают на одно и тоже “Значние Б, тест2”!
Б = Б.А.А; //последние…
А = А.Б; //штрихи…
КонецЕсли;
Примечание: строки “Тест1” и “Тест2” только для диагностики на строковых переменных, а вообще для универсального использования их надо убрать или закомментировать
Теперь сомнения: Операторы вроде А = Новый Структура (“А”, А); Б = Б.А.А; (т.е. конструктор и дуструктор структуры) могут неявно внутри себя создавать вспомогательную копию значения А, но как это проверить, не знаю
Интересное решение.
А = Б.Б.Б и Б = Б.А.А это круто ))
Но, вместо того, чтобы избавиться от лишнего выделения памяти под вспомогательную переменную, вы создаете структуру, в которую входят еще две. Кажется экономии памяти мы не получим :)
Советую всем участникам ознакомиться с решением Руслана и понять его.
Евгений, насколько я понимаю как исполняется мой код (а если честно, то не на 100% :), мне все-таки удалось в течение всего алгоритма не допустить присутствия в памяти более чем по 1 экз. “ЗначениеА” и “ЗначениеБ”, контролировал по табло. Я понимаю, что вы говорите о накладных расходах памяти для создания структур, к сожалению, не знаю, каковы они в количестве байт, поэтому не могу утверждать, с каких размеров первоначальных значений А и Б будет выгоднее городить все эти конструкции. Было бы интересно Ваше мнение по этому поводу.
И еще одно. В процессе экспериментов со ссылками заметил интересное поведение платформы: пусть элемент структуры А.А равен 100, вызываем некую процедуру Тест(А, А.А);
Процедура Тест(Структура, Элемент)
Структура = NULL;
Сообщить (Элемент); // 100!!!… Структура “уничтожена”, а значение ее элемента продолжает оставаться доступным!
А еще заметил, основное тело модуля формы обработки почему-то выполняется 2 раза, причем на 2-й раз останавливается на последнем операторе и ждет события на форме (нажимаю кнопку к примеру), чтобы его исполнить… Впрочем, извините, такие вопросы правильнее писать на мыло?
Здесь штука вот следующая.
Если перед нами не примитивные типы данных, а какие-либо объекты, то они передаются по ссылке.
Например, в переменных содержатся указатели на большие картинки.
Переменные А и Б.
Тогда присваивание В = А, в переменную В передает указатель на область памяти выделенную под картинку.
То есть, копирования не будет происходить.
Тоже самое с коллекциями, на этом эффекте вы построили решение.
Пример приводите интересный, сейчас проверить не могу. Посмотрю завтра утром :)
1. Бесконечный цикл
2. Пункты Б и Г предположила неправильно.
3. а) ПромПерем = Начислено;
Начислено = Выплачено;
Выплачено = ПромПерем;
б) Начислено = Новый Структура(“Начислено”,Начислено);
Начислено.Вставить(“Выплачено”,Выплачено);
Выплачено = Начислено.Начислено;
Начислено = Начислено.Выплачено;
Начислено.Вставить(“Выплачено”,Выплачено);
Выплачено = Начислено.Начислено;
Начислено = Начислено.Выплачено;
1. В первом задании прокололся, ведь идет сравнение а не присваивание.
2. Полный ступор в Б и Г. Правда я только на 11 главе, может дальше что-то прояснится в унарных операциях.
3. Без дополнительной переменной решается через произведение (сумму, разность):
а=а*в;
в=а/в;
а=а/в.
А как-же вариант а=о или в=о? они ведь имеют на это право :)
Тогда через сумму или разность. Согласен, произведение не всегда подойдет.
1) Бесконечный цикл, т.к. нет изменения счетчика, а идет простое сравнение и помещение результата сравнения в массив;
2) Как и все. Примечательно поведение преобразования строки в число. Если в числовом выражении мы случайно напишем: 10-5,5 (с запятой вместо точки) – будет ошибка, а если 10-“5,5” – вернет 4.5
3) a=1000; b=2000
А. c=a; a=b;b=c
Б. здесь через сумму двух переменных. a=a+b; b=a-b;a=a-b.
п1. Бесконечный цикл
п2. Сделано (понравились унарные операции)
п3. Вариант без использования промежуточной переменой (для чисел)
А = строка(А) + Символы.ПС + строка(Б);
Б = Число(СтрПолучитьСтроку(А,1));
А = Число(СтрПолучитьСтроку(А,2));
По первому заданию как и многие прокололся, еще раз убеждаюсь в необходимости проверки всего и вся.
Второе задание трудностей не вызвало, спасибо, что подсказали про табло в пользовательском режиме. Сильно жизнь облегчило, да и в будущем облегчит.
Третье задание выполнил немного сложно, зато работает и для строк. Спасибо остальным за вариант с + и -. Вот мой вариант:
Выплачено = “” + Выплачено + “;” + Начислено;
Начислено = Число(Сред(Выплачено, 1, Найти(Выплачено, “;”) – 1));
Выплачено = Число(Сред(Выплачено, Найти(Выплачено, “;”) + 1, СтрДлина(Выплачено)));
Т.е. все перевожу в строки, а дальше распарсиваю :)
Вариант с тремя переменными тривиален, так что не привожу.
Выплачено = “” + Выплачено + “;” + Начислено;
Начислено = Число(Сред(Выплачено, 1, Найти(Выплачено, “;”) – 1));
Выплачено = Число(Сред(Выплачено, Найти(Выплачено, “;”) + 1, СтрДлина(Выплачено)));
Выплачено = “” + Выплачено + “;” + Начислено; Начислено = Число(Сред(Выплачено, 1, Найти(Выплачено, “;”) – 1)); Выплачено = Число(Сред(Выплачено, Найти(Выплачено, “;”) + 1, СтрДлина(Выплачено)));
1.Понятно
2.Б и Г неожиданный результат
3.Без промежуточной переменной можно решить так
Начислено = 1000;
Выплачено = 2000;
Начислено = “”+Начислено+Выплачено;
Выплачено = 0+Сред(Начислено,1,Найти(Начислено,Выплачено)-1);
Начислено = 0+Сред(Начислено,СтрДлина(Выплачено)+1);
Начислено = 1000; Выплачено = 2000;
Начислено = “”+Начислено+Выплачено;
Выплачено = 0+Сред(Начислено,1,Найти(Начислено,Выплачено)-1);
Начислено = 0+Сред(Начислено,СтрДлина(Выплачено)+1);
+1 :)
Думал я буду первым, ох уж эта премодерация :)
Кстати, если скажем Начислено будет равно 1010, а Выплачено = 10, то метод отработает некорректно
Согласен
Начислено = 1010;
Выплачено = 10;
Начислено = “”+Начислено+Выплачено;
Выплачено = 0+Сред(Начислено,1,СтрДлина(Начислено)-СтрДлина(Выплачено));
Начислено = 0+Сред(Начислено,СтрДлина(Выплачено)+1);
Начислено = 1010;
Выплачено = 10;
Начислено = “”+Начислено+Выплачено;
Выплачено = 0+Сред(Начислено,1,СтрДлина(Начислено)-СтрДлина(Выплачено));
Начислено = 0+Сред(Начислено,СтрДлина(Выплачено)+1);
Пункт 1. Бесконечный цикл, т.к. значение счетчика в цикле не меняется.
В массив добавляется рез-т логического выражения.
Пункт 2.
С заданием А,Б и Г вопросов не возникло, используется приоритетность операций и преобразование типов.
Задание В в уме решить не удалось, предполагалась ошибка т.к. между строками может быть только конкатенация.
Результат из табло понимаю так:при арифметических действиях отличных от сложения между двумя строками
происходит неявное преобразование строковых переменных в числа.
Пункт 3.
Способ 1. Был описан у уроках:
Начислено=1000;
Выплачено=2000;
Темп=Начислено;
Начислено=Выплачено;
Выплачено=Темп;
Способ 2.
Начислено=1000;
Выплачено=2000;
Начислено=Начислено*Выплачено;
Выплачено=Начислено/Выплачено;
Начислено=Начислено/Выплачено;
1. Сразу же накололся, думал, что в скобках оператор присваивания, а не сравнения.
2. Проблем не возникло.
3.1 Temp = A; A = B; B = Temp;
3.2 Решение знал ранее, но вот еще вариант для случая, когда обе переменные не числовые(строка, дата), но могут быть приведены к числам:
A = B – A;
B = B – A;
A = B + A;
Задание выполнила.
1. думала, что цикл будет бесконечным, а массив
заполнится значениями Неопределено. Оказалось, что
равенство воспринялось как логическое выражение и
массив заполнился булевым значением Ложь.
2.ошиблась в б) и г), разобралась.
3.решение знала – говорят эта задачка часто
встречается на собеседованиях-)))
а = начислено, в = выплачено, с = промежуточн. перем.
3.1 с = а, а = в, в = с
3.2 а = а + в, в = а – в, а = а – в
ДЗ выполнено.
1. Не правильно предположил, что в итоге будет в массиве (значения от 1 до 1000). Происходит зацикливание, в массиве бесконечные “ложь”. Выражение внутри скобок является не присваиванием, а сравнением.
2. Верное предположение было только для варианта “Б”.
При разборе в отладчике (табло не нашел, где находится =), подскажет кто-нибудь?) выявлены следующие особенности: при наличии операции конкатенации (“+”) дополнительный знак “+” или “-” таки преобразует строку в число, если данная строка может быть к числу преобразована.
3. С использованием доп. переменной – тривиально. Без использования – с помощью одной операции сложения и двух операций вычитания.
Поправка:
2. Верное предположение было для варианта “В”, а не “Б”
Про табло мы рассказываем в 0-вом блоке. Поищите в содержании и послушайте..
Задание выполнено.
1) Бесконечный цикл с добавлением в массив занчения Ложь
2) 3-я строка тип = число, остальные – тип = строка
3) а) Самый простой вариант с использованием простой переменной, но для разнообразия можно и так:
ВремМассив = Новый Массив;
ВремМассив.Добавить(Перем1);
ВремМассив.Добавить(Перем2);
Перем1 = ВремМассив[1];
Перем2 = ВремМассив[0];
ВремМассив = Новый Массив; ВремМассив.Добавить(Перем1); ВремМассив.Добавить(Перем2); Перем1 = ВремМассив[1]; Перем2 = ВремМассив[0];
б) Без доп. переменной единственный вариант, который приходит в голову – это со сложением и последующим вычитанием переменных.
Почему-то при копипасте в комментарии текст задваивается.
Изучаем это явление..
п.1 Результат ожидаемый.
п.2 При проверке все ясно.
п.3
ППерем = Начислено;
Начислено = Выплачено;
Выплачено = ППерем;
Начислено = Начислено – Выплачено;
Выплачено = Начислено + Выплачено;
Начислено = Выплачено – Начислено;
наверно не буду повторяться про первые 2 пункта, а вот 3ий я сделал через процедуру загоняя туда структуру, состоящую из 2х записей
по поводу 3его (без третьей переменной):
Выплачено = Начислено + Выплачено;
Начислено = Выплачено – Начислено;
Выплачено = Выплачено – Начислено;
Но, с числами то понятно, а вот с другими типами не очень)
Лишние строчки удалил :)
Спасибо)
ДЗ сделал кроме 3.2
Задание выполнила.
По пунктам 1, 2 – трудностей не возникло, мои предположения оказались верными.
По пункту 3 – вариант без дополнительной переменной, как и у многих, всплыл откуда-то из дальней памяти :)
Выполнил,
1. Зацикливание, т.к. Счетчик =0;
2.узнал новое “++” преобразует второй операнд в число
“+-“преобразует второй операнд в число инвертируя его. Попробуйте без табло угадать, что будет “010”+-“-020″+3 ?
3.Когда-то решал, вспомнил
PS Если правильно понял, то без разницы какой токен (120- дневный или 90-дневный) подключать
для доступа к МГ
Нет, есть разница. В вашем случае для базового курса токен 120-дневный..
ДЗ№2 выполнил
п.1 Бесконечный цикл формирования массива, каждый элемент которого “ЛОЖЬ”
п.2 Результат в отладчике совпал с ожидаемым
п.3.1 – понятно как
3.2 Задачка безусловно интересная, но я ее, к сожалению, уже знал. (решил не сам – прочитал, где – не помню)
Кстати, вопрос: А есть здесь такие, которые задачу п.3.2 решили самостоятельно??? только честно
PS А как можно аватарку в профиль добавить? что то я не соображу :-(
3.2. Да, есть люди, которые решили такую задачу самостоятельно.
Инструкция по заведению аватаров – https://mg.spec8.ru/2010/07/29/%D0%B2%D0%B0%D1%88%D0%B8-%D0%B0%D0%B2%D0%B0%D1%82%D0%B0%D1%80%D1%8B/.
Задание выполнил.
п.1 Бесконечный цикл. Элементы массива всегда будут равны ЛОЖЬ.
п.2 строка, строка, число, строка
п.3.1. Темп=Х, X=Y, Y=Темп, где Х – Начислено, Y – Выплачено.
п.3.2. X=X+Y, Y=X-Y, X=X-Y
Задание сделала, проверила по табло.
В первом пункте будет бесконечная ложь. :)
Во втором была ошибочка в четвертом примере, редкий случай, когда +- дает +.
В третьем вообще просто. Второй случай, хоть на практике не помню чтоб использовала, вспомнился откуда-то со школы.
1. Изначально думала что, что будет бесконечный цикл при исполнении которого в массив будут записываться нули, оказалось не учла что тип записываемых данных – Булево, что показала отладка.
2. Запуталась в знаках в Г). При проверки в Табло во всем разобралась.
3. С использованием промежуточной переменной:
ПромежуточнаяПерем = Начислено;
Начислено = Выплачено;
Выплачено = ПромежуточнаяПерем;
Без использования промежуточной переменной:
Начислено = Начислено+Выплачено;
Выплачено = Начислено – Выплачено;
Начислено = Начислено – Выплачено;
1) Думал что счетчик будет увеличиваться, но отладчик меня переубедил доказав что в строке
М.Добавить(счетчик=счетчик+1);
“=” выступает в качестве условия равенства.
2) вариант Г. опять табло со мной не согласилось=))
3)Сделал, т.к. подробно разбиралось в одном из уроков.
//вариант с тремя переменными
промежуточное=Начисленно;
Начисленно=Выплачено;
Выплачено=промежуточное;
//вариант без переменной
Начисленно=Начисленно+Выплачено;
Выплачено=Начисленно-Выплачено;
Начисленно=Начисленно-Выплачено;
//вариант с тремя переменнымипромежуточное=Начисленно;Начисленно=Выплачено;Выплачено=промежуточное; //вариант без переменнойНачисленно=Начисленно+Выплачено;Выплачено=Начисленно-Выплачено;Начисленно=Начисленно-Выплачено;
1. Бесконечный цикл, в котором к динамическому массиву добавляется новый элемент со значением <ложь>.
Так происходит потому, что в данном случае счетчик не инкрементируется. Просто вычисляется значение выражения Счетчик = Счетчик +1 и сохраняется в массив.
Т.о. счетчик всегда равен 1 и условие счетчик<1000 всегда равно истина.
2. Сделано. Интересные конечно моменты есть, но все понятно.
3. Используя промежуточную переменную:
– Присваиваем промежут. переменной значение Начислено;
– Начислено присваиваем значение Выплачено
– Выплачено присваиваем значение промежуточной переменной
Не используя промежуточную переменную, сделал так:
Начислено = Начислено + Выплачено;
Выплачено = Начислено – Выплачено;
Начислено = Начислено – Выплачено;
Надеюсь все правильно сделал.
Д/З №2
1). Бесконечный цикл, т.к. счетчик не изменяется в теле цикла. В каждом шаге цикла в массив добавляется элемент равный результату логической операции “=” (Счетчик = Счетчик +1) т.е. ЛОЖЬ и так до бесконецности.
2.1). Обычная конкатенация строк.
2.2). Приведение типа к числу +”010″ -> 10, затем приведение к строке 10->”10″ и конкатенация строк.
2.3). Приведение “010” к числу, затем арифметические действия 10-10+1 = 1, результат число.
2.4). Приведение типа -“010″ -> -10, затем приведение -10->”-10″, 1->”1″ и конкатенация строк “010” + “-10” + “1” = “010-101”
3).
Процедура ПоменятьМестамиВариант_1(Начислено, Выплачено)
Врем = Начислено;
Начислено = Выплачено;
Выплачено = Врем;
КонецПроцедуры
Процедура ПоменятьМестамиВариант_2(Начислено, Выплачено)
Начислено = Начислено + Выплачено;
Выплачено = Начислено – Выплачено;
Начислено = Начислено – Выплачено;
КонецПроцедуры
Сожалею, но ковычки в вашем блоге ведут себя не адекватно, посему мой ответ плохо читаем, особенно задание 2, где много кавычек :(
Над проблемой работаем..
Задание выполнил.
Обмен значениями переменных (без введения временной переменной) идет через “+” и “-“.
ПС: К сожалению так и не понял где смотреть главы курса для изучения. Задания №1, 2 выполнял пользуясь имеющимися знаниями. Просветите кто-нибудь, плиз :)
Разобрались как скачивать материалы?
Да, спасибо.
1. В предположениях ошибся, посчитал, что несмотря на наивысший приоритет скобок операция увеличения счетчика будет выполнена, оказалось что это не так и получается бесконечный цикл, элементы массива всегда равны нулю.
2. Также ошибся в предположениях, посчитал что везде будут числа, на самом деле получается следующее:
“010” + “010” = “010010” тип Строка. Просто складываются две строки
“010” ++ “010” = “01010” тип Строка. Выполняется унарная операция + в результате чего второй операнд приводится к типу “число”, а затем “прибавляется” к строке
“010” – “010” + 1 = 1 тип Число. Первым выполняется операция вычитания, что дает “0” и прибавляется 1
“010” +- “010” + 1 = “010-101” тип Строка. Унарная операция -, в результате -10, затем конкатенация со строкой, результат “010-10” и последняя конкатенация с 1
3. Вариант1, с временной переменной:
ВремПерем = Начислено;
Начислено = Выплачено;
Выплачено = ВремПерем;
Второй вариант, без переменной:
Начислено = Начислено + Выплачено;
Выплачено = Начислено – Выплачено;
Начислено = Начислено – Выплачено;
Разобрался, элементы в массиве это не “0”, а “ложь”, посему можно сделать вывод, что в операторе
Счетчик = Счетчик +1);
М.Добавить(Счетчик = Счетчик + 1);
внутри скобок происходит сравнение, результатом которого является ложь. А вот если написать М.Добавить(Счетчик ++ 1); тогда элементами массива будут 1. Хотя весьма интересное поведение платформы, что она не увеличивает счетчик.
Задание выполнил
п.1 – комментировать особо нечего – ожидаемо получим массив из 1000 элементов со значениями “ложь”
п.2 1,3- на мной взгяд в комментарии так же не нуждается
“010”++”010″=”010″+(+”010″)=”010″+(+10)=”010″+10=”01010″
“010”+-“010″+1=”010″+(-“010”)+1=”010″+(0-“010″)+1=”010″+(-10)+1=”010-10″+1=”010-101”
п3. 1.а=начислено;
начислено=выплачено;
выплачено=начислено
2. начислено=начислено+выплачено;
выплачено=начислено-выплачено;
начислено=начислено-выплачено;
в п3. ошибочка-стр3. выплачено=а;
Сейчас только заметил, что в задании 1 получил бесконечный цикл и сч не увеличивается