Skip to content

Latest commit

 

History

History
130 lines (101 loc) · 14.8 KB

README.md

File metadata and controls

130 lines (101 loc) · 14.8 KB

Домашнее задание к лекции 2 «Функции»

Задача 1

Написать функцию getArrayParams(...arr), которая получает на вход числа, а возвращает минимальное, максимальное и среднее арифметическое значений массива. Используйте rest-параметр для получения произвольного количества аргументов.

Что нужно сделать

  1. Создайте функцию, которая принимает на ввод массив.
  2. Внутри функции задайте переменные min, max, sum, присвоив им некоторые первоначальные значения.
Подсказка. Подумайте, прежде чем открыть. Первоначальные значения: min = Infinity, max = -Infinity. Также можно использовать в качестве min и max первый элемент массива.
  1. Пройдите по массиву циклом for и для каждого элемента определите:
  • если элемент больше предыдущего максимума, то максимум становится равен элементу;
  • если элемент меньше предыдущего минимума, то минимум становится равен элементу;
  • добавляем элемент к сумме sum для последующего вычисления среднего.
  1. Для другого подхода можно использовать Math.max и Math.min. Для передачи всех аргументов используйте spread-оператор, а для суммирования элементов — метод reduce.

  2. После прохождения цикла (п. 3) или использования другого подхода (п. 4), функция должна возвращать объект вида {max:..., min: ..., avg:...}, то есть минимальное, максимальное и средние значения. Чтобы вычислить среднее, надо сумму элементов поделить на их количество. Среднее надо округлить до двух знаков после запятой. Для округления используйте toFixed. Заметьте, toFixed возвращает string. Так как вам нужно вернуть число (number), то необходимо дополнительное преобразование значения к числу.

Пример

getArrayParams(-99, 99, 10) // { min: -99, max: 99, avg: 3.33 }
getArrayParams(1, 2, 3, -100, 10)  // { min: -100, max: 10, avg: -16.80 }
getArrayParams(5)  // { min: 5, max: 5, avg: 5 }

Задача 2

Представьте, что у вас есть мясорубка с разными насадками. Мясорубка запускает действие, а сам процесс зависит от того, какая будет насадка. Затем мясорубка применяет насадку ко всему мясу, которое в неё поступает, и выдаёт на выход только самый лучший кусок. Используйте rest-параметр для получения произвольного количества аргументов в каждой насадке.

У мясорубки есть несколько насадок-преобразователей:

  • насадка суммирования элементов;
  • насадка вычисления разницы максимального и минимального элементов;
  • насадка вычисления разницы сумм чётных и нечётных элементов;
  • насадка вычисления среднего значения чётных элементов.

Что нужно сделать

  1. Напишите функцию summElementsWorker, которая должна находить сумму элементов массива и возвращать её. Суммирование элементов можно реализовать аналогично первому заданию c помощью цикла или метода reduce.
  2. Напишите функцию differenceMaxMinWorker для вычисления разницы максимального и минимального элементов.
  • C помощью цикла или методов Math.max и Math.min найдите максимальное и минимальное значения.
  • Возвращайте разницу этих значений.
  1. Напишите функцию differenceEvenOddWorker вычисления разницы сумм чётных и нечётных элементов.
  • Объявите две переменные, например, sumEvenElement и sumOddElement, в которых будут накапливаться чётные и нечётные элементы. Инициализируйте эти переменные начальными значениями — нулями.
  • Реализуйте цикл для перебора всех элементов массива.
  • При переборе каждый элемент проверяйте с помощью конструкции if / else.
  • Если элемент чётный, то увеличивайте одну переменную (sumEvenElement), а если нечётный, то другую (sumOddElement).
  • После выполнения цикла выполняйте возвращение разницы двух элементов.
  1. Напишите функцию averageEvenElementsWorker, которая будет вычислять среднее значение чётных элементов.
  • Объявите две переменные, например, sumEvenElement и countEvenElement, в которых будут накапливаться сумма чётных элементов и их количество. Инициализируйте эти переменные начальными значениями — нулями.
  • Реализуйте цикл для перебора всех элементов массива.
  • При переборе каждый элемент проверяйте с помощью конструкции if.
  • Если элемент чётный, то увеличивайте одну переменную (sumEvenElement) на перебираемый элемент, а другую переменную (countEvenElement) — на единицу.
  • После выполнения цикла выполняйте возвращение результата деления суммы элементов на их количество.
  1. Во всех функциях должна быть проверка наличия элементов. Если элементы не передавались в функцию, то нет смысла что-либо считать и можно сразу возвращать ноль.

