Skip to content

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

Цель работы: научиться разрабатывать интерактивные программы на JavaScript с использованием операторов сравнения, логических операторов, условных конструкций if...else, тернарного оператора и конструкции switch.

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

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 “Задания для выполнения”

При выполнении заданий используйте 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. Определение температурного диапазона

Получите температуру воздуха через prompt().

const temperature = Number(
prompt("Введите температуру воздуха:")
);

Определите состояние погоды:

ТемператураРезультат
ниже -20Сильный мороз
от -20 до -1Мороз
от 0 до 10Прохладно
от 11 до 20Тепло
от 21 до 30Жарко
выше 30Очень жарко

Результат выведите через alert().

Например:

Температура: 15 °C
Состояние: Тепло

Используйте конструкцию if...else if...else.

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

-21
-20
-1
0
10
11
20
21
30
31

Обратите внимание на правильную обработку граничных значений.


Задание 3. Расчёт стоимости заказа со скидкой

Получите сумму заказа через prompt():

const orderAmount = Number(
prompt("Введите сумму заказа:")
);

С помощью confirm() определите, является ли покупатель постоянным клиентом.

Интернет-магазин предоставляет основную скидку:

Сумма заказаСкидка
менее 3000 ₽0%
от 3000 ₽ до 4999 ₽5%
от 5000 ₽ до 9999 ₽10%
от 10000 ₽15%

Постоянный клиент получает дополнительные 3%, если сумма заказа составляет не менее 3000 ₽.

Например, если основная скидка составляет 10%, постоянный клиент получает итоговую скидку 13%.

Программа должна определить:

  • основную скидку;
  • дополнительную скидку;
  • общий процент скидки;
  • размер скидки в рублях;
  • итоговую сумму заказа.

Результат выведите через alert().

Пример:

Сумма заказа: 7200 руб.
Основная скидка: 10%
Дополнительная скидка: 3%
Итоговая скидка: 13%
Размер скидки: 936 руб.
К оплате: 6264 руб.

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

2999
3000
4999
5000
9999
10000

Проверьте несколько вариантов как для обычного, так и для постоянного клиента.


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

В информационной системе существуют следующие роли:

admin
manager
user

Получите роль через prompt():

const role = prompt(
"Введите роль пользователя:"
);

Через confirm() получите состояние учётной записи:

const isActive = confirm(
"Учётная запись активна?"
);

Для менеджера дополнительно получите значение:

const hasPermission = confirm(
"У менеджера есть дополнительное разрешение?"
);

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

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

Программа должна вывести через alert() одно из сообщений:

Доступ администратора разрешён
Доступ менеджера разрешён
Доступ пользователя разрешён
Доступ запрещён
Неизвестная роль

Проверьте программу для следующих ситуаций:

  1. активный admin;
  2. активный manager с разрешением;
  3. активный manager без разрешения;
  4. неактивный user;
  5. роль guest.

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


Задание 5. Расчёт стоимости доставки

Получите сумму заказа:

const orderAmount = Number(
prompt("Введите сумму заказа:")
);

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

const distance = Number(
prompt("Введите расстояние доставки в километрах:")
);

Через confirm() определите тип доставки:

const isExpress = confirm(
"Выбрать экспресс-доставку?"
);

Стоимость обычной доставки:

УсловиеСтоимость
заказ от 5000 ₽бесплатно
расстояние до 5 км включительно200 ₽
от 6 до 15 км включительно350 ₽
более 15 км500 ₽

Экспресс-доставка увеличивает стоимость доставки на 200 ₽.

Если сумма заказа составляет не менее 5000 ₽, обычная доставка бесплатна.

Если при таком заказе выбрана экспресс-доставка, клиент оплачивает только доплату 200 ₽.

Программа должна определить:

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

Результат выведите через alert().

Пример:

Сумма заказа: 4200 руб.
Расстояние: 12 км
Тип доставки: обычная
Стоимость доставки: 350 руб.
Общая стоимость: 4550 руб.

Проверьте программу для следующих значений:

  • 4999 ₽ и 5 км;
  • 4999 ₽ и 6 км;
  • 4999 ₽ и 15 км;
  • 4999 ₽ и 16 км;
  • 5000 ₽ и 20 км;
  • 5000 ₽ и 20 км с экспресс-доставкой.

Задание 6. Тернарный оператор и switch

Часть 1. Тернарный оператор

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

Сначала с помощью if...else определите, является ли человек совершеннолетним.

Выведите:

Совершеннолетний

или:

Несовершеннолетний

После этого перепишите решение с использованием тернарного оператора.

Затем получите количество баллов:

const score = Number(
prompt("Введите количество баллов:")
);

С помощью тернарного оператора определите результат:

  • от 60 баллов — Зачтено;
  • менее 60 — Не зачтено.

Часть 2. Обработка статуса заказа

Получите статус заказа через prompt():

const status = prompt(
"Введите статус заказа:"
);

Используя switch, обработайте следующие значения:

СтатусСообщение
newЗаказ создан
processingЗаказ обрабатывается
shippedЗаказ передан в доставку
deliveredЗаказ доставлен
cancelledЗаказ отменён

Для любого другого значения программа должна вывести:

Неизвестный статус заказа

Результат выведите через alert().

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


Задание 7. Расчёт стоимости тарифа

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

Сервис предоставляет три тарифа:

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

Получите название тарифа:

const tariff = prompt(
"Введите тариф: basic, standard или premium"
);

Получите использованный объём трафика:

const usage = Number(
prompt("Введите объём использованного трафика в ГБ:")
);

Определите использование автоплатежа:

const isAutoPayment = confirm(
"Используется автоплатёж?"
);

С помощью switch определите:

  • абонентскую плату;
  • количество включённых гигабайт;
  • стоимость дополнительного гигабайта.

Если введено неизвестное название тарифа, программа должна вывести:

Неизвестный тариф

и не выполнять дальнейший расчёт стоимости.

Если объём использованного трафика превышает включённый лимит, рассчитайте:

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

При использовании автоплатежа пользователь получает скидку 5% только на абонентскую плату.

Скидка не распространяется на дополнительный трафик.

Программа должна вывести подробный расчёт через alert().

Пример:

Тариф: standard
Абонентская плата: 500 руб.
Скидка за автоплатёж: 25 руб.
Использовано: 27 ГБ
Включено: 20 ГБ
Превышение: 7 ГБ
Стоимость превышения: 350 руб.
Итого: 825 руб.

Проверьте программу для следующих ситуаций:

  1. basic, 8 ГБ, без автоплатежа;
  2. basic, 15 ГБ, с автоплатежом;
  3. standard, 20 ГБ, с автоплатежом;
  4. standard, 27 ГБ, с автоплатежом;
  5. premium, 55 ГБ, без автоплатежа;
  6. неизвестное название тарифа.
  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