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

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

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

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

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

  1. stevelagory 12.12.2010 в 01:40

    Добрый день!
    1) Первый блок выполнил без проблем
    2) Во втором блоке запутался с заданиями 2 и 3. После того как посмотрел ответ преподавателя понял и разобрался. Спасибо!
    3) Третий блок решил тоже сам, но сделал это мудренее, чем преподаватель. Ниже привожу код моего варианта третьей части задания:
    <code>
    &НаКлиенте
    Процедура ОбработкаЗаданияN2(Команда)
    А = ( А + Б ) / 2 – А ;
    Б = Б – 2 * А ;
    А = Б + 2 * А ;
    КонецПроцедуры
    </code>

  2. разобралась с + – после просмотра видео.

  3. 1. С бесконечным циклом все было понятно, пример интересный, понравился
    2. В этом задании ошибся с последним пунктом
    “010”+-“010″+1. Мой внутренний интерпретатор “+-” скомпилировал как математический минус и у меня получилось число 1 :)
    3. Задача с обменом значений между переменными как бы все стандартно, прием без использования дополнительной переменной узнал еще давно, так сказать на заре своей карьеры программиста. Сам бы вряд ли догадался…

  4. Выполнено. Насчет сложения переменных для обмена значениями в третьей части задания не догадался(

  5. 1. Счетчик не меняется, в массив бесконечно будет добавляться “Ложь”.
    2. Где ++ и   +-    у меня неправильный ответ, надеюсь, после видео ответа пойму почему.
    С п.3 все просто.

  6. Лидия 21.11.2010 в 19:35

    Первые два пункта выполнила без ошибок. Вторую чассть третьго  подглядела в видеоответе.

  7. comradeegor 19.11.2010 в 16:04

    С первым упражнением проблем не было, догадался что в массив добавляется логическое значение, а для изменения Счетчика нужно использовать оператор
    Второе задание хорошее, понравилось. В “Б” и “Г” ошибся, т.к. забыл, что приводится к первому операнду. Несмотря на опыт иногда совершаю подобные ошибки по невнимательности.
    Третье задание решил, но интерса не было. Знал просто решение ранее, да и не люблю я такие задачи непрактичные.

  8. По первому пункту ошиблась: думала, что цикл будет до тысячи, оказалось что он бесконечный:). Не совсем поняла из видео ответа, почему на 64 ядерных процессорах, бесконечный цикл закончится через две минуты ?
    По второму пункту прошло не все так гладко-
    “010” + “010” это понятно
    “010” ++ “010” тут пришлось разубедиться с помощью табло отладчика
    “010” – “010” + 1; угадала
    “010” +-“010” + 1; под воздействием второго примера, ответила правильно..
    По третьему подзаданию с временной переменной понятно, без временной для числ тоже понятно, но вот если переменные имели не примитивный тип, пришлось бы повозиться

    • >Не совсем поняла из видео ответа, почему на 64 ядерных процессорах
      Это шутка :)

  9. 1. Вызовет ошибку, т.к. в строке М.Добавить(Счетчик = Счетчик +1) в добавляемом значении содержится операция присвоения.

    2. А. “010” + “010” = “010010” – простая конкатенация двух строковых величин;
    Б. «010» ++ «010» выражение вызовет ошибку, т.к вначале выполняется унарная операция со строковой величиной.
    В. «010» – «010» + 1 выражение вызовет ошибку, т.к. первой операцией система попытается из строки “010” вычесть строку “010”. Операция вычитания не выполняется для строковых величин.
    Г. «010» +- «010» + 1 выражение вызовет ошибку, т.к вначале выполняется унарная операция со строковой величиной.

    3. а) С использованием промежуточной переменной
    Начислено = 1000;
    Выплачено = 2000;

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

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

  10. Андрей 14.11.2010 в 14:36

    Первые 2 задания было просто. В третьем стопорнулся именно в обмене значений без помощи третьей переменной…

  11. Y_Gavrikov 12.11.2010 в 00:48

    Задание делал “не подсматривая в ответ” (видео и другие комментарии) из спортивного интереса.

    Пункт 1: проанализировал, смоделировал и посмотрел в отладчике – понял, что ошибся в первоначальном анализе, понял почему – элементарно.

    Пункт 2: Вычислил в уме, смоделировал в той же обработке, что и в ДЗ 1 (без табло). Увидел где ошибся. Вспомнил видеоурок – надо смотреть на тип первого операнда. Верно для случаев, когда первый знак операции соответствует типу первого операнда (для строк “+” – конкатенация). Кроме случая “В” (первый и единственный знак операции
    “-” – арифметический, значит, строковую операцию сделать нельзя, тип первого операнда будет преобразован).
    В реальных программах такую “экзотику” лучше не применять, но для понимания логики работы платформы очень интересно!

    Пункт 3. Первая часть разбиралась в видеоуроке – все понятно.
    Над второй частью пришлось подумать. Использовал алгоритм:
    A = X, B = Y.
    A = A+B = X+Y
    B = A-B = X+Y-Y = X
    A = A-B = X+Y-X = Y
    Забавно, одна и та же операция (A-B) дает совершенно разные результаты.

    Спасибо за разминку для мозгов. пойду смотреть видео с ответом.

  12. kontovskiy 10.11.2010 в 20:30

    Спасибо за вопросы сам сразу не везде разабрался
    1. Бесконечный цикл .
    2. С одними плюсами все было понятно, а с унарными только после просмотра видео ответа.
    3.1 Здесь все без проблем:
    Начислено = 1000;
    Выплачено = 2000;
    Переменная = Выплачено;
    Выплачено = Начислено;
    Начислено = Переменная;
    3.2 в пункте 2 оказались сложности, а так все понятно, до конца разобрался после просмотра видео ответа.

    • 1. Про значение в массиве догадался что будет Истина, но не ожидал зацикливания;
      2. Аналогично как у Кантовского
      3.  Довольно легко разобрался:
      &НаКлиенте
      Процедура ВывестиПеременные(Действие, Начислено,Выплачено)
      ВыводСтр = (НСтр(“ru=’%Действие%:
      |Начислено = %Начислено%
      |Выплачено = %Выплачено%'”));
      ВыводСтр = СтрЗаменить(ВыводСтр, “%Действие%”, Действие);
      ВыводСтр = СтрЗаменить(ВыводСтр, “%Начислено%”, Начислено);
      ВыводСтр = СтрЗаменить(ВыводСтр, “%Выплачено%”, Выплачено);
      Сообщить(ВыводСтр);
      КонецПроцедуры // ВывестиПеременные()
      &НаСервереБезКонтекста
      Процедура ПоменятьМестамиБезВспомПеременной(Начислено,Выплачено)
      Начислено = Начислено + Выплачено;
      Выплачено = Начислено – Выплачено;
      Начислено = Начислено – Выплачено;
      КонецПроцедуры // ПоменятьМестами()
      &НаСервереБезКонтекста
      Процедура ПоменятьМестамиСПомощьюПеременной(Начислено,Выплачено)
      ВспомПерем = Начислено;
      Начислено = Выплачено;
      Выплачено = ВспомПерем;
      КонецПроцедуры // ПоменятьМестамиСПомощьюПеременной(Начислено,Выплачено)()
      &НаКлиенте
      Процедура ПриОткрытии(Отказ)

      Действие = “Присвоение значения переменным”;
      Начислено = 1000;
      Выплачено = 2000;
      ВывестиПеременные(Действие,Начислено,Выплачено);

      Действие = “Без использования промежуточной переменной”;
      ПоменятьМестамиБезВспомПеременной(Начислено,Выплачено);
      ВывестиПеременные(Действие,Начислено,Выплачено);

      Действие = “С использования промежуточной переменной”;
      ПоменятьМестамиСПомощьюПеременной(Начислено,Выплачено);
      ВывестиПеременные(Действие,Начислено,Выплачено);

      КонецПроцедуры
      &НаКлиентеПроцедура ВывестиПеременные(Действие, Начислено,Выплачено)
      ВыводСтр = (НСтр(“ru=’%Действие%: |Начислено = %Начислено% |Выплачено = %Выплачено%'”)); ВыводСтр = СтрЗаменить(ВыводСтр, “%Действие%”, Действие); ВыводСтр = СтрЗаменить(ВыводСтр, “%Начислено%”, Начислено);  ВыводСтр = СтрЗаменить(ВыводСтр, “%Выплачено%”, Выплачено); Сообщить(ВыводСтр);
      КонецПроцедуры // ВывестиПеременные()
      &НаСервереБезКонтекстаПроцедура ПоменятьМестамиБезВспомПеременной(Начислено,Выплачено)
      Начислено = Начислено + Выплачено; Выплачено = Начислено – Выплачено; Начислено = Начислено – Выплачено;
      КонецПроцедуры // ПоменятьМестами()
      &НаСервереБезКонтекстаПроцедура ПоменятьМестамиСПомощьюПеременной(Начислено,Выплачено)
      ВспомПерем = Начислено; Начислено = Выплачено; Выплачено = ВспомПерем;
      КонецПроцедуры // ПоменятьМестамиСПомощьюПеременной(Начислено,Выплачено)()
      &НаКлиентеПроцедура ПриОткрытии(Отказ) Действие = “Присвоение значения переменным”; Начислено = 1000; Выплачено = 2000; ВывестиПеременные(Действие,Начислено,Выплачено); Действие = “Без использования промежуточной переменной”;  ПоменятьМестамиБезВспомПеременной(Начислено,Выплачено); ВывестиПеременные(Действие,Начислено,Выплачено); Действие = “С использования промежуточной переменной”; ПоменятьМестамиСПомощьюПеременной(Начислено,Выплачено); ВывестиПеременные(Действие,Начислено,Выплачено); КонецПроцедуры