Практическая работа №3
Основные теоретические положения
Section titled “Основные теоретические положения”1. Цикл for
Цикл for удобно использовать, когда количество повторений известно заранее.
for (let i = 1; i <= 5; i++) { console.log(i);}Результат:
12345Общая форма:
for (начальное_значение; условие; изменение) { // действия}Например, обратный отсчёт:
for (let i = 5; i >= 1; i--) { console.log(i);}2. Счётчики и накопители
При обработке последовательностей часто необходимо подсчитывать количество значений или накапливать сумму.
Счётчик:
let count = 0;for (let i = 1; i <= 10; i++) { if (i % 2 === 0) { count++; }}console.log(count);Накопитель:
let sum = 0;for (let i = 1; i <= 10; i++) { sum += i;}console.log(sum);Начальное значение накопителя зависит от выполняемой операции.
Для суммы обычно используется:
let sum = 0;Для произведения:
let product = 1;Если начать произведение с 0, результат всегда будет равен нулю.
3. Цикл while
Цикл while используется, когда заранее неизвестно точное количество повторений.
let value = 1;while (value <= 5) { console.log(value); value++;}Условие проверяется до выполнения тела цикла.
Если условие изначально ложно, тело цикла не выполнится ни одного раза.
Важно следить за тем, чтобы условие цикла когда-либо стало ложным. Иначе возникнет бесконечный цикл.
Например:
let i = 1;while (i <= 10) { console.log(i); i++;}Если удалить:
i++;значение i не будет изменяться, поэтому цикл не завершится.
4. Цикл do...while
В цикле do...while сначала выполняется тело, а затем проверяется условие.
let value;do { value = Number( prompt("Введите положительное число:") );} while (value <= 0);Поэтому тело такого цикла выполняется как минимум один раз.
do...while удобно использовать для повторного запроса пользовательских данных.
5. Перебор строки с помощью for...of
Цикл for...of позволяет последовательно получать элементы перебираемого значения.
Например, можно перебрать символы строки:
const text = "JavaScript";for (const symbol of text) { console.log(symbol);}На каждой итерации переменная symbol содержит один символ строки.
6. Оператор break
break немедленно завершает выполнение цикла.
while (true) { const value = Number( prompt("Введите число. 0 — выход:") ); if (value === 0) { break; } console.log(value);}7. Оператор continue
continue прекращает выполнение текущей итерации и переходит к следующей.
for (let i = 1; i <= 10; i++) { if (i % 2 !== 0) { continue; } console.log(i);}В результате будут выведены только чётные числа.
8. Получение чисел через prompt()
Функция prompt() возвращает строку.
Поэтому числовые значения необходимо преобразовывать:
const n = Number( prompt("Введите число:"));Некорректный ввод можно проверить с помощью:
Number.isNaN(n)Например:
if (Number.isNaN(n)) { alert("Введено не число");}Задания для выполнения
Section titled “Задания для выполнения”Часть 1. Исследование циклических конструкций
Выполните задания 1 и 2 полностью. Они используются как общая тренировочная часть перед самостоятельным вариантом.
Все программы должны выполняться в браузере.
Для получения данных используйте prompt() и confirm(), для вывода результатов — alert() или console.log() в зависимости от условия задания.
Задание 1. Вывод числовых последовательностей
Получите от пользователя положительное целое число N.
const n = Number( prompt("Введите N:"));С помощью циклов for последовательно:
- выведите все числа от
1доN; - выведите все чётные числа от
1доN; - выведите все числа от
Nдо1в обратном порядке.
Например, для N = 6:
Числа от 1 до N:123456Чётные числа:246Обратный порядок:654321Проверьте программу для N = 1, N = 6 и N = 15.
Если введено число меньше 1, программа должна сообщить о некорректном значении.
Задание 2. Таблица квадратов и кубов
Пользователь вводит положительное целое число N.
Для каждого числа от 1 до N выведите:
- само число;
- его квадрат;
- его куб.
Например, для N = 5:
1 | квадрат: 1 | куб: 12 | квадрат: 4 | куб: 83 | квадрат: 9 | куб: 274 | квадрат: 16 | куб: 645 | квадрат: 25 | куб: 125Одновременно вычислите сумму квадратов всех чисел.
Для приведённого примера:
Сумма квадратов: 55Используйте один цикл for.
Проверьте программу для N = 1, N = 5 и N = 10.
Часть 2. Индивидуальное задание
Вариант 1. Интернет-магазин
Задание 1.1. Статистика заказов
Пользователь вводит количество заказов N.
С помощью цикла for последовательно получите стоимость каждого заказа и определите:
- общую сумму;
- среднюю стоимость;
- количество заказов дешевле
1000₽; - количество заказов от
5000₽; - максимальную стоимость заказа.
Некорректные отрицательные значения не учитывать.
Задание 1.2. Ввод корректной скидки
С помощью do...while запросите процент скидки от 0 до 50.
Программа должна повторять ввод до получения корректного целого значения.
После успешного ввода выведите принятую скидку.
Задание 1.3. Обработка потока заказов
Многократно запрашивайте стоимость заказа.
Ввод заканчивается при значении 0 или нажатии Cancel.
Для каждого корректного заказа определите:
- количество заказов;
- общую сумму;
- минимальную и максимальную стоимость;
- количество заказов со стоимостью не менее
3000₽.
Отрицательные значения и текст пропускайте с помощью continue.
Вариант 2. Банковские операции
Задание 2.1. Накопление процентов
Пользователь вводит начальную сумму, годовую процентную ставку и количество лет.
С помощью цикла for рассчитайте сумму на счёте после каждого года при условии, что проценты начисляются один раз в год на текущий остаток.
Выведите состояние счёта по годам.
Задание 2.2. Проверка PIN-кода
Правильный PIN:
const correctPin = "4826";С помощью do...while разрешите не более трёх попыток.
После правильного ввода цикл должен завершиться досрочно.
Задание 2.3. Последовательность операций
Пользователь последовательно вводит суммы операций:
- положительное число — поступление;
- отрицательное число — списание;
0— завершение.
Начальный баланс равен 10000 ₽.
Не разрешайте списание, если после него баланс станет отрицательным. Такую операцию пропускайте и продолжайте ввод.
В конце выведите:
- итоговый баланс;
- количество успешных операций;
- количество отклонённых списаний;
- общую сумму поступлений;
- общую сумму списаний.
Вариант 3. Мобильный оператор
Задание 3.1. Статистика использования трафика
Пользователь вводит количество дней N.
Для каждого дня получите объём использованного трафика в ГБ.
Определите:
- общий объём;
- среднее значение;
- количество дней с расходом более
5ГБ; - максимальный расход за день.
Задание 3.2. Проверка допустимого объёма
Через do...while запросите месячный лимит трафика.
Допустимое значение: от 1 до 1000 ГБ.
Повторяйте ввод до получения корректного значения.
Задание 3.3. Расчёт дополнительного трафика
Пользователь вводит объём трафика за каждый день месяца.
Ввод завершается значением 0.
Тариф включает 30 ГБ.
После завершения определите:
- суммарный трафик;
- объём превышения;
- стоимость превышения по тарифу
50₽ за каждый дополнительный ГБ; - количество дней, в которые расход превышал
3ГБ.
Вариант 4. Служба доставки
Задание 4.1. Анализ расстояний
Пользователь вводит количество доставок N.
Для каждой доставки получите расстояние в километрах.
Определите:
- общую протяжённость маршрутов;
- среднее расстояние;
- количество доставок до
5км включительно; - количество доставок более
15км; - максимальное расстояние.
Задание 4.2. Ввод массы посылки
С помощью do...while получите массу посылки.
Допустимый диапазон: от 0.1 до 30 кг.
При некорректном вводе повторяйте запрос.
Задание 4.3. Обработка заявок на доставку
Многократно получайте расстояние доставки.
Ввод завершается значением 0.
Правила расчёта:
- до
5км —200₽; - от
6до15км —350₽; - более
15км —500₽.
Отрицательные значения пропускайте.
В конце выведите количество доставок и общую стоимость всех заявок.
Вариант 5. Образовательная система
Задание 5.1. Статистика оценок
Пользователь вводит количество оценок N.
Затем последовательно вводит оценки по пятибалльной шкале.
Определите:
- средний балл;
- количество оценок
5; - количество оценок
2; - максимальную и минимальную оценку.
Значения вне диапазона 2–5 пропускайте.
Задание 5.2. Ввод результата теста
Через do...while получите количество баллов от 0 до 100.
Повторяйте запрос до корректного ввода.
После этого выведите:
Зачтено, если баллов не менее60;Не зачтенов противном случае.
Задание 5.3. Учёт результатов группы
Последовательно вводите баллы студентов.
Ввод завершается значением -1.
Допустимый результат: от 0 до 100.
Некорректные значения пропускайте.
Определите:
- количество студентов;
- средний балл;
- количество с результатом не менее
60; - количество с результатом не менее
85; - лучший результат.
Вариант 6. Система технической поддержки
Задание 6.1. Статистика времени обработки
Пользователь вводит количество обращений N.
Для каждого обращения получите время обработки в минутах.
Определите:
- суммарное время;
- среднее время;
- количество обращений дольше
30минут; - максимальное время обработки.
Задание 6.2. Проверка приоритета
С помощью do...while запросите приоритет от 1 до 5.
Повторяйте ввод, пока пользователь не введёт корректное целое значение.
Задание 6.3. Поток обращений
Последовательно вводите время обработки обращений.
Значение 0 завершает ввод.
Отрицательные значения пропускайте.
После завершения определите:
- количество обработанных обращений;
- среднее время;
- количество обращений быстрее
10минут; - количество обращений дольше
60минут; - максимальное время.
Вариант 7. Сервис такси
Задание 7.1. Анализ поездок
Введите количество поездок N.
Для каждой поездки получите расстояние.
Определите:
- общее расстояние;
- среднее расстояние;
- количество коротких поездок до
5км; - количество поездок более
20км; - максимальную длину поездки.
Задание 7.2. Проверка коэффициента спроса
С помощью do...while запросите коэффициент спроса.
Допустимый диапазон: от 1 до 3.
Повторяйте ввод при некорректном значении.
Задание 7.3. Расчёт выручки
Последовательно вводите расстояния поездок.
Ввод завершается значением 0.
Стоимость поездки:
100 + distance × 25Отрицательные значения пропускайте.
В конце выведите:
- количество поездок;
- общую выручку;
- среднюю стоимость поездки;
- самую дорогую поездку.
Вариант 8. Складская система
Задание 8.1. Учёт остатков
Пользователь вводит количество товарных позиций N.
Для каждой позиции вводится остаток товара.
Определите:
- общее количество единиц товара;
- количество позиций с нулевым остатком;
- количество позиций с остатком менее
5; - максимальный остаток.
Задание 8.2. Проверка количества товара
Через do...while получите количество товара для поступления.
Допустимое значение: целое число от 1 до 1000.
Задание 8.3. Последовательность складских операций
Начальный остаток товара — 50.
Пользователь последовательно вводит изменения остатка:
- положительное число — поступление;
- отрицательное — расход;
0— завершение.
Не допускайте расход, если итоговый остаток станет отрицательным.
В конце выведите:
- текущий остаток;
- количество успешных операций;
- количество отклонённых операций;
- общий объём поступлений;
- общий объём расхода.
Вариант 9. Облачное хранилище
Задание 9.1. Анализ размеров файлов
Введите количество файлов N.
Для каждого файла получите размер в МБ.
Определите:
- общий объём;
- средний размер;
- количество файлов более
100МБ; - самый большой файл.
Задание 9.2. Проверка свободного места
С помощью do...while получите объём свободного места в ГБ.
Допустимое значение: от 0 до 10000.
Задание 9.3. Последовательная загрузка файлов
Доступное место составляет 1000 МБ.
Пользователь последовательно вводит размеры файлов.
0 завершает загрузку.
Если очередной файл не помещается в оставшееся пространство, загрузку этого файла пропустите.
Определите:
- количество загруженных файлов;
- использованное место;
- оставшееся место;
- количество отклонённых файлов.
Вариант 10. Мониторинг сервера
Задание 10.1. Анализ загрузки процессора
Пользователь вводит количество измерений N.
Для каждого измерения вводится загрузка CPU в процентах.
Определите:
- среднюю загрузку;
- количество измерений выше
80%; - максимальную загрузку.
Значения вне диапазона 0–100 пропускайте.
Задание 10.2. Ввод допустимой загрузки
Через do...while получите порог предупреждения от 50 до 100.
Повторяйте ввод до корректного значения.
Задание 10.3. Наблюдение за показателями
Последовательно вводите загрузку CPU.
Ввод завершается значением -1.
Значения от 0 до 100 считаются корректными, остальные пропускаются.
Работа программы должна также завершиться досрочно, если три корректных измерения подряд превышают 95%.
Выведите:
- количество корректных измерений;
- среднюю загрузку;
- максимальную загрузку;
- причину завершения наблюдения.
Вариант 11. Гостиничная система
Задание 11.1. Анализ длительности проживания
Пользователь вводит количество бронирований N.
Для каждого бронирования получите число ночей.
Определите:
- общее количество ночей;
- среднюю длительность;
- количество бронирований на одну ночь;
- количество бронирований более семи ночей;
- максимальную длительность проживания.
Задание 11.2. Проверка количества ночей
Через do...while получите длительность проживания от 1 до 30 ночей.
Повторяйте запрос до корректного значения.
Задание 11.3. Расчёт выручки
Последовательно вводите количество ночей для каждого гостя.
0 завершает ввод.
Стоимость одной ночи — 3500 ₽.
Для проживания от 7 ночей предоставляется скидка 10%.
Определите:
- количество бронирований;
- общее количество ночей;
- суммарную выручку;
- количество бронирований со скидкой.
Вариант 12. Парковочная система
Задание 12.1. Анализ длительности парковки
Введите количество автомобилей N.
Для каждого автомобиля получите время парковки в часах.
Определите:
- суммарное количество часов;
- среднюю длительность;
- количество парковок до
2часов; - количество парковок более
8часов; - максимальную длительность.
Задание 12.2. Проверка номера зоны
С помощью do...while запросите номер парковочной зоны от 1 до 3.
Повторяйте ввод до корректного значения.
Задание 12.3. Расчёт оплаты
Последовательно вводите длительность парковки.
0 завершает ввод.
Стоимость одного часа — 80 ₽.
Если парковка длится более 8 часов, итоговая стоимость ограничивается 600 ₽.
Определите:
- количество автомобилей;
- общую выручку;
- среднюю стоимость парковки;
- количество длительных парковок более
8часов.
Вариант 13. Производственный контроль
Задание 13.1. Анализ выпуска продукции
Введите количество смен N.
Для каждой смены получите количество выпущенных изделий.
Определите:
- общий выпуск;
- средний выпуск;
- количество смен с выпуском менее
100; - лучшую смену по количеству изделий.
Задание 13.2. Проверка нормы
Через do...while получите план выпуска от 1 до 10000 изделий.
Повторяйте ввод до корректного значения.
Задание 13.3. Контроль брака
Последовательно вводите количество бракованных изделий по партиям.
0 завершает ввод.
Отрицательные значения пропускайте.
Определите:
- количество партий;
- общее количество брака;
- среднее количество брака на партию;
- количество партий, где брак превышает
10изделий; - максимальное количество брака.
Вариант 14. Финансовое планирование
Задание 14.1. Накопление по месяцам
Пользователь вводит начальную сумму, ежемесячное пополнение и количество месяцев.
С помощью for выведите состояние накоплений после каждого месяца.
В конце выведите итоговую сумму.
Задание 14.2. Проверка финансовой цели
Через do...while получите положительное значение финансовой цели.
Нулевые, отрицательные и нечисловые значения не принимать.
Задание 14.3. Срок достижения цели
Получите:
- текущую сумму;
- ежемесячное пополнение;
- финансовую цель.
С помощью while определите, через сколько месяцев будет достигнута цель.
Если ежемесячное пополнение меньше или равно 0, расчёт не выполнять.
Дополнительно выведите сумму накоплений по каждому месяцу.
Вариант 15. Анализ сетевых запросов
Задание 15.1. Статистика времени ответа
Введите количество запросов N.
Для каждого запроса получите время ответа в миллисекундах.
Определите:
- среднее время;
- количество запросов быстрее
100мс; - количество запросов медленнее
500мс; - максимальное время ответа.
Задание 15.2. Проверка тайм-аута
С помощью do...while получите значение тайм-аута от 100 до 10000 мс.
Повторяйте ввод до получения корректного значения.
Задание 15.3. Поток результатов запросов
Последовательно вводите HTTP-коды состояния.
0 завершает ввод.
Допустимыми считайте коды от 100 до 599. Остальные значения пропускайте.
Определите:
- общее количество корректных кодов;
- количество кодов
2xx; - количество кодов
4xx; - количество кодов
5xx; - количество остальных корректных кодов.
Для классификации используйте числовые диапазоны, не преобразовывая код в строку.
Требования к результату
Section titled “Требования к результату”В рамках практической работы необходимо:
- выполнить задания 1 и 2 общей части;
- выполнить все три задания назначенного индивидуального варианта;
- использовать подходящий тип цикла в соответствии с задачей;
- корректно применять счётчики, накопители,
breakиcontinue, если они требуются; - предусмотреть завершение циклов и обработку некорректного ввода;
- проверить программу на нескольких наборах исходных данных.
Контрольные вопросы
Section titled “Контрольные вопросы”- В каких случаях удобно использовать цикл
for? - Чем цикл
whileотличается отfor? - В чём особенность цикла
do...while? - В какой ситуации тело
whileможет не выполниться ни одного раза? - Почему тело
do...whileвыполняется как минимум один раз? - Что такое счётчик и накопитель?
- Почему при вычислении произведения накопитель обычно начинается с
1? - Что происходит при выполнении
break? - Чем
continueотличается отbreak? - Для чего можно использовать
for...ofпри работе со строкой? - Из-за чего может возникнуть бесконечный цикл?
- Как определить последнюю цифру целого числа без преобразования его в строку?
- Почему при вводе чисел через
prompt()необходимо выполнять преобразование типов? - Для чего используется
Number.isNaN()?
При защите работы будьте готовы объяснить отдельный цикл, изменить условие его завершения или добавить дополнительное условие по требованию преподавателя.