Домашнее задание к лекции 1.5 «Замыкания и область видимости»

Ресурсы компании не безграничны. Пришло время автоматизировать учет в нашем магазине. А также немного помочь нашей бухгалтерии. Мы очень много всего продаем, и они не успевают отчитываться перед разными службами. К тому же, налог с продаж в нашем магазине составляет губительные 73 %.

Задача № 1

Необходимо реализовать функцию, которая будет учитывать сумму для выплаты налогов со всех проданных товаров. В качестве аргумента функция принимает стоимость проданного товара. Вычисляет и накапливает сумму для уплаты налога с продаж.

Процесс реализации

  1. Создайте функцию, принимающую требуемое количество аргументов.
  2. В теле функции вычислите сумму налога, используя налоговую ставку.
  3. Прибавьте эту сумму к уже вычисленным ранее суммам.
  4. Вызовите созданную функцию несколько раз, передавая различную стоимость товаров.
  5. Выведите информацию о том, сколько налогов следует уплатить на текущий момент, в виде:
    Налог с продаж (73 %), к оплате: 7373 Q

Задача № 2

Скоро праздники. И все стали заказывать подарочную упаковку. В итоге она быстро заканчивается. Мы должны сразу при заказе указывать, сможем мы упаковать заказ или нет.

Реализуйте функцию, которая принимает на вход габариты коробки, и возвращает истину, если мы упакуем этот заказ, и ложь, если не упакуем. Функция должна учитывать остатки после упаковки предыдущих заказов.

Сейчас у нас имеется 30 м2 упаковочной бумаги.

Процесс реализации

  1. Создайте функцию, которая будет сообщать, упакуем мы заказ или нет.
  2. Принимать она должна три аргумента, габариты упаковки (ширина, высота и длина в метрах).
  3. Вычислите площадь упаковочной бумаги, которая потребуется.
  4. Убедитесь, что бумаги достаточно. Если это так, пересчитайте, сколько бумаги осталось.
  5. Верните истину, если бумаги достаточно, и ложь, если нет.
  6. Вызовите функцию несколько раз, передавая различные габариты коробки.
  7. Для каждого вызова выведите строку вида:
    Заказ (1/0.2/0.7 м) упакован, осталось упаковочной бумаги 28 м2
    Заказ (100/30/7 м) не упакован, осталось упаковочной бумаги 28 м2

Задача № 3

Сейчас служба доставки использует пять телепортов для доставки заказов. Вещь хрупкая и к тому же быстро разряжается. Данные о заряде каждого телепорта хранятся в массиве [ 7, 2, 1, 4, 8 ], то есть заряд первого телепорта — 7, второго — 2, третий почти разрядился — 1 и так далее.

После каждого использования телепорта сотрудник должен вручную проверять, не разрядился ли телепорт полностью и если да, то поставить его на зарядку (а это длительный процесс). К сожалению, сотрудники иногда забывают это сделать и возникают задержки с доставкой заказов.

Руководство службы доставки попросили реализовать для них автоматическое обновление заряда в массиве и выдачу его значения в консоль.

Создадим функцию-счетчик для каждого телепорта, которая будет вызываться при отправке и обновлять заряд в массиве автоматически. Функция должна выводить:

Процесс реализации

  1. Создайте массив для хранения данных о заряде телепортов, заполните начальными значениями (7, 2, 1, 4 и 8).
  2. Создайте пустой массив для хранения функций-счетчиков.
  3. В цикле для каждого телепорта создайте функцию, которая проверяет заряд телепорта из массива, если заряд больше нуля, уменьшает заряд на единицу в массиве (если только он не равен нулю) и выводит информацию о состоянии телепорта (как указано в списке выше).
  4. Поместите функцию в массив.
  5. После цикла вызовите несколько раз каждую из функций в созданном массиве. Результат должен быть примерно такой:
    
              Телепорт 2 использован, заряд — 1 единиц
              Телепорт 1 использован, заряд — 6 единиц
              Телепорт 3 использован, заряд — 0 единиц, требуется перезарядка!
              Телепорт 5 использован, заряд — 7 единиц
              Телепорт 4 использован, заряд — 3 единиц
              Телепорт 5 использован, заряд — 6 единиц
              Телепорт 2 использован, заряд — 0 единиц, требуется перезарядка!
              Телепорт 2 недоступен, перезаряжается