Ivan Asmer 8 年之前
父節點
當前提交
6a212561f4
共有 1 個文件被更改,包括 208 次插入0 次删除
  1. 208 0
      05FunctionsHomeWork.md

+ 208 - 0
05FunctionsHomeWork.md

@@ -0,0 +1,208 @@
+# Домашнее задание. Функции
+
+## Анализ
+
+Проанализируйте свои предыдущие ДЗ на предмет повторяющихся действий и придумайте названия, параметры и возвращаемое значение для функций 
+в этих случаях
+
+## 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
+```
+
+## Union
+
+Всё предыдущие функции и примеры с ними объедините в функции, которые вызывайте в `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
+}
+```
+
+## Union declarative
+
+Используйте ассоциативный массив вместо `switch`
+
+## Синий пояс: 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: "..."}
+```
+
+Таким образом вы сделаете функцию, которая может ввести вам данные в любой ассоциативный массив, указывая структуру получаемого массива
+в *декларативном стиле*.
+
+## Черный пояс: jqInputAnything
+Сделайте генератор форм по структуре, схожей из предыдущего задания, который при нажатии кнопки сохранения будет формировать объект со значениями из полей ввода по аналогии с `inputAnything`. Расширьте декларацию формы дополнительными полями `type` и `placeholder`:
+
+```javascript
+var inputStructure = [
+    {prompt: "Введите Фамилию",
+     default_: "",
+     field: "surname",
+     placeholder: "surname",
+     type: "text",
+    },
+    {prompt: "Введите Имя",
+     default_: "",
+     field: "name",
+     placeholder: "name",
+     type: "text",
+    },
+    {prompt: "Введите Отчество",
+     default_: "",
+     field: "fatherName",
+     placeholder: "father name",
+     type: "text",
+    },
+    {prompt: "Введите возраст",
+     default_: "0",
+     field: "age",
+     placeholder: "age",
+     type: "number",
+    },
+]
+
+inputAnything(inputStructure, "Сохранить") //второй параметр - текст на кнопке
+```
+