Загрузка данных
1
ЛАБОРАТОРНАЯ РАБОТА № 6
Практикум по применению циклических конструкций для решения задач
Дисциплина: Основы алгоритмизации и программирования
Специальность: 09.02.07 «Информационные системы и программирование»
Студент: _________________________ Группа: ______
ЦЕЛЬ
Закрепление практических навыков применения циклических конструкций (while, do-while (эмуляция
через while True с break), for) для решения задач повышенной сложности, требующих осознанного
выбора типа цикла, обработки потокового ввода и организации интерактивного взаимодействия с
пользователем.
ЗАДАЧИ
1. Научиться самостоятельно выбирать оптимальный тип цикла (for, while, while True с break) в
зависимости от решаемой задачи.
2. Развить навыки обработки последовательностей чисел без использования массивов
(однопроходные алгоритмы).
3. Освоить циклический сдвиг цифр числа и работу с его разрядами.
4. Научиться реализовывать алгоритмы бинарного поиска в игровом контексте.
5. Закрепить навыки организации повторных вычислений по запросу пользователя.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Примечание: Теоретический материал по циклам (for, while, do-while в Python через while True +
break, операторы break, continue) был подробно рассмотрен в Лабораторной работе №5. В данной
работе предполагается, что студент владеет этой теорией и применяет её на практике.
Напоминание: при решении задач данного практикума необходимо:
¾ Использовать конструкцию try-except для защиты от некорректного ввода.
¾ Тщательно тестировать программы на граничных значениях.
¾ Самостоятельно определять, какой тип цикла (for — при известном числе итераций, while —
при неизвестном, но с проверкой условия, while True — для бесконечных циклов с выходом
по break) лучше всего подходит для решения конкретной подзадачи.
ХОД РАБОТЫ
Внимание: Вам необходимо самостоятельно написать код для решения каждой из представленных
ниже задач, вставить его листинг в отчет и приложить скриншоты результатов выполнения для
различных тестовых данных (включая граничные случаи).
Задание 1. Сумма чисел в диапазоне
Условие:
Напишите программу, которая запрашивает у пользователя два целых числа — начало и конец
диапазона (включительно). Программа должна вычислить и вывести сумму всех целых чисел,
находящихся в этом диапазоне. Если начальное число больше конечного, программа должна поменять
их местами (или вывести сообщение об ошибке — на ваш выбор). Предусмотрите проверку на
корректность ввода.
Программа:
# Вставьте сюда код вашей программы
Результат выполнения:
2
(Вставьте скриншот консоли с результатами для: 1–5, 10–10, 5–1, а также для некорректного ввода)
Задание 2. Наибольший общий делитель (НОД)
Условие:
Напишите программу, которая запрашивает у пользователя два целых положительных числа и находит
их наибольший общий делитель (НОД). Используйте алгоритм Евклида (реализуемый через
цикл while). Если пользователь ввел ноль или отрицательное число, программа должна запросить ввод
заново.
Программа:
# Вставьте сюда код вашей программы
Результат выполнения:
(Вставьте скриншот консоли с результатами для: (12, 18), (100, 25), (7, 13), (0, 10))
Задание 3. Все делители числа
Условие:
Напишите программу, которая запрашивает у пользователя натуральное число и выводит все его
положительные делители (включая 1 и само число). Если число простое (имеет ровно два делителя),
программа должна дополнительно вывести сообщение «Это простое число». Используйте цикл for.
Программа:
# Вставьте сюда код вашей программы
Результат выполнения:
(Вставьте скриншот консоли с результатами для: 12, 7, 1, 36)
Задание 4. Количество цифр в числе
Условие:
Напишите программу, которая запрашивает у пользователя целое число (положительное или
отрицательное) и определяет количество цифр в нем, не преобразуя число в строку (используя
циклическое деление на 10). Для отрицательного числа знак «минус» не должен считаться цифрой.
Ноль должен считаться одной цифрой.
Программа:
# Вставьте сюда код вашей программы
Результат выполнения:
(Вставьте скриншот консоли с результатами для: 12345, -987, 0, 1000000)
Задание 5. Статистика по 10 числам
Условие:
Напишите программу, которая запрашивает у пользователя 10 целых чисел (по одному за раз, не
используя массив или список). После ввода всех чисел программа должна вывести следующую
статистику:
¾ сколько среди них положительных;
¾ сколько отрицательных;
¾ сколько нулей;
¾ сколько четных;
¾ сколько нечетных.
Важно: Для ввода чисел используется одна и та же переменная (числа не сохраняются все сразу,
статистика накапливается в счетчиках).
Программа:
3
# Вставьте сюда код вашей программы
Результат выполнения:
(Вставьте скриншот консоли с результатами для набора: 5, -3, 0, 8, -1, 0, 10, -7, 4, 2)
Задание 6. Калькулятор с продолжением
Условие:
Напишите программу-калькулятор, которая в цикле запрашивает у пользователя два числа и знак
арифметической операции (+, -, *, /), выполняет действие и выводит результат. Затем программа
спрашивает: «Выполнить еще одно вычисление? (да/нет)». Если пользователь вводит «да» (или «д»,
или «yes» — на ваш выбор), цикл повторяется. Если «нет» — программа завершается. Предусмотрите
защиту от деления на ноль и от ввода неверного знака операции.
Программа:
# Вставьте сюда код вашей программы
Результат выполнения:
(Вставьте скриншот консоли с примерами: 10 + 5, 100 / 0, 7 * 3, затем отказ от продолжения)
Задание 7. Циклический сдвиг цифр числа
Условие:
Напишите программу, которая запрашивает у пользователя натуральное число и целое число k (на
сколько цифр сдвинуть). Программа должна выполнить левый циклический сдвиг цифр числа
на k позиций и вывести результат.
Пример: число 123456, сдвиг на 2 → результат 345612.
Если k больше количества цифр, выполните сдвиг на k % длина_числа (приведите к осмысленному
значению). Если k отрицательное — выполните сдвиг вправо (или обработайте как ошибку — на ваш
выбор).
Программа:
# Вставьте сюда код вашей программы
Результат выполнения:
(Вставьте скриншот консоли с результатами для: 123456, сдвиг 2; 12345, сдвиг 7; 1002, сдвиг 1; 54321,
сдвиг -1)
Задание 8. Бесконечный показ дней недели
Условие:
Напишите программу, которая последовательно выводит названия дней недели (начиная с
понедельника) и после каждого дня спрашивает пользователя: «Показать следующий день? (OK —
продолжить, Cancel — выйти)». Программа продолжает цикл, пока пользователь нажимает OK. После
воскресенья снова идет понедельник. Используйте while True с выходом по break или условию.
Программа:
# Вставьте сюда код вашей программы
Результат выполнения:
(Вставьте скриншот консоли, где пользователь просмотрел: понедельник → вторник → среда →
Cancel)
Задание 9. Таблица умножения (от 2 до 9)
Условие:
4
Напишите программу, которая выводит на экран полную таблицу умножения для всех множителей
от 2 до 9. Для каждого числа от 2 до 9 необходимо вывести строки умножения на числа от 1 до 10.
Формат вывода:
2 x 1 = 2
2 x 2 = 4
...
9 x 10 = 90
Программа:
# Вставьте сюда код вашей программы
Результат выполнения:
(Вставьте скриншот консоли с фрагментом таблицы: от 2×1 до 9×10)
Задание 10. Игра «Угадай число» (бинарный поиск)
Условие:
Напишите программу, в которой компьютер угадывает задуманное пользователем целое число от 0
до 100. Алгоритм: на каждом шаге компьютер определяет середину текущего диапазона N, выводит
её и спрашивает: «Ваше число > N, < N или == N?». В зависимости от ответа пользователя диапазон
сужается:
¾ если > N → нижняя граница = N + 1;
¾ если < N → верхняя граница = N − 1;
¾ если == N → игра завершается с поздравлением.
Программа продолжает цикл, пока не угадает число. Предусмотрите защиту от некорректных ответов
пользователя.
Программа:
# Вставьте сюда код вашей программы
Результат выполнения:
(Вставьте скриншот консоли с примером игры, где задумано число 42)
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Для каждого из заданий 1–10 укажите, какой тип цикла вы выбрали (for, while, while True +
break) и почему. В каких заданиях цикл for был бы неприменим?
2. В задании 5 (статистика по 10 числам) зачем потребовалось использовать одну переменную для
ввода, а не массив? Что это позволяет сэкономить?
3. Объясните алгоритм циклического сдвига цифр в задании 7. Как вы обработали случай,
когда k больше длины числа?
4. Почему для задания 8 (дни недели) удобнее использовать while True, а не обычный while с
условием? Приведите альтернативный вариант.
5. В задании 10 (угадай число) как гарантируется, что компьютер найдет число за конечное число
шагов? Какое максимальное количество попыток потребуется для диапазона 0–100?
6. Какие граничные случаи вы проверили в задании 4 (количество цифр) для чисел 0, 1, 10, −5?
7. Можно ли было решить задание 2 (НОД) с помощью цикла for? Почему while лучше подходит
для алгоритма Евклида?
8. В задании 3 (делители числа) как оптимизировать цикл, чтобы не перебирать все числа до
самого́ числа?
9. Приведите пример, где в задании 6 (калькулятор с продолжением) программа должна запросить
ввод заново без выхода из цикла.
5
10. Опишите, как бы вы модифицировали задание 10, чтобы компьютер загадывал число, а
пользователь отгадывал (с подсказками «больше/меньше»).
ТРЕБОВАНИЯ К ОФОРМЛЕНИЮ ОТЧЕТА
1. Отчет выполняется в текстовом редакторе (MS Word или аналог).
2. Титульный лист оформляется в соответствии с шаблоном, указанным в начале работы.
3. В отчете обязательно должны присутствовать: цель работы, задачи, ход работы (с решениями
всех 10 задач), ответы на контрольные вопросы и вывод.
4. Для каждого задания (с 1 по 10) необходимо представить:
o Условие задачи.
o Листинг (текст) программы, оформленный моноширинным шрифтом.
o Скриншоты консоли с результатами выполнения программы для различных тестовых
данных (минимум 3–4 разных набора, включая граничные случаи).
5. Скриншоты должны быть четкими, с видимым текстом программы и результатом ее работы.
ВЫВОДЫ
(Студент самостоятельно формулирует вывод по работе. В выводе необходимо отразить: какие навыки
работы с циклами были закреплены, с какими сложностями столкнулись при решении задач, какие из
заданий показались наиболее интересными/сложными, как навыки, полученные в ходе работы, могут
пригодиться в дальнейшем.)
Отработано часов: 4
Подпись студента: _____________
Дата: ______