Skip to content

Практическая работа №2

Основные теоретические положения

Section titled “Основные теоретические положения”

1. Операторы сравнения

Операторы сравнения используются для проверки отношений между значениями. Результатом сравнения является логическое значение true или false.

const age = 20;
console.log(age > 18); // true
console.log(age < 18); // false
console.log(age >= 20); // true
console.log(age !== 18); // true

Основные операторы:

ОператорНазначение
>больше
<меньше
>=больше или равно
<=меньше или равно
===строгое равенство
!==строгое неравенство

В JavaScript также существуют операторы == и !=, которые выполняют сравнение с преобразованием типов.

console.log(5 == "5"); // true
console.log(5 === "5"); // false

При использовании == JavaScript может автоматически преобразовать типы сравниваемых значений.

Оператор === сравнивает одновременно значение и тип данных.

В большинстве программ рекомендуется использовать строгое сравнение === и !==.


2. Логические операторы

Для объединения нескольких условий используются логические операторы:

ОператорЗначение
&&логическое И
||логическое ИЛИ
!логическое НЕ

Пример:

const age = 21;
const hasTicket = true;
if (age >= 18 && hasTicket) {
console.log("Вход разрешён");
}

Оператор && требует выполнения обоих условий.

const role = "manager";
if (role === "admin" || role === "manager") {
console.log("Доступ разрешён");
}

Оператор || требует выполнения хотя бы одного условия.

Отрицание логического значения выполняется оператором !.

const isBlocked = false;
if (!isBlocked) {
console.log("Учётная запись доступна");
}

3. Условная конструкция if...else

Для выполнения различных действий в зависимости от условия используется конструкция if.

const temperature = 15;
if (temperature > 20) {
console.log("Тепло");
} else {
console.log("Прохладно");
}

Несколько вариантов можно проверить с помощью else if.

const score = 75;
if (score >= 90) {
console.log("Отлично");
} else if (score >= 70) {
console.log("Хорошо");
} else if (score >= 50) {
console.log("Удовлетворительно");
} else {
console.log("Неудовлетворительно");
}

Условия проверяются сверху вниз. После выполнения первой подходящей ветви остальные условия этой конструкции не проверяются.

При работе с диапазонами необходимо внимательно учитывать граничные значения.


4. Получение данных от пользователя

Для получения данных в браузере можно использовать функцию prompt().

const name = prompt("Введите имя:");
alert(`Здравствуйте, ${name}!`);

prompt() возвращает введённое пользователем значение как строку.

Например:

const value = prompt("Введите число:");
console.log(typeof value); // string

Если введённое значение необходимо использовать как число, его нужно преобразовать:

const age = Number(
prompt("Введите возраст:")
);

Для вопроса с двумя вариантами ответа можно использовать confirm():

const isRegistered = confirm(
"Вы зарегистрированы?"
);

confirm() возвращает:

  • true, если пользователь нажал ОК;
  • false, если пользователь нажал Отмена.

Для вывода сообщения можно использовать alert():

alert("Операция выполнена");

5. Тернарный оператор

Если необходимо выбрать одно из двух значений, можно использовать тернарный оператор:

условие ? значениеЕслиИстина : значениеЕслиЛожь

Пример:

const age = 20;
const result = age >= 18
? "Совершеннолетний"
: "Несовершеннолетний";
alert(result);

Тернарный оператор удобен для коротких условий. Сложные ветвления лучше записывать через if...else.


6. Конструкция switch

Если необходимо сравнить одно значение с несколькими известными вариантами, можно использовать конструкцию switch.

const status = "processing";
switch (status) {
case "new":
alert("Заказ создан");
break;
case "processing":
alert("Заказ обрабатывается");
break;
case "completed":
alert("Заказ выполнен");
break;
default:
alert("Неизвестный статус");
}

break завершает обработку текущего варианта.

default выполняется, если значение не совпало ни с одним case.

Задания для выполнения

Section titled “Задания для выполнения”

Часть 1. Исследование условных конструкций

Выполните задание 1 полностью. Оно используется как общая тренировочная часть перед самостоятельным вариантом.

