Базовый курс. Домашнее задание №2

Второе задание по 0-му блоку базового курса.

Для выполнения рекомендуется изучить следующие главы 0-го блока.
Глава 11. Программный код
Глава 12. Примитивные типы данных
Глава 13. Контекст исполнения кода
Глава 14. Объектная техника
Глава 15. Сервисные средства по написанию кода

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь. Если Вы оплачивали курс, у Вас активирован токен доступа, Вы залогинены, но Вы видите эту запись — напишите нам на e-mail поддержки.

комментария 133 на “Базовый курс. Домашнее задание №2”

  1. Manase940N 02.11.2010 в 15:09

    Задание выполнил.
    1. Массив заполняется ложью, идет бесконечный цикл.
    2. Ошибся в Б и Г, табло позже подсказало.
    3.1 Тут комментировать нечего
    3.2 Сделал через сложение/вычитание.

  2. Зацикливание, сразу предположил. После проверки,  оказался прав.
    Б и Г были трудности, табло их развеяло.

    3.1
    Вр=Начислено;
    Начислено=Выплачено;
    Выплачено=Вр;
     
    3.2 Начислено= Начислено+ Выплачено;
    Выплачено=Начислено- Выплачено;
    Начислено=Начислено- Выплачено;

  3. Антон К. 02.11.2010 в 00:59

    1. зацикливание
    2. Б и Г – результаты не совпали с моими предположениями
    3. без промежуточной переменной следующее решение:
     
    Начислено = 1000;
    Выплачено = 2000;
    Выплачено = Выплачено – Начислено;
    Начислено = Выплачено + Начислено;
    по-моему, такого решения здесь еще никто не предложил

    • Евгений Шилов 02.11.2010 в 09:08

      Такой вариант подойдет только для данного частного случая, для других значений не взлетит

  4. 1)      Получается бесконечный цикл
    2)      «010» + «010» = 010010
    «010» ++ «010» = 01010
    «010»  – «010» + 1 =1
    «010» + – «010» = 010-101
    3.1)  Врем = Начислено;
    Начислено = Выплачено;
    Выплачено = Врем;
    3.2)  Ответ нашел в комментариях и выполнил

  5. По поводу задания 2) Б и Г так получилось потому, что унарная операция выполнилаь первой, а потом по порядку следования операндов, с приведением к типу первого операнда

  6. Классический вариант решения решения. 

    Н = 1
    В = 2
    Н = Н + В
    В = Н – В
    Н = Н – В

  7. Талицкий Артем 01.11.2010 в 20:45

    1.Понятно сразу.Бесконечный цикл.
    2.Проблем с промежуточной переменной не возникло.Обработка:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Начислено = 1000;
    Выплачено = 2000;
    Сообщить(“Начислено равно” + Начислено + “Выплачено равно” + Выплачено);
    Чендж = Начислено;
    Начислено = Выплачено;
    Выплачено = Чендж;
    Сообщить( “Было Ваше” + Выплачено + “Стало Наше” + Начислено);

    КонецПроцедуры

    Без промежуточной
    Выплачено = Начислено + Выплачено;
    Начислено = Выплачено – Начислено;
    Выплачено = Выплачено – Начислено;
    Здесь тоже трудностей не возникно.
    Извиняюсь за опоздание.Только подключился к группе.

    • Ничего страшного, еще не все участники подключились..

  8. 1. Бесконечный цикл с добавлением в массив значения ЛОЖЬ – это понял быстро.
    2. Догадался, что второй знак – это знак унарной операции, и тогда всё легко получается.
    3. С промежуточной переменной изложено в уроках. Без промежуточной – про фишку со сложением и вычитанием чисел не знал, и в голову такое не пришло. Организовал через строки:
    А = Строка(А) + “_” + Строка(Б);
    а далее извлекаем из этой строки нужные числа.
    Для произвольных переменных предполагал, что можно сделать через структуру
    А = Новый Структура(“_1,_2”, А, Б);
    но в комментариях у Rusja обнаружил, что всё гораздо сложнее. Пока не разобрался.

  9. Сначала хотел извиниться за то, что поздно – был в дороге и не имел возможности ответить.
    По первому заданию все просто : действительно бесконечный цикл в котором в массив добавляется “Ложь”.
    По поводу сообщения Rusja  о том что по Esc  не прерывается:
    оно и не должно прерываться и через диспетчер не должен процесс убиваться. Ежели хочешь иметь возможность в любой момент прервать цикл, то нужно поместить в нем : ОбработкаПрерыванияПользователя();
    и тогда можно будет прервать по ctrl + break =)
     
    По второму вопросу как  и у многих возникли проблемы с “Г” так и не разобрался почему так получается о_О
     
    По третьему тоже оригинальностью не блесну.
    Первый вариант действительно более читаемый, а со вторым у незнающего зачем что тут делается человека могут возникнуть проблемы.
     
    Говоря про вариант со структурой, можно взять строку=) будет геморно, непонятно, нечитаемо, но в отношении занимаемости память более эргономично на мой взгляд =)
     

    • Спасибо за подсказку с ОбработкаПрерыванияПользователя() , буду пользовать :),
      А поповоду снятия процесса окна обработки без закрытия всего приложения – это логичное ожидание от тенденции развития платформы: независимые окна, клиент-серверное взаимодействие… полшага до независимости процесса каждой обработки, как мне кажется :)…

      • Закрывается процесс, убиваются все его данные.
        В случае с 1С процесс один. То что реализовано множество окон в панели задач ничего не значит.

  10. 1) проблем не возникло (вспомнил, что писал Евгений в комментариях к решению ДЗ №1)
    2) благодаря тому, что прочитал задание несколько раз смог сделать без ошибок
    3) без дополнительной переменной сделал через сумму

    Спасибо Руслану за ДЗ №2.5 :)

  11. п.1 – бесконечный цикл и бесконечный массив (вероятно, до падения платформы – проверять не стал), заполненный ложью.
    п.2.а – “010” + “010” = “010010”
    п.2.б – “010” ++ “010” = “01010”
    п.2.в – “010” – “010” + 1 = 1
    п2.г -“010” +- “010” + 1 = “010-101”
    второй знак в сдвоенных (“++” и “+-“) относятся к следующему значению как знак числа
    п.3 – оба варианта классика. Само собой, интересен вариант без промежуточной переменной – для решения с текущими цифрами можно использовать вариант а = а + б; б = а – б; а = а – б; ну, или аналогичное с первым вычитанием. В общем случае необходимо добавить условия выбора метода, что бы не произошло переполнения промежуточных результатов.

  12. 1. Цикл бесконечный, так в массив добавляется результат сравнения и переменная “счетчик” не наращивается.
    2.  Для Б и Г не знал. Разобрался.
    3.  По длине код одинаковый, но первый читается легче:
    Пром=Начислено;
    Начислено=Выплачено;
    Выплачено=Пром;

    Начислено=Начислено+Выплачено;
    Выплачено=Начислено-Выплачено;
    Начислено= Начислено-Выплачено;

  13. Задание сделано.

    1. Счётчик остаётся равным нулю и следовательно,
        цикл – бесконечный.
     2. Табло расставило все точки над i.
     3. Пункт 3.1 – ну, с этим ясно.
         Пункт 3.2 – давно известная ФИШКА.

  14. ДЗ №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-й раз останавливается на последнем операторе и ждет события на форме (нажимаю кнопку к примеру), чтобы его исполнить… Впрочем, извините, такие вопросы правильнее писать на мыло?
         

        • Здесь штука вот следующая.
          Если перед нами не примитивные типы данных, а какие-либо объекты, то они передаются по ссылке.
          Например, в переменных содержатся указатели на большие картинки.
          Переменные А и Б.
          Тогда присваивание В = А, в переменную В передает указатель на область памяти выделенную под картинку.
          То есть, копирования не будет происходить.

          Тоже самое с коллекциями, на этом эффекте вы построили решение.

          Пример приводите интересный, сейчас проверить не могу. Посмотрю завтра утром :)

  15. MashkaRomashkina 01.11.2010 в 17:24

    1. Бесконечный цикл
    2. Пункты Б и Г предположила неправильно.
    3.  а) ПромПерем = Начислено;
    Начислено = Выплачено;
    Выплачено = ПромПерем;
    б) Начислено = Новый Структура(“Начислено”,Начислено);
    Начислено.Вставить(“Выплачено”,Выплачено);
    Выплачено = Начислено.Начислено;
    Начислено = Начислено.Выплачено;

    Начислено.Вставить(“Выплачено”,Выплачено);
    Выплачено = Начислено.Начислено;
    Начислено = Начислено.Выплачено;

  16. 1. В первом задании прокололся, ведь идет сравнение а не присваивание.
    2. Полный ступор в Б и Г.  Правда я только на 11 главе,  может дальше что-то прояснится в унарных операциях.
    3. Без дополнительной переменной решается через произведение (сумму, разность):
    а=а*в;
    в=а/в;
    а=а/в.
     

    • А как-же вариант а=о или в=о? они ведь имеют на это право :)

      • Тогда через сумму или разность. Согласен, произведение не всегда подойдет.

  17. 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.
     
     

  18. п1.  Бесконечный цикл
    п2.  Сделано (понравились унарные операции)
    п3.  Вариант без использования промежуточной переменой (для чисел)
    А = строка(А) + Символы.ПС + строка(Б);
    Б = Число(СтрПолучитьСтроку(А,1));
    А = Число(СтрПолучитьСтроку(А,2));

  19. Евгений Шилов 31.10.2010 в 18:03

    По первому заданию как и многие прокололся, еще раз убеждаюсь в необходимости проверки всего и вся.
    Второе задание трудностей не вызвало, спасибо, что подсказали про табло в пользовательском режиме. Сильно жизнь облегчило, да и в будущем облегчит.
    Третье задание выполнил немного сложно, зато работает и для строк. Спасибо остальным за вариант с + и -. Вот мой вариант:

    Выплачено = “” + Выплачено + “;” + Начислено;
    Начислено = Число(Сред(Выплачено, 1, Найти(Выплачено, “;”) – 1));
    Выплачено = Число(Сред(Выплачено, Найти(Выплачено, “;”) + 1, СтрДлина(Выплачено)));
    Т.е. все перевожу в строки, а дальше распарсиваю :)
    Вариант с тремя переменными тривиален, так что не привожу.

     
    Выплачено = “” + Выплачено + “;” + Начислено;

    Начислено = Число(Сред(Выплачено, 1, Найти(Выплачено, “;”) – 1));
    Выплачено = Число(Сред(Выплачено, Найти(Выплачено, “;”) + 1, СтрДлина(Выплачено)));
    Выплачено = “” + Выплачено + “;” + Начислено; Начислено = Число(Сред(Выплачено, 1, Найти(Выплачено, “;”) – 1)); Выплачено = Число(Сред(Выплачено, Найти(Выплачено, “;”) + 1, СтрДлина(Выплачено)));
     

  20. SelyukovDm 31.10.2010 в 16:14

    1.Понятно
    2.Б и Г неожиданный результат
    3.Без промежуточной переменной можно решить так

    Начислено = 1000;
    Выплачено = 2000;
    Начислено = “”+Начислено+Выплачено;
    Выплачено = 0+Сред(Начислено,1,Найти(Начислено,Выплачено)-1);
    Начислено = 0+Сред(Начислено,СтрДлина(Выплачено)+1);
    Начислено = 1000; Выплачено = 2000;
    Начислено = “”+Начислено+Выплачено;
    Выплачено = 0+Сред(Начислено,1,Найти(Начислено,Выплачено)-1);
    Начислено = 0+Сред(Начислено,СтрДлина(Выплачено)+1);

    • Евгений Шилов 31.10.2010 в 18:06

      +1 :)
      Думал я буду первым, ох уж эта премодерация :)

    • Евгений Шилов 31.10.2010 в 21:07

      Кстати, если скажем Начислено будет равно 1010, а Выплачено = 10,  то метод отработает некорректно

      • SelyukovDm 01.11.2010 в 16:25

        Согласен

        Начислено = 1010;
        Выплачено = 10;
        Начислено = “”+Начислено+Выплачено;
        Выплачено = 0+Сред(Начислено,1,СтрДлина(Начислено)-СтрДлина(Выплачено));
        Начислено = 0+Сред(Начислено,СтрДлина(Выплачено)+1);
        Начислено = 1010;
        Выплачено = 10;
        Начислено = “”+Начислено+Выплачено;
        Выплачено = 0+Сред(Начислено,1,СтрДлина(Начислено)-СтрДлина(Выплачено));
        Начислено = 0+Сред(Начислено,СтрДлина(Выплачено)+1);

  21. Пункт 1. Бесконечный цикл, т.к. значение счетчика в цикле не меняется.
    В массив добавляется рез-т логического выражения.
    Пункт 2.
    С заданием А,Б и Г вопросов не возникло, используется приоритетность операций и преобразование типов.
    Задание В в уме решить не удалось, предполагалась ошибка т.к. между строками может быть только конкатенация.
    Результат из табло понимаю так:при арифметических действиях отличных от сложения между двумя строками
    происходит неявное преобразование строковых переменных в числа.
    Пункт 3.
    Способ 1. Был описан у уроках:
    Начислено=1000;
    Выплачено=2000;
    Темп=Начислено;
    Начислено=Выплачено;
    Выплачено=Темп;
    Способ 2.
    Начислено=1000;
    Выплачено=2000;
    Начислено=Начислено*Выплачено;
    Выплачено=Начислено/Выплачено;
    Начислено=Начислено/Выплачено;

  22. 1.  Сразу же накололся, думал, что  в скобках оператор присваивания, а не сравнения.
    2.  Проблем не возникло.
    3.1  Temp = A;  A = B;  B = Temp;
    3.2 Решение знал ранее, но вот еще вариант для случая, когда обе переменные не числовые(строка, дата),  но могут быть приведены к числам:
    A =  B – A;
    B = B – A;
    A = B + A;

  23. Задание выполнила.
    1. думала, что цикл будет бесконечным, а массив
    заполнится значениями Неопределено. Оказалось, что
    равенство воспринялось как логическое выражение и
    массив заполнился булевым значением Ложь.
    2.ошиблась в б) и г), разобралась.
    3.решение знала – говорят эта задачка часто
    встречается на собеседованиях-)))
    а = начислено, в = выплачено, с = промежуточн. перем.
    3.1 с = а, а = в, в = с
    3.2 а = а + в, в = а – в, а = а – в

  24. ДЗ выполнено.
    1. Не правильно предположил, что в итоге будет в массиве (значения от 1 до 1000). Происходит зацикливание, в массиве бесконечные “ложь”. Выражение внутри скобок является не присваиванием, а сравнением.
    2. Верное предположение было только для варианта “Б”.
    При разборе в отладчике (табло не нашел, где находится =), подскажет кто-нибудь?) выявлены следующие особенности: при наличии операции конкатенации (“+”) дополнительный знак “+” или “-” таки преобразует строку в число, если данная строка может быть к числу преобразована.
    3. С использованием доп. переменной – тривиально. Без использования – с помощью одной операции сложения и двух операций вычитания.

    • Поправка:
      2. Верное предположение было для варианта “В”, а не “Б”

    • Про табло мы рассказываем в 0-вом блоке. Поищите в содержании и послушайте..

  25. Задание выполнено.
    1)  Бесконечный цикл с добавлением в массив занчения Ложь
    2) 3-я строка тип = число, остальные – тип = строка
    3) а) Самый простой вариант с использованием простой переменной, но для разнообразия можно и так:

    ВремМассив = Новый Массив;
    ВремМассив.Добавить(Перем1);
    ВремМассив.Добавить(Перем2);

    Перем1 = ВремМассив[1];
    Перем2 = ВремМассив[0];
    ВремМассив = Новый Массив; ВремМассив.Добавить(Перем1); ВремМассив.Добавить(Перем2); Перем1 = ВремМассив[1]; Перем2 = ВремМассив[0];
    б) Без доп. переменной единственный вариант, который приходит в голову – это со сложением и последующим вычитанием переменных.

    • Почему-то при копипасте в комментарии текст задваивается.

  26. п.1 Результат ожидаемый.
    п.2 При проверке все ясно.
    п.3
    ППерем = Начислено;
    Начислено = Выплачено;
    Выплачено = ППерем;

    Начислено = Начислено – Выплачено;
    Выплачено = Начислено + Выплачено;
    Начислено = Выплачено – Начислено;

  27. наверно не буду повторяться про первые 2 пункта, а вот 3ий я сделал через процедуру загоняя туда структуру, состоящую из 2х записей

    • по поводу 3его (без третьей переменной):

      Выплачено = Начислено + Выплачено;
      Начислено = Выплачено – Начислено;
      Выплачено = Выплачено – Начислено;

      Но, с числами то понятно, а вот с другими типами не очень)

  28. ДЗ сделал кроме 3.2 

  29. Задание выполнила.
    По пунктам 1, 2 – трудностей не возникло, мои предположения оказались верными.
    По пункту 3 – вариант без дополнительной переменной, как и у многих, всплыл откуда-то из дальней памяти :)

  30. Выполнил,
    1. Зацикливание, т.к. Счетчик =0;
    2.узнал новое “++” преобразует второй операнд в число
    “+-“преобразует второй операнд в число инвертируя его. Попробуйте без табло угадать, что будет “010”+-“-020″+3 ?
    3.Когда-то решал, вспомнил
    PS Если правильно понял, то без разницы какой токен (120- дневный или 90-дневный) подключать
    для доступа к МГ 

    • Нет, есть разница. В вашем случае для базового курса токен 120-дневный..

  31. ДЗ№2 выполнил
    п.1 Бесконечный цикл формирования массива, каждый элемент которого “ЛОЖЬ”
    п.2 Результат в отладчике совпал с ожидаемым
    п.3.1 – понятно как
    3.2 Задачка безусловно интересная, но я ее, к сожалению, уже знал. (решил не сам – прочитал, где – не помню)
    Кстати, вопрос: А есть здесь такие, которые задачу п.3.2 решили самостоятельно??? только честно
    PS А как можно аватарку в профиль добавить? что то я не соображу :-(

  32. Задание выполнил.
    п.1 Бесконечный цикл. Элементы массива всегда будут равны ЛОЖЬ.
    п.2 строка, строка, число, строка
    п.3.1. Темп=Х, X=Y, Y=Темп, где Х – Начислено, Y – Выплачено.
    п.3.2. X=X+Y, Y=X-Y, X=X-Y

  33. tatianalma 29.10.2010 в 21:07

    Задание сделала, проверила по табло.
    В первом пункте будет бесконечная ложь. :)
    Во втором была ошибочка в четвертом примере, редкий случай, когда +- дает +.
    В третьем вообще просто. Второй случай, хоть на практике не помню чтоб использовала, вспомнился откуда-то со школы. 

  34. Елена Остапчук 29.10.2010 в 20:53

    1. Изначально думала что, что будет бесконечный цикл при исполнении которого в массив будут записываться нули, оказалось не учла что  тип записываемых данных – Булево, что показала отладка.
    2. Запуталась в знаках в Г). При проверки в Табло во всем разобралась.
    3. С использованием промежуточной переменной:
    ПромежуточнаяПерем = Начислено;
    Начислено = Выплачено;
    Выплачено = ПромежуточнаяПерем;
    Без использования промежуточной переменной:
    Начислено = Начислено+Выплачено;
    Выплачено = Начислено – Выплачено;
    Начислено = Начислено – Выплачено;

  35. 1) Думал что счетчик будет увеличиваться, но отладчик меня переубедил доказав что в строке
    М.Добавить(счетчик=счетчик+1);
    “=” выступает в качестве условия равенства.
    2) вариант Г. опять табло со мной не согласилось=))
    3)Сделал, т.к. подробно разбиралось в одном из уроков.

    //вариант с тремя переменными
    промежуточное=Начисленно;
    Начисленно=Выплачено;
    Выплачено=промежуточное;

    //вариант без переменной
    Начисленно=Начисленно+Выплачено;
    Выплачено=Начисленно-Выплачено;
    Начисленно=Начисленно-Выплачено;
    //вариант с тремя переменнымипромежуточное=Начисленно;Начисленно=Выплачено;Выплачено=промежуточное; //вариант без переменнойНачисленно=Начисленно+Выплачено;Выплачено=Начисленно-Выплачено;Начисленно=Начисленно-Выплачено;

  36. 1. Бесконечный цикл, в котором к динамическому массиву добавляется новый элемент со значением <ложь>.
    Так происходит потому, что в данном случае счетчик не инкрементируется. Просто вычисляется значение выражения Счетчик = Счетчик +1 и сохраняется в массив.
    Т.о. счетчик всегда равен 1 и условие счетчик<1000 всегда равно истина.
    2. Сделано. Интересные конечно моменты есть, но все понятно.
    3.  Используя промежуточную переменную:
    – Присваиваем промежут. переменной значение Начислено;
    – Начислено присваиваем значение Выплачено
    – Выплачено присваиваем значение промежуточной переменной
    Не используя промежуточную переменную, сделал так:
    Начислено = Начислено + Выплачено;
    Выплачено = Начислено – Выплачено;
    Начислено = Начислено – Выплачено;

    Надеюсь все правильно сделал.

  37. Д/З №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, где много кавычек :(

  38. Вячеслав 29.10.2010 в 13:46

    Задание выполнил.
    Обмен значениями переменных (без введения временной переменной) идет через “+” и “-“.

    ПС: К сожалению так и не понял где смотреть главы курса для изучения. Задания №1, 2 выполнял пользуясь имеющимися знаниями. Просветите кто-нибудь, плиз :)

  39. Подбородников Евгений 29.10.2010 в 09:53

    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, с временной переменной:
     
    ВремПерем = Начислено;
    Начислено = Выплачено;
    Выплачено = ВремПерем;
    Второй вариант, без переменной:
     
    Начислено = Начислено + Выплачено;
    Выплачено = Начислено – Выплачено;
    Начислено = Начислено – Выплачено;
     
     

    • Подбородников Евгений 29.10.2010 в 19:02

      Разобрался, элементы в массиве это не “0”, а “ложь”, посему можно сделать вывод, что в операторе
      Счетчик = Счетчик +1);
      М.Добавить(Счетчик = Счетчик + 1);
      внутри скобок происходит сравнение, результатом которого является ложь. А вот если написать М.Добавить(Счетчик ++ 1); тогда элементами массива будут 1. Хотя весьма интересное поведение платформы, что она не увеличивает счетчик.

  40. Задание выполнил
    п.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 получил бесконечный цикл и сч не увеличивается