5.3. Программирование алгоритма
Информатика, 7 класс. Учебник: Кадыркулов Р. А., Рыскулбекова А. Д., Нурмуханбетова Г. К. (Алматыкітап баспасы, 2023). Раздел 5: Практическое программирование. Страницы 149–153.
Чему научишься
- Называть три вида алгоритмов по структуре: линейный, ветвящийся, циклический.
- Читать блок-схему и понимать, какая строка кода ей соответствует.
- Сначала рисовать блок-схему задачи, а потом писать по ней программу.
- Решать задачи с ветвлением
if / elif / else.
Разминка
- Какие виды алгоритмов ты знаешь? Есть алгоритмы, где всё идёт по порядку (линейные), где нужно выбрать путь (ветвящиеся) и где действия повторяются (циклические).
- Почему важно придумывать эффективные алгоритмы? Хороший алгоритм решает задачу быстрее, проще и с меньшим числом ошибок. Плохой может работать долго или давать неверный результат.
Разбираемся
Зачем нужна блок-схема
Блок-схема это чертёж алгоритма. Каждый шаг рисуется фигурой, а фигуры соединены стрелками. Глядя на такую картинку, легко увидеть, что за чем идёт и где программа должна выбрать путь.
💡 Новичок часто бросается писать код сразу и запутывается. Сначала разбери задачу на части, нарисуй схему и только потом переводи её в строки. Так ошибок будет меньше.
Три вида алгоритмов
По строению все алгоритмы делятся на три вида.
- Линейный. Нет развилок и повторов. Все действия выполняются по одному разу, друг за другом: ввод, вычисление, вывод.
- Ветвящийся. Компьютер проверяет условие и идёт по одному из двух путей: «да» или «нет». В Python это
if / elif / else. - Циклический. Одни и те же команды повторяются, пока выполняется условие. Это тема следующих уроков и классов.
🌟 Слово «алгоритм» пришло от имени учёного Аль-Хорезми, который жил в Средней Азии. Он описал правила арифметических действий, и со временем «алгоритмом» стали называть любую точную последовательность шагов.
Из блок-схемы в код: линейный пример
Задача: дан рост человека в сантиметрах. Вывести, сколько в нём целых метров и сколько остаётся сантиметров. Блок-схема идёт строго сверху вниз, без развилок.
cm = int(input()) # рост в сантиметрах
m = cm // 100 # целые метры
rest = cm % 100 # оставшиеся сантиметры
print(m, rest) # для 172 выведет: 1 72
Из блок-схемы в код: ветвление
Теперь с развилкой. Задача: дано двузначное число N. Если первая цифра больше второй, вывести 1, иначе 0.
В схеме появляется ромб с условием. Из него выходят две стрелки: «Да» и «Нет».
Каждой фигуре схемы соответствует строка кода. Ромб становится if, ветка «Нет» становится else.
N = int(input()) # ввод двузначного числа
a = N // 10 # первая цифра
b = N % 10 # вторая цифра
if a > b: # ромб «a > b ?»
k = 1 # ветка «Да»
else:
k = 0 # ветка «Нет»
print(k) # вывод результата
Проверим на нескольких числах, включая случай равных цифр.
| Ввод | a | b | Условие a > b | Вывод |
|---|---|---|---|---|
| 73 | 7 | 3 | да | 1 |
| 37 | 3 | 7 | нет | 0 |
| 55 | 5 | 5 | нет, цифры равны | 0 |
| 90 | 9 | 0 | да | 1 |
⚠️ Частая ошибка. После
ifиelseставят двоеточие, а строки внутри ветки сдвигают вправо (отступ в 4 пробела). Забудешь двоеточие или отступ, и Python выдаст ошибку.
💡 Редактор можно взять любой: IDLE (идёт вместе с Python), Thonny или онлайн-интерпретатор в браузере. Сохрани файл с расширением
.py, запусти и введи число с клавиатуры.
👨👩👧 Родителю. Попросите ребёнка нарисовать блок-схему бытовой ситуации, например «собираюсь в школу» с ромбом «холодно ли на улице?». Понятие развилки в жизни станет очевидным, и в коде оно уже не пугает.
Проверь себя
- На какие виды делятся алгоритмы по структуре? Линейные, ветвящиеся и циклические.
- Чем ветвящийся алгоритм отличается от линейного? В линейном все действия идут подряд, а в ветвящемся из-за проверки условия программа выбирает один из двух путей.
- Как ромб блок-схемы записывается в Python? Ромб с условием это
if(а при двух путях ещё иelse). - Зачем рисовать схему, если можно сразу писать код? Схема показывает все шаги и условия. По ней проще найти ошибку в логике ещё до запуска программы.
Решаем упражнения
Практическая работа
№ 1 · «Практическая работа»
Проект «Поход в магазин». Айдос идёт за покупками в два магазина рядом с домом. До первого магазина a м, до второго b м, а между магазинами c м. Найди самый короткий путь от дома до обоих магазинов и обратно. Для a = 5, b = 30, c = 15 ответ 40.
Как думать. Нужно заглянуть в оба магазина и вернуться домой. Всего четыре разумных маршрута: обойти треугольник целиком (a + b + c) или сходить в каждый магазин и вернуться тем же путём (2a + 2b, 2a + 2c, 2b + 2c). Выбираем самый короткий. Если одна дорога не короче двух других вместе, то обходить треугольник невыгодно: лучше дважды пройти две короткие дороги. Так появляются проверки условий.
Решение. Блок-схема: ввод a, b, c, затем цепочка ромбов, а после них вывод ответа.
a, b, c = map(int, input().split()) # три числа в одной строке через пробел
if a + b <= c:
print(2*a + 2*b) # c слишком длинная
elif b + c <= a:
print(2*b + 2*c) # a слишком длинная
elif a + c <= b:
print(2*a + 2*c) # b слишком длинная
else:
print(a + b + c) # короче обойти треугольник
Для ввода 5 30 15: 5 + 30 = 35 больше 15, 30 + 15 = 45 больше 5, а 5 + 15 = 20 не больше 30, значит, сработает третья ветка: 2·5 + 2·15 = 40.
💡 Окно с кнопкой «Вычислить» из книги записано на диске. Оно не нужно: достаточно запустить программу в IDLE или Thonny и ввести числа вручную.
| Ввод | Вывод | Какая ветка |
|---|---|---|
| 5 30 15 | 40 | третья |
| 4 5 10 | 18 | первая |
| 5 5 9 | 19 | else |
| 20 3 4 | 14 | вторая |
Ответ: программа выше выводит 40 для 5, 30, 15.
№ 2 · «Практическая работа»
Анализ. Какие результаты даст программа «Поход в магазин» для 1) a = 4, b = 5, c = 10 и 2) a = 5, b = 5, c = 9? Объясни результаты.
Как думать. Пройди по цепочке условий сверху вниз и остановись на первом, которое верно.
Решение.
- a = 4, b = 5, c = 10. Проверяем a + b = 9 <= 10: верно. Выполняется первая ветка: 2·4 + 2·5 = 8 + 10 = 18. Дорога между магазинами (10 м) длиннее, чем сумма двух других (9 м), поэтому проще дважды сходить домой.
- a = 5, b = 5, c = 9. Проверяем: a + b = 10 <= 9? Нет. b + c = 14 <= 5? Нет. a + c = 14 <= 5? Нет. Выполняется else: 5 + 5 + 9 = 19. Ни одна дорога не длиннее двух остальных вместе, и обход по кругу выгоднее.
Ответ: 1) 18; 2) 19.
№ 3 · «Практическая работа»
Синтез. Составь блок-схему проекта «Поход в магазин». К какому виду относится её алгоритмическая структура?
Как думать. Возьми шаги из упражнения 1: ввод, цепочка проверок, четыре варианта вывода.
Решение. Схема (описание сверху вниз):
- Овал «Начало».
- Параллелограмм «ввод a, b, c».
- Ромб «a + b <= c?». «Да»: блок «ответ = 2a + 2b». «Нет»: идём к следующему ромбу.
- Ромб «b + c <= a?». «Да»: «ответ = 2b + 2c». «Нет»: дальше.
- Ромб «a + c <= b?». «Да»: «ответ = 2a + 2c». «Нет»: «ответ = a + b + c».
- Все ветки сходятся в параллелограмм «вывод ответа».
- Овал «Конец».
Структура ветвящаяся: выбирается один из четырёх путей. Это ветвление с несколькими условиями подряд (if / elif / elif / else).
Ответ: ветвящийся алгоритм.
№ 4 · «Практическая работа»
Оценка. Оцени пользу блок-схемы при разработке программы. Обсуди с одноклассниками: что лучше, сразу писать программу или сначала рисовать блок-схему?
Как думать. Вспомни, как легко перепутать условия в «Походе в магазин», если не видеть всю картину сразу.
Пример ответа. Блок-схема лучше. На ней видны все пути и все условия, а ещё её можно показать другому человеку. Пропущенную ветку или лишнее условие найти проще на рисунке, чем в готовом коде. Для маленькой задачи из трёх строк схема не обязательна, но чем сложнее задача, тем она полезнее. Хороший порядок такой: разобрать условие, нарисовать схему, написать программу, проверить на тестах.
Ответ: сначала блок-схема, потому что она показывает логику решения и упрощает код.
Задание
№ 5
«Задание», задача 1*. Дано трёхзначное число N. Найди его наибольшую цифру и выведи на экран. Составь блок-схему. Примеры: 120 даёт 2, 786 даёт 8.
Как думать. Сначала достань три цифры: сотни, десятки, единицы. Потом заведи переменную m для «самой большой цифры на сейчас» и сравни её по очереди с остальными.
Решение.
N = int(input()) # трёхзначное число
a = N // 100 # цифра сотен
b = N // 10 % 10 # цифра десятков
c = N % 10 # цифра единиц
m = a # пока наибольшая — первая
if b > m:
m = b
if c > m:
m = c
print(m)
| Ввод | a b c | Вывод |
|---|---|---|
| 120 | 1 2 0 | 2 |
| 786 | 7 8 6 | 8 |
| 505 | 5 0 5 | 5 |
| 999 | 9 9 9 | 9 |
Короткий вариант: print(max(a, b, c)), но здесь важно потренировать if.
Ответ: программа выше выводит наибольшую цифру (для 120 это 2, для 786 это 8).
№ 6
«Задание», задача 2**. Даны целые числа K и P. Сравни их. Если K > P, выведи >, если K < P, то <, если K = P, то =. Примеры: 47 68 даёт <, 4 −1 даёт >, −80 −80 даёт =.
Как думать. Три случая, но проверок нужно две: сначала K > P, потом K < P, а всё остальное это равенство.
Решение.
K, P = map(int, input().split()) # два числа в одной строке
if K > P:
print(">")
elif K < P:
print("<")
else:
print("=")
| Ввод | Вывод |
|---|---|
| 47 68 | < |
| 4 -1 | > |
| -80 -80 | = |
| 0 -5 | > |
Ответ: программа выше (для примеров <, >, =).
Домашнее задание
№ 7 · «Домашнее задание», задание 1
Придумай задачу на линейный алгоритм. Преврати её в задачу на ветвящийся алгоритм. Нарисуй блок-схемы обеих задач и напиши код.
Как думать. Возьми простую покупку. Линейная версия: посчитать стоимость. Ветвящаяся: добавить условие, при котором есть скидка.
Пример ответа.
- Линейная задача. Тетрадь стоит
priceтенге, купленоnштук. Найти стоимость покупки. Блок-схема: Начало, ввод price и n, cost = price * n, вывод cost, Конец.
price = int(input()) # цена одной тетради
n = int(input()) # сколько куплено
print(price * n) # цена покупки
- Ветвящаяся задача. Если стоимость покупки не меньше 5000 тенге, магазин даёт скидку 10 %. Найти сумму к оплате. Блок-схема: Начало, ввод price и n, cost = price * n, ромб «cost >= 5000?», «Да»: cost = cost * 9 // 10, «Нет»: ничего не меняется, затем вывод cost, Конец.
price = int(input()) # цена одной тетради
n = int(input()) # сколько куплено
cost = price * n # стоимость без скидки
if cost >= 5000: # скидка от 5000 тенге
cost = cost * 9 // 10
print(cost)
| price | n | Стоимость | Вывод |
|---|---|---|---|
| 450 | 3 | 1350 | 1350 |
| 1200 | 5 | 6000 | 5400 |
| 1000 | 5 | 5000 | 4500 |
| 999 | 5 | 4995 | 4995 |
Строка с 5000 это граничный тест: условие >= даёт скидку именно на ровные 5000.
Ответ: любая пара «линейная задача плюс та же задача с условием» с блок-схемами и кодом; образец выше.
Шпаргалка
Термины: блок-схема, линейный алгоритм, ветвящийся алгоритм, циклический алгоритм, условие, ветвление.