# Домашнее задание. Функции ## Анализ Проанализируйте свои предыдущие ДЗ на предмет повторяющихся действий и придумайте названия, параметры и возвращаемое значение для функций в этих случаях ## a Напишите функцию `a`, которая просто является коротким именем для alert. Смотрите пример с `d()`, которая является коротким именем для `debugger` из материала лекции ```javascript a("Привет!") // вызывает alert("Привет!") ``` ## cube Напишите функцию `cube`, которая возвращает число в третьей степени: ```javascript cube(1) // возвращает 1 cube(2) // возвращает 8 cube(3) // возвращает 27 ``` ## avg2 Напишите функцию `avg2`, которая рассчитывает среднюю для двух чисел: ```javascript avg2(1,2) // возвращает 1.5 avg2(10,5) // возвращает 7.5 ``` формула для подсчета среднего: (a + b) / 2 ## sum3 Напишите функцию `sum3` для суммирования 3 чисел: ```javascript sum3(1,2,3) // => 6 sum3(5,10,100500) // => 100515 sum3(5,10) // => 15 ``` Обратите внимание, что `sum3` от двух параметров тоже работает корректно. ## intRandom Напишите функцию `intRandom`, которая принимает два параметра: нижнюю и верхнюю границу, и возвращает **целое** случайное число из этого диапазона включительно: ```javascript intRandom(2,15) // возвращает целое случайное число от 2 до 15 (включительно) intRandom(-1,-1) // вернет -1 intRandom(0,1) // вернет 0 или 1 intRandom(10) // вернет 0 до 10 включительно ``` Обратите внимание, что если передан один параметр (`intRandom(10)` в примере выше), то функция работает как будто первый параметр равен 0, а переданный параметр становится вторым параметром (`intRandom(0,10)`) Используйте умножение для расширения значения встроенной функции `Math.random` c диапозона 1, сложениe для смещения результата на первый параметр, и `Math.round` для округления результата ## greetAll Сделайтей функцию, которая приветствует всех, кто передан в качестве параметров ```javascript greetAll("Superman") // выводит alert "Hello Superman" greetAll("Superman", "SpiderMan") // выводит alert "Hello Superman, SpiderMan" greetAll("Superman", "SpiderMan", "Captain Obvious") // выводит alert "Hello Superman, SpiderMan, Captain Obvious" ``` Используйте `arguments` и `for`. ## sum Напишите функцию `sum`, которая сумирует любое количество параметров: ```javascript sum(1) // => 1 sum(2) // => 2 sum(10,20,40,100) // => 170 ``` Используйте псевдомассив `arguments` для получения всех параметров, и `for` для итерирования по нему ## avg Сделайте функцию `avg`, которая рассчитывает среднее значение любого количества параметров ```javascript sum(1) // => 1 sum(2) // => 2 sum(10,20,40,100) // => 42.5 ``` ## Объединение Всё предыдущие функции и примеры с ними объедините в функции, которые вызывайте в `switch` по имени задания: ```javascript function aSample(){ a("Привет!") // вызывает alert("Привет!") } function cubeSample(){ cube(5) // => 125 } var sample = prompt("Введите номер задания") switch (sample.toLowerCase()){ case "a": aSample() break case "cube": cubeSample() break } ``` ## Синий пояс: inputPerson Сделайте функцию inputPerson, которая будет спрашивать у пользователя фамилию, имя, отчество, и возвращать ассоциативный массив с новой персоной: ```javascript inputPerson() // => {"name": "то, что ввел пользователь", "surname": ..., } var persons = [inputPerson(), inputPerson(), inputPerson()] // => вводим трех персон ``` ## Черный пояс: inputAnything Сделайте функцию inputAnything, которая в качестве параметра принимает следующую структуру: ```javascript var inputStructure = [ {prompt: "Введите Фамилию", default_: "", field: "surname" }, {prompt: "Введите Имя", default_: "", field: "name" }, {prompt: "Введите Отчество", default_: "", field: "fatherName" }, {prompt: "Введите возраст", default_: "0", field: "age" }, ] ``` Функция с таким параметром будет выводить 4 раза `prompt`, с текстом из полей `prompt` структуры ("Введите Фамилию" и так далее), и формировать внутренний объект `result` с полями `field` (`surname`, `name` и так далее), и значениями, который введет пользователь (вернет функция `prompt`). `default_` в структуре передается в `prompt` как значение по умолчанию. ```javascript inputAnything([{prompt: "Введите число", default_: "0", field: "number" }]) // => {number: "число, которое ввел пользователь"} inputAnything(inputStructure) // => {surname: "...", name: "...", fatherName: "...", age: "..."} ``` Таким образом вы сделаете функцию, которая может ввести вам данные в любой ассоциативный массив, указывая структуру получаемого массива в *декларативном стиле*.