При выполнении заданий используйте prompt(), confirm(), alert() и console.log() там, где это указано или удобно для решения задачи.

Не забывайте, что результат prompt() является строкой.


Задание 1. Сравнение значений и логические выражения

До запуска программы определите результаты следующих выражений:

console.log(10 > 5);
console.log(10 < 5);
console.log(5 == "5");
console.log(5 === "5");
console.log(0 == false);
console.log(0 === false);
console.log(null == undefined);
console.log(null === undefined);
console.log("10" > 5);

После этого запустите программу и сравните результаты со своими предположениями.

Затем разработайте интерактивную проверку доступа пользователя.

Возраст пользователя получите через prompt():

const age = Number(
prompt("Введите возраст:")
);

Состояние регистрации и блокировки получите через confirm().

Например:

const isRegistered = confirm(
"Пользователь зарегистрирован?"
);
const isBlocked = confirm(
"Учётная запись заблокирована?"
);

Пользователь получает доступ, только если одновременно выполняются условия:

  • возраст не менее 18 лет;
  • пользователь зарегистрирован;
  • учётная запись не заблокирована.

Результат сохраните в переменную hasAccess.

Выведите сообщение через alert():

Доступ разрешён

или:

Доступ запрещён

Проверьте программу для пользователя:

  • младше 18 лет;
  • ровно 18 лет;
  • старше 18 лет, но без регистрации;
  • зарегистрированного, но заблокированного;
  • совершеннолетнего, зарегистрированного и не заблокированного.

Часть 2. Индивидуальное задание


Вариант 1. Интернет-магазин

Задание 1.1. Категория заказа

Пользователь вводит сумму заказа.

Определите категорию:

СуммаКатегория
менее 1000 ₽Малый заказ
1000–4999 ₽Обычный заказ
5000–9999 ₽Крупный заказ
от 10000 ₽Премиальный заказ

Проверьте значения: 999, 1000, 4999, 5000, 9999, 10000.

Задание 1.2. Возможность бесплатной доставки

Получите:

  • сумму заказа;
  • расстояние доставки;
  • наличие подписки магазина через confirm().

Бесплатная доставка предоставляется, если выполняется хотя бы одно условие:

  • сумма заказа не менее 7000 ₽;
  • у клиента есть подписка и расстояние не превышает 15 км.

Для остальных заказов доставка платная.

Задание 1.3. Способ оплаты

Получите способ оплаты:

card
sbp
cash

Через switch определите комиссию:

  • card — 1%;
  • sbp — 0%;
  • cash — 2%.

Рассчитайте комиссию и итоговую сумму к оплате. Для неизвестного способа оплаты дальнейший расчёт не выполнять.


Вариант 2. Учётная запись информационной системы

Задание 2.1. Категория пользователя по возрасту

Определите категорию:

  • младше 14 лет — Детская учётная запись;
  • 14–17 лет — Подростковая учётная запись;
  • 18–64 года — Стандартная учётная запись;
  • от 65 лет — Учётная запись 65+.

Задание 2.2. Проверка доступа

Получите:

  • роль пользователя;
  • состояние учётной записи isActive;
  • наличие двухфакторной аутентификации has2FA.

Правила:

  • неактивная запись не получает доступ;
  • admin получает доступ только при включённой 2FA;
  • manager получает доступ при активной записи;
  • user получает обычный доступ;
  • неизвестная роль доступа не получает.

Задание 2.3. Уровень доступа

Через switch для ролей admin, manager, user, guest выведите соответственно:

  • Полный доступ;
  • Расширенный доступ;
  • Обычный доступ;
  • Только просмотр.

Для неизвестной роли выведите сообщение об ошибке.


Вариант 3. Мобильный тариф

Задание 3.1. Категория потребления трафика

Пользователь вводит использованный трафик в ГБ.

Определите:

  • до 10 ГБ включительно — Низкое потребление;
  • 11–30 ГБ — Среднее потребление;
  • 31–60 ГБ — Высокое потребление;
  • более 60 ГБ — Очень высокое потребление.

