05HomeWork.md 6.7 KB

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

Анализ

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

a

Напишите функцию a, которая просто является коротким именем для alert. Смотрите пример с d(), которая является коротким именем для debugger из материала лекции

a("Привет!") // вызывает alert("Привет!")

cube

Напишите функцию cube, которая возвращает число в третьей степени:

cube(1) // возвращает 1
cube(2) // возвращает 8
cube(3) // возвращает 27

avg2

Напишите функцию avg2, которая рассчитывает среднюю для двух чисел:

avg2(1,2) // возвращает 1.5
avg2(10,5) // возвращает 7.5

формула для подсчета среднего: (a + b) / 2

sum3

Напишите функцию sum3 для суммирования 3 чисел:

sum3(1,2,3) // => 6
sum3(5,10,100500) // => 100515
sum3(5,10) // => 15

Обратите внимание, что sum3 от двух параметров тоже работает корректно.

intRandom

Напишите функцию intRandom, которая принимает два параметра: нижнюю и верхнюю границу, и возвращает целое случайное число из этого диапазона включительно:

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

Сделайтей функцию, которая приветствует всех, кто передан в качестве параметров

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, которая сумирует любое количество параметров:

sum(1) // => 1
sum(2) // => 2
sum(10,20,40,100) // => 170

Используйте псевдомассив arguments для получения всех параметров, и for для итерирования по нему

avg

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

sum(1) // => 1
sum(2) // => 2
sum(10,20,40,100) // => 42.5

Объединение

Всё предыдущие функции и примеры с ними объедините в функции, которые вызывайте в switch по имени задания:


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, которая будет спрашивать у пользователя фамилию, имя, отчество, и возвращать ассоциативный массив с новой персоной:

inputPerson() // => {"name": "то, что ввел пользователь", "surname": ..., }
var persons = [inputPerson(), inputPerson(), inputPerson()] // => вводим трех персон

Черный пояс: inputAnything

Сделайте функцию inputAnything, которая в качестве параметра принимает следующую структуру:

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 как значение по умолчанию.

inputAnything([{prompt: "Введите число",
                default_: "0",
                field: "number"
               }]) // => {number: "число, которое ввел пользователь"}
inputAnything(inputStructure) // => {surname: "...", name: "...", fatherName: "...", age: "..."}

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