Практическая работа №2
Цель работы: научиться разрабатывать интерактивные программы на JavaScript с использованием операторов сравнения, логических операторов, условных конструкций if...else, тернарного оператора и конструкции switch.
Основные теоретические положения
Section titled “Основные теоретические положения”1. Операторы сравнения
Операторы сравнения используются для проверки отношений между значениями. Результатом сравнения является логическое значение true или false.
const age = 20;
console.log(age > 18); // trueconsole.log(age < 18); // falseconsole.log(age >= 20); // trueconsole.log(age !== 18); // trueОсновные операторы:
| Оператор | Назначение |
|---|---|
> | больше |
< | меньше |
>= | больше или равно |
<= | меньше или равно |
=== | строгое равенство |
!== | строгое неравенство |
В JavaScript также существуют операторы == и !=, которые выполняют сравнение с преобразованием типов.
console.log(5 == "5"); // trueconsole.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-10101120213031Обратите внимание на правильную обработку граничных значений.
Задание 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 руб.Проверьте программу для сумм:
2999300049995000999910000Проверьте несколько вариантов как для обычного, так и для постоянного клиента.
Задание 4. Проверка прав доступа
В информационной системе существуют следующие роли:
adminmanageruserПолучите роль через prompt():
const role = prompt( "Введите роль пользователя:");Через confirm() получите состояние учётной записи:
const isActive = confirm( "Учётная запись активна?");Для менеджера дополнительно получите значение:
const hasPermission = confirm( "У менеджера есть дополнительное разрешение?");Правила доступа:
- неактивная учётная запись не получает доступ независимо от роли;
adminполучает доступ при активной учётной записи;managerполучает доступ только при активной учётной записи и наличии дополнительного разрешения;userполучает обычный доступ при активной учётной записи;- неизвестная роль доступа не получает.
Программа должна вывести через alert() одно из сообщений:
Доступ администратора разрешёнДоступ менеджера разрешёнДоступ пользователя разрешёнДоступ запрещёнНеизвестная рольПроверьте программу для следующих ситуаций:
- активный
admin; - активный
managerс разрешением; - активный
managerбез разрешения; - неактивный
user; - роль
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. Расчёт стоимости тарифа
Разработайте интерактивную программу расчёта стоимости тарифа.
Сервис предоставляет три тарифа:
| Тариф | Абонентская плата | Включённый трафик | Дополнительный ГБ |
|---|---|---|---|
basic | 300 ₽ | 10 ГБ | 60 ₽ |
standard | 500 ₽ | 20 ГБ | 50 ₽ |
premium | 800 ₽ | 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 руб.Проверьте программу для следующих ситуаций:
basic,8ГБ, без автоплатежа;basic,15ГБ, с автоплатежом;standard,20ГБ, с автоплатежом;standard,27ГБ, с автоплатежом;premium,55ГБ, без автоплатежа;- неизвестное название тарифа.
Контрольные вопросы
Section titled “Контрольные вопросы”- Какой тип данных возвращает операция сравнения?
- В чём различие между операторами
==и===? - Почему при написании программ рекомендуется использовать
===? - Какие значения возвращают
prompt()иconfirm()? - Почему результат
prompt()часто необходимо преобразовывать с помощьюNumber()? - Чем отличаются логические операторы
&&,||и!? - В каком порядке выполняются проверки в конструкции
if...else if...else? - Почему при работе с диапазонами важно проверять граничные значения?
- Когда удобно использовать тернарный оператор?
- Когда конструкция
switchудобнее несколькихif...else if? - Для чего используются
breakиdefaultвнутриswitch?
При защите будьте готовы объяснить отдельное условие программы, изменить одно из граничных значений или добавить небольшое условие по требованию преподавателя.
Рекомендуемая литература
Section titled “Рекомендуемая литература”- MDN Web Docs — Window: prompt()
- MDN Web Docs — Window: alert()
- MDN Web Docs — Window: confirm()
- MDN Web Docs — Expressions and operators
- MDN Web Docs — if…else
- MDN Web Docs — Conditional operator
- MDN Web Docs — switch
- JavaScript.info — Comparisons
- JavaScript.info — Conditional branching
- JavaScript.info — Logical operators
- JavaScript.info — The switch statement