JavaScript: синтаксис
Цель: познакомиться с базовым синтаксисом языка программирования JavaScript. Приобрести навыки написания кода и работы с инструментами разработчика и консолью браузера. Познакомиться с концепцией ветвей в git и работе с ними. Изучить функции, массивы, объекты, отладку кода в IDE.
Теория
Изучить основы языка программирования JavaScript:
- основные типы данных;
- операторы;
- динамическая типизация и приведение типов данных;
- объявление переменных и присваивание значений;
- допустимые имена переменных;
- условные конструкции: if…else, switch case;
- циклические конструкции: for, while, do-while;
- синтаксис создания функций (объявление функции, функциональное выражение, стрелочные функции), параметры/аргументы, возврат значения;
- массивы (методы pop/push, shift/unshift, перебор for .. of, метод forEach);
- объекты (ключ: значение, перебор for .. in, методы delete, keys, values, entries);
- объект Math, его свойства и методы.
Источники
- «Современный учебник JavaScript»
- doka.guide
- Руководство по JavaScript на русском
- Марейн Хавербек «Выразительный Javascript»
Практика
Порядок выполнения
- Принять задание на Github Classroom
- Склонировать созданный репозиторий.
- Создать на ветке main файл README.md с группой и ФИО, сделать коммит и отправить его на github.
- Затем создать ветку lab1 и переключиться на нее и далее работать на ней.
- Создать документ html с H1 заголовком «ФИО - Лабораторная работа №1».
- Решить предложенные задачи используя JS.
- Подключить решения к созданной странице.
- Сохранить результат, сделать коммит и отправить его на github.
- Зафиксировать результаты работы с помощью системы контроля версий git и отправить ветку lab1 в репозиторий на github.
Требования к JS
- Все задачи имеют решение и требуемый в них вывод.
- Отсутствуют ошибки в консоли браузера при работе с веб-страницей.
Задачи
Треугольник
Создайте функцию, которая рассчитывает периметр, площадь и отношение периметра к площади треугольника по его сторонам, если такой треугольник существует. Для решения задачи вам нужна формула Герона и метод Math.sqrt(), который возвращает квадратный корень числа. Перевод на новую строку создается символами \n.
Отдельная функция выводит в консоль существует ли треугольник и результаты расчетов с их обозначением.
Примеры вывода:
> треугольник существует
> периметр = __
> Площадь = __
> Соотношение = __
> треугольника не существует
Fizz-Buzz
Напишите функцию, которая проходит от 0 до указанного в аргументах значения и если текущее значение четно, то в консоль выводится buzz, если нечетно fizz, если число делится на 5 - fizz buzz.
Пример вывода:
> "0 buzz"
> "1 fizz"
> "2 buzz"
> "3 fizz"
> "4 buzz"
> "5 fizz buzz"
...
Елка
Напишите функцию, которая создает одну строку, представляющую елку, используя для разделения строк символы новой строки. В слоях елки чередуются ”*” и ”#” и на каждой строке символов больше на один, а в последнем ствол из символов ||. Высота елки задается через параметр функции.
Пример вывода:
>
*
##
***
####
*****
######
*******
########
*********
##########
***********
############
||
Деление
Напишите функцию, который проверяет, делится ли нацело число n на два числа x И y. Все входные данные - положительные ненулевые числа.
Пример вывода:
> n = 3, x = 1, y = 3 => true
> n = 12, x = 2, y = 6 => true
> n = 100, x = 5, y = 3 => false
> n = 12, x = 7, y = 5 => false
Сэндвичи с сыром
Для сэндвича требуется два ломтика хлеба и один ломтик сыра. Напишите функцию, которая посчитает максимально возможное количество сэндвичей. Информация о количестве ингридиентов хранится в объекте.
Пример работы:
countSandwiches({bread: 5, cheese: 6}) -> 2
Абсолютное значение
Напишите функцию absValue без Math.abs(x), которая в качестве параметра принимает число и возвращает его абсолютное значение (по модулю).
Пример работы:
absValue(-2) -> 2
absValue(100) -> 100
absValue(0) -> 0
Функция конвертации температуры
Напишите функцию convertTemperature, которая принимает два параметра: значение температуры и направление преобразования. Функция возвращает в виде строки температуру в других единицах измерения. Подумайте какая условная конструкция подойдет больше.
Пример работы:
convertTemperature(32, 'toC') -> '0 C'
convertTemperature(10, 'toF') -> '50 F'
Случайные числа
Используя методы объекта Math создать функцию, которая возвращает целое случайно сгенерированное число в диапазоне от min до max.
Пример работы:
randomNumber(0, 10) -> 3
randomNumber(-10, 10) -> -4
Значения из массива
Используя функцию из прошлой задачи, реализовать функцию, которая возвращает случайные значения из массива в заданном количестве в виде нового массива.
Пример работы:
sampleArray([1,2,3,4], 2) -> [3, 4]
sampleArray([1,2,3,4], 3) -> [2, 2, 1]
Фильтрация массива
Напишите функцию, которая является аналогом метода filter у массива. Функция в качестве параметров принимает сам массив и функцию-фильтр (предикат), а возвращает новый массив с элементами прошедшими отбор. Элемент прошел отбор, если функция-фильтр вернула истину для него.
Передаваемая функция-фильтр должна работать с одним параметром и возвращать истину или ложь.
В качестве функции-фильтра можете проверять минимальную/минимальную длину строки или деление без остатка.
Пример работы:
function isFirstV(name) {
return name.startsWith('V')
}
myFilterArray(['Short', 'VeryLong'], isFirstV) -> ['VeryLong']
Равенство чисел с плавающей запятой
Напишите функцию toBeCloseTo, которая принимает два числа (num1 и num2) в качестве аргументов и возвращает true, если они приблизительно равны, и false в противном случае. Может понадобиться Number.EPSILON.