Задание 3.2. Скидка за автоплатёж

Получите абонентскую плату и состояние автоплатежа.

Если автоплатёж включён и абонентская плата не менее 500 ₽, предоставьте скидку 7%. В остальных случаях скидка отсутствует.

Выведите размер скидки и итоговую плату.

Задание 3.3. Расчёт тарифа

Через switch обработайте тарифы:

ТарифПлатаВключеноДополнительный ГБ
basic300 ₽10 ГБ60 ₽
standard500 ₽20 ГБ50 ₽
premium800 ₽40 ГБ35 ₽

Получите тариф и использованный трафик. Рассчитайте стоимость превышения и итоговую сумму.


Вариант 4. Служба доставки

Задание 4.1. Зона доставки

Пользователь вводит расстояние.

Определите:

  • до 5 км включительно — Ближняя зона;
  • 6–15 км — Городская зона;
  • 16–30 км — Дальняя зона;
  • более 30 км — За пределами стандартной доставки.

Задание 4.2. Возможность экспресс-доставки

Получите:

  • расстояние;
  • массу заказа;
  • признак экспресс-доставки.

Экспресс-доставка разрешена только если:

  • расстояние не более 20 км;
  • масса не превышает 10 кг.

Если пользователь выбрал экспресс-доставку, но условия не выполнены, выведите сообщение о невозможности услуги.

Задание 4.3. Стоимость доставки

Через switch получите тип доставки:

  • courier — 350 ₽;
  • pickup — 0 ₽;
  • express — 650 ₽.

Если сумма заказа не менее 6000 ₽, для courier доставка становится бесплатной. На express правило бесплатной доставки не распространяется.


Вариант 5. Сервис такси

Задание 5.1. Категория поездки

По расстоянию определите:

  • до 3 км — Короткая;
  • 4–10 км — Средняя;
  • 11–25 км — Дальняя;
  • более 25 км — Междугородняя.

Задание 5.2. Дополнительные условия

Получите:

  • расстояние;
  • ночное время через confirm();
  • необходимость детского кресла через confirm().

Базовая стоимость равна 100 + distance * 25.

Ночная поездка увеличивает стоимость на 20%, детское кресло добавляет 150 ₽.

Задание 5.3. Тариф

Через switch определите коэффициент:

  • economy — 1;
  • comfort — 1.35;
  • business — 1.8.

Рассчитайте итоговую стоимость поездки с учётом выбранного тарифа.


Вариант 6. Онлайн-кинотеатр

Задание 6.1. Возрастная категория

По возрасту определите:

  • до 6 лет — 0+;
  • 6–11 лет — 6+;
  • 12–15 лет — 12+;
  • 16–17 лет — 16+;
  • от 18 лет — 18+.

Задание 6.2. Проверка доступа к фильму

Получите возраст пользователя и возрастное ограничение фильма: 0, 6, 12, 16 или 18.

Разрешите просмотр только если возраст пользователя не меньше ограничения.

Задание 6.3. Тип подписки

Через switch обработайте:

  • basic — 299 ₽;
  • standard — 499 ₽;
  • premium — 799 ₽.

Через confirm() определите оплату за год. При годовой оплате предоставьте скидку 10% на сумму за 12 месяцев.


Вариант 7. Образовательная система

Задание 7.1. Оценка по баллам

Определите оценку:

  • 90–100 — 5;
  • 75–89 — 4;
  • 60–74 — 3;
  • менее 60 — 2.

Если число баллов меньше 0 или больше 100, выведите сообщение об ошибке.

Задание 7.2. Допуск к аттестации

Получите:

  • процент посещаемости;
  • наличие всех практических работ;
  • наличие задолженности.

Допуск разрешён, если:

  • посещаемость не менее 75%;
  • все практические сданы;
  • задолженности нет.

Задание 7.3. Форма аттестации

Через switch обработайте значения:

  • test — Тестирование;
  • exam — Экзамен;
  • project — Защита проекта;
  • credit — Зачёт.

Для неизвестного значения выведите ошибку.


Вариант 8. Банковская карта

Задание 8.1. Категория операции

