Практика 3. Условия, циклы и `switch`
Цель
Освоить ветвление и повторение в Go: логические выражения, if, все основные
формы for, перебор через range, switch, ранний выход, break и continue.
Общие требования
- каждая самостоятельная программа находится в отдельном каталоге;
- входные значения задаются переменными в начале
main; - ошибочные и граничные случаи обрабатываются до основного сценария;
- код форматируется через
go fmt ./...; - решения не зависят от операционной системы.
A. Разминка
Задание 1. Знак числа
Для целого числа выведите один из результатов:
положительное;отрицательное;ноль.
Используйте if, else if, else.
Задание 2. Чётность и делимость
Для числа n определите:
- является ли оно чётным;
- делится ли оно на 3;
- делится ли одновременно на 2 и 3.
Используйте %, && и понятные логические переменные.
Задание 3. Категория возраста
Выведите категорию:
| Возраст | Категория |
|---|---|
| меньше 0 | ошибка |
| 0–6 | дошкольник |
| 7–17 | школьник |
| 18–24 | студент или молодой специалист |
| 25–64 | взрослый |
| 65 и старше | пенсионный возраст |
Сначала обработайте отрицательный возраст и завершите main через return.
Задание 4. Таблица умножения
С помощью классического цикла for выведите таблицу умножения числа 7 от 1 до
10:
7 × 1 = 7...7 × 10 = 70Затем напишите второй вариант с for i := range 10.
B. Основные задания
Задание 5. FizzBuzz
Для чисел от 1 до 100:
- вместо чисел, кратных 3, выводите
Fizz; - вместо чисел, кратных 5, выводите
Buzz; - вместо чисел, кратных и 3, и 5, выводите
FizzBuzz; - иначе выводите число.
Проверьте условие FizzBuzz раньше отдельных условий. Объясните почему.
Задание 6. Оценка результата
Для балла от 0 до 100 используйте switch без выражения:
| Балл | Результат |
|---|---|
| 90–100 | отлично |
| 75–89 | хорошо |
| 60–74 | удовлетворительно |
| 0–59 | не зачтено |
| меньше 0 или больше 100 | некорректный балл |
Задание 7. Сумма и среднее
Дан slice:
scores := []int{95, 82, 74, 61, 48, 103, -5}Требуется:
- пропустить значения вне диапазона 0–100 через
continue; - посчитать число корректных результатов;
- найти минимум и максимум;
- вычислить сумму и среднее;
- избежать деления на ноль, если корректных значений нет.
Задание 8. Строка и Unicode
Переберите строку:
text := "Go, мир!"Для каждого символа выведите:
- байтовый индекс;
- сам символ;
- Unicode-код в формате
%U.
Объясните, почему некоторые индексы не следуют подряд.
Задание 9. Меню команд
Создайте переменную:
command := "list"Через switch обработайте команды:
add— «Добавление задачи»;list— «Список задач»;done— «Завершение задачи»;exit,quit— «Выход»;- остальные — «Неизвестная команда».
Для exit и quit должна использоваться одна ветка case.
C. Проект «Анализатор задач»
Это первая часть сквозного проекта курса. Пока данные задаются прямо в коде.
Используйте:
priorities := []int{1, 3, 2, 5, 0, 4, 8, -1}Допустимый приоритет — от 1 до 5:
| Приоритет | Категория |
|---|---|
| 1 | низкий |
| 2–3 | обычный |
| 4 | высокий |
| 5 | критический |
Программа должна:
- перебрать все значения через
range; - вывести предупреждение для некорректных приоритетов;
- пропустить их через
continue; - классифицировать корректные значения через
switch; - посчитать количество задач каждой категории;
- посчитать общее количество корректных и некорректных значений;
- определить средний приоритет;
- вывести итоговый отчёт.
Пример части вывода:
Задача 1: приоритет 1 — низкийЗадача 2: приоритет 3 — обычныйЗадача 4: приоритет 5 — критическийЗадача 5: некорректный приоритет 0
ИТОГИКорректных задач: 6Некорректных значений: 2Средний приоритет: 3.00Дополнительное требование: если slice пуст или не содержит корректных значений, программа должна вывести понятное сообщение и не выполнять деление.
Дополнительные задания
Поиск простых чисел
Выведите простые числа от 2 до 100. Не используйте готовые библиотеки. Для каждого кандидата проверяйте делители в отдельном внутреннем цикле.
Координаты
Переберите координаты квадратной таблицы 5×5 и найдите первую пару, для которой
row*column == 12. Завершите оба цикла с помощью метки.
Стабильный вывод map
Создайте map с результатами студентов. Убедитесь, что порядок обхода не следует считать заданным. Затем соберите имена в slice, отсортируйте их и выведите результаты в стабильном порядке.
Критерии оценивания
| Критерий | Баллы |
|---|---|
| Условия и логические выражения | 0–3 |
Циклы и range | 0–3 |
Корректное применение switch | 0–3 |
| Граничные случаи и ранний выход | 0–3 |
| Проект «Анализатор задач» | 0–4 |
| Максимум | 16 |
Вопросы для защиты
- Почему условие
ifдолжно иметь типbool? - Какие формы цикла
forсуществуют? - Какие значения возвращает
rangeдля slice и строки? - Почему порядок обхода map нельзя использовать в логике программы?
- Чем
continueотличается отbreak? - Почему в
switchне нужно писатьbreakпосле каждогоcase? - Почему более строгие условия нужно проверять раньше общих?
- Как защититься от деления на ноль при вычислении среднего?