Перейти к содержимому

Практика 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критический

Программа должна:

  1. перебрать все значения через range;
  2. вывести предупреждение для некорректных приоритетов;
  3. пропустить их через continue;
  4. классифицировать корректные значения через switch;
  5. посчитать количество задач каждой категории;
  6. посчитать общее количество корректных и некорректных значений;
  7. определить средний приоритет;
  8. вывести итоговый отчёт.

Пример части вывода:

Задача 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
Циклы и range0–3
Корректное применение switch0–3
Граничные случаи и ранний выход0–3
Проект «Анализатор задач»0–4
Максимум16

Вопросы для защиты

  1. Почему условие if должно иметь тип bool?
  2. Какие формы цикла for существуют?
  3. Какие значения возвращает range для slice и строки?
  4. Почему порядок обхода map нельзя использовать в логике программы?
  5. Чем continue отличается от break?
  6. Почему в switch не нужно писать break после каждого case?
  7. Почему более строгие условия нужно проверять раньше общих?
  8. Как защититься от деления на ноль при вычислении среднего?