По сумме операции определите:

  • до 1000 ₽ — Мелкая;
  • 1001–10000 ₽ — Обычная;
  • 10001–50000 ₽ — Крупная;
  • более 50000 ₽ — Очень крупная.

Задание 8.2. Разрешение платежа

Получите:

  • сумму платежа;
  • остаток на счёте;
  • состояние карты isBlocked;
  • подтверждение операции isConfirmed.

Платёж разрешён только если карта не заблокирована, средств достаточно и операция подтверждена.

Задание 8.3. Тип карты

Через switch определите cashback:

  • classic — 1%;
  • gold — 2%;
  • platinum — 3%.

Рассчитайте cashback для введённой суммы покупки.


Вариант 9. Облачное хранилище

Задание 9.1. Использование места

По проценту занятого пространства определите:

  • до 50% — Свободного места достаточно;
  • 51–80% — Хранилище заполнено более чем наполовину;
  • 81–95% — Мало свободного места;
  • более 95% — Критическое заполнение.

Задание 9.2. Возможность загрузки файла

Получите:

  • свободное место в ГБ;
  • размер файла в ГБ;
  • признак блокировки аккаунта.

Загрузка разрешена, если аккаунт не заблокирован и свободного пространства достаточно.

Задание 9.3. Тариф

Через switch обработайте:

  • free — 10 ГБ, 0 ₽;
  • personal — 100 ГБ, 199 ₽;
  • pro — 1000 ГБ, 699 ₽.

Выведите объём и стоимость выбранного тарифа.


Вариант 10. Система технической поддержки

Задание 10.1. Приоритет обращения

По уровню критичности 1–5 определите:

  • 1 — низкий;
  • 2 — обычный;
  • 3 — повышенный;
  • 4 — высокий;
  • 5 — критический.

Для значения вне диапазона выведите ошибку.

Задание 10.2. Необходимость эскалации

Получите:

  • критичность;
  • признак VIP-клиента;
  • количество часов без решения.

Эскалация требуется, если:

  • критичность не ниже 4;
  • либо клиент VIP и обращение не решено более 2 часов;
  • либо любое обращение не решено более 24 часов.

Задание 10.3. Статус заявки

Через switch обработайте:

  • new;
  • in_progress;
  • waiting;
  • resolved;
  • closed.

Для каждого значения выведите понятное русское название статуса.


Вариант 11. Система бронирования гостиницы

Задание 11.1. Продолжительность проживания

По количеству ночей определите:

  • 1 ночь — Краткое проживание;
  • 2–4 ночи — Короткое проживание;
  • 5–10 ночей — Среднее проживание;
  • более 10 ночей — Длительное проживание.

Задание 11.2. Скидка гостю

Получите:

  • стоимость проживания;
  • наличие программы лояльности;
  • количество ночей.

Скидка 10% предоставляется, если гость участвует в программе лояльности и проживает не менее 5 ночей. Для проживания от 10 ночей скидка 15% независимо от программы лояльности.

Задание 11.3. Категория номера

Через switch задайте цену за ночь:

  • standard — 3500 ₽;
  • comfort — 5000 ₽;
  • suite — 8000 ₽.

Рассчитайте итоговую стоимость по введённому количеству ночей.


Вариант 12. Парковочная система

Задание 12.1. Категория стоянки

По длительности определите:

  • до 1 часа — Кратковременная;
  • 2–4 часа — Обычная;
  • 5–8 часов — Длительная;
  • более 8 часов — Суточная.

Задание 12.2. Льгота

Получите:

  • стоимость парковки;
  • признак резидента;
  • признак льготного пользователя.

Льготный пользователь не оплачивает парковку. Резидент получает скидку 50%. Остальные оплачивают полную стоимость.

Задание 12.3. Зона парковки

Через switch определите стоимость часа:

  • green — 50 ₽;
  • yellow — 80 ₽;
  • red — 120 ₽.

Рассчитайте стоимость по введённому количеству часов.


Вариант 13. Складская система

Задание 13.1. Уровень остатка