Пример

// summElementsWorker
console.log(summElementsWorker()); // 0
console.log(summElementsWorker(10, 10, 11, 20, 10)); // 61

// differenceMaxMinWorker
console.log(differenceMaxMinWorker()); // 0
console.log(differenceMaxMinWorker(10, 10, 11, 20, 10)); // 20 - 10 => 10

// differenceEvenOddWorker
console.log(differenceEvenOddWorker(94, 51, 57, 41, 47, 66, 58, 10, 38, 17)); // 266 - 213 => 53
console.log(differenceEvenOddWorker(15, 97, 85, 64, 67, 10, 69, 40, 15, 35)); // 114 - 383 => -269

// averageEvenElementsWorker
console.log(averageEvenElementsWorker(1, 2, 3, 4, 5, 6, 7, 8, 9)); // [2, 4, 6, 8] => 5
console.log(averageEvenElementsWorker(15, 97, 85, 64, 67, 10, 69, 40, 15, 35)); // [64, 10, 40] => 38

Задача 3

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

Напишите функцию makeWork, которая из массива данных и насадки будет возвращать максимальный результат функции насадки.

  1. Функция makeWork принимает два аргумента: arrOfArr и func. В первом аргументе передаётся массив, элементы которого — массивы с данными, которые будут передаваться в функцию-насадку. Вторым аргументом передаётся одна из функций насадок.
  2. Инициализируйте переменную (maxWorkerResult), в которой будет формироваться максимальный результат, и инициализуйте её начальным значением. Можно использовать самое минимальное числовое значение -Infinity, либо использовать результат насадки от самого первого элемента из полученных данных (на позиции ноль массива arrOfArr). Используйте spread-оператор для разделения массива элементов на отдельные элементы.
  3. Реализуйте цикл для перебора всех элементов массива arrOfArr.
  4. Внутри цикла каждый перебираемый элемент передавайте в функцию-насадку. Используйте spread-оператор для разделения массива элементов на отдельные элементы. Результат функции сохраните в отдельную константу.
  5. Добавьте проверку: полученное значение больше переменной, в которой формируется максимальное значение?
  6. Если полученное значение больше переменной с максимумом, то переприсваивайте переменную максимума на полученное значение.
  7. После выполнение цикла в переменной максимума должно быть максимальное значение результатов насадки. Эту переменную следует возвращать из функции.

Пример

const arr = [[10, 10, 11, 20, 10], [67, 10, 2, 39, 88], [72, 75, 51, 87, 43], [30, 41, 55, 96, 62]];
console.log(makeWork(arr, summElementsWorker)); // максимум из 61, 206, 328, 284 => 328
console.log(makeWork(arr, differenceMaxMinWorker)); // максимум из 10, 86, 44, 66 => 86
console.log(makeWork(arr, differenceEvenOddWorker)); // максимум из 39, -6, -184, 92 => 92
console.log(makeWork(arr, averageEvenElementsWorker)); // максимум из 12.5, 33.333, 72, 62.666 => 72

Результат при правильном решении задания

графическое представление

Требования к выполнению домашней работы

  1. Все тесты успешно выполняются.
  2. Соблюдается кодстайл.
  3. Решение загружено в форкнутый репозиторий GitHub.
  4. Решение опубликовано в GitHub Pages.

Решение задач

  1. Откройте файл task.js в вашем редакторе кода и выполните задание.
  2. Проверьте соблюдение кодстайла. Форматируйте ваш код через форматтер https://codebeautify.org/jsviewer.
  3. Вы можете написать функцию testCase для проверки вашей работы.
  4. Добавьте файл task.js в индекс git с помощью команды git add %file-path%, где %file-path% — путь до целевого файла git add ./2.functions/task.js.
  5. Сделайте коммит, используя команду git commit -m '%comment%', где %comment% — это произвольный комментарий к вашему коммиту git commit -m 'Второе задание полностью готово'.
  6. Опубликуйте код в репозиторий homeworks с помощью команды git push -u origin main.
  7. На проверку пришлите 2 ссылки. На файл с решением (task.js) и на страницу GitHub Pages — страницу с автотестами: https://%USERNAME%.github.io/bjs-2-homeworks/2.functions.

Никакие файлы прикреплять не нужно.

Все задачи обязательны к выполнению для получения зачёта. Можете прислать на проверку как каждую задачу по отдельности, так и все задачи вместе. Во время проверки по частям у вашей домашней работы будет статус «На доработке».

Любые вопросы по решению задач задавайте в чате учебной группы.