# Домашнее задание. Функции

## Анализ

Проанализируйте свои предыдущие ДЗ на предмет повторяющихся действий и придумайте названия, параметры и возвращаемое значение для функций 
в этих случаях

## 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: "..."}
```

Таким образом вы сделаете функцию, которая может ввести вам данные в любой ассоциативный массив, указывая структуру получаемого массива
в *декларативном стиле*.