По количеству товара определите:

  • 0 — Нет в наличии;
  • 1–5 — Критический остаток;
  • 6–20 — Низкий остаток;
  • более 20 — Достаточный остаток.

Задание 13.2. Необходимость пополнения

Получите:

  • текущий остаток;
  • минимальный допустимый остаток;
  • наличие уже оформленного заказа поставщику.

Новый заказ требуется, если остаток меньше минимального и заказ поставщику ещё не оформлен.

Задание 13.3. Тип движения товара

Через switch обработайте:

  • income — Поступление;
  • sale — Продажа;
  • return — Возврат;
  • writeoff — Списание.

Для неизвестного типа вывести ошибку.


Вариант 14. Регистрация на мероприятие

Задание 14.1. Возрастная категория участника

Определите:

  • до 13 лет — Детский участник;
  • 14–17 — Юниор;
  • 18–59 — Взрослый участник;
  • от 60 — Участник 60+.

Задание 14.2. Проверка допуска

Получите:

  • возраст;
  • наличие билета;
  • признак блокировки регистрации.

Допуск разрешён, если билет есть, регистрация не заблокирована и возраст не меньше 16 лет.

Задание 14.3. Тип билета

Через switch определите цену:

  • standard — 1500 ₽;
  • student — 900 ₽;
  • vip — 3500 ₽.

Через confirm() определите раннюю регистрацию. Для ранней регистрации предоставьте скидку 10%.


Вариант 15. Сервис подписки

Задание 15.1. Категория срока подписки

По количеству месяцев определите:

  • 1 месяц — Месячная;
  • 2–5 месяцев — Краткосрочная;
  • 6–11 месяцев — Полугодовая;
  • от 12 месяцев — Долгосрочная.

Задание 15.2. Скидка

Получите:

  • стоимость одного месяца;
  • количество месяцев;
  • наличие промокода.

Правила:

  • при сроке от 6 месяцев скидка 5%;
  • при сроке от 12 месяцев скидка 10%;
  • промокод дополнительно даёт 3%.

Рассчитайте общий процент скидки и итоговую стоимость.

Задание 15.3. План подписки

Через switch определите стоимость месяца:

  • start — 250 ₽;
  • standard — 450 ₽;
  • pro — 750 ₽.

Получите план и количество месяцев. Рассчитайте стоимость без скидки. Затем примените правила из задания 15.2.

Требования к результату

Section titled “Требования к результату”

В рамках практической работы необходимо:

  • выполнить задание части 1;
  • выполнить все три задания назначенного индивидуального варианта;
  • использовать строгие сравнения === и !== там, где это уместно;
  • корректно обрабатывать граничные значения;
  • использовать if...else, тернарный оператор или switch в соответствии с условием задачи;
  • проверить программу для указанных тестовых данных.
  1. Какой тип данных возвращает операция сравнения?
  2. В чём различие между операторами == и ===?
  3. Почему при написании программ рекомендуется использовать ===?
  4. Какие значения возвращают prompt() и confirm()?
  5. Почему результат prompt() часто необходимо преобразовывать с помощью Number()?
  6. Чем отличаются логические операторы &&, || и !?
  7. В каком порядке выполняются проверки в конструкции if...else if...else?
  8. Почему при работе с диапазонами важно проверять граничные значения?
  9. Когда удобно использовать тернарный оператор?
  10. Когда конструкция switch удобнее нескольких if...else if?
  11. Для чего используются break и default внутри switch?

При защите будьте готовы объяснить отдельное условие программы, изменить одно из граничных значений или добавить небольшое условие по требованию преподавателя.

Рекомендуемая литература

Section titled “Рекомендуемая литература”
  1. MDN Web Docs — Window: prompt()
  2. MDN Web Docs — Window: alert()
  3. MDN Web Docs — Window: confirm()
  4. MDN Web Docs — Expressions and operators
  5. MDN Web Docs — if…else
  6. MDN Web Docs — Conditional operator
  7. MDN Web Docs — switch
  8. JavaScript.info — Comparisons
  9. JavaScript.info — Conditional branching
  10. JavaScript.info — Logical operators
  11. JavaScript.info — The switch statement