Программирование алгоритма — 5.3, Информатика 7 класс, Кадыркулов: разбор и ответы
Ookul.kz · разбор уроков
Қазақша

Разберём любой номер вместе!

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? Объясни результаты.

Как думать. Пройди по цепочке условий сверху вниз и остановись на первом, которое верно.

Решение.

  1. a = 4, b = 5, c = 10. Проверяем a + b = 9 <= 10: верно. Выполняется первая ветка: 2·4 + 2·5 = 8 + 10 = 18. Дорога между магазинами (10 м) длиннее, чем сумма двух других (9 м), поэтому проще дважды сходить домой.
  2. 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: ввод, цепочка проверок, четыре варианта вывода.

Решение. Схема (описание сверху вниз):

  1. Овал «Начало».
  2. Параллелограмм «ввод a, b, c».
  3. Ромб «a + b <= c?». «Да»: блок «ответ = 2a + 2b». «Нет»: идём к следующему ромбу.
  4. Ромб «b + c <= a?». «Да»: «ответ = 2b + 2c». «Нет»: дальше.
  5. Ромб «a + c <= b?». «Да»: «ответ = 2a + 2c». «Нет»: «ответ = a + b + c».
  6. Все ветки сходятся в параллелограмм «вывод ответа».
  7. Овал «Конец».

Структура ветвящаяся: выбирается один из четырёх путей. Это ветвление с несколькими условиями подряд (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

Придумай задачу на линейный алгоритм. Преврати её в задачу на ветвящийся алгоритм. Нарисуй блок-схемы обеих задач и напиши код.

Как думать. Возьми простую покупку. Линейная версия: посчитать стоимость. Ветвящаяся: добавить условие, при котором есть скидка.

Пример ответа.

  1. Линейная задача. Тетрадь стоит price тенге, куплено n штук. Найти стоимость покупки. Блок-схема: Начало, ввод price и n, cost = price * n, вывод cost, Конец.
price = int(input())     # цена одной тетради
n = int(input())         # сколько куплено
print(price * n)         # цена покупки
  1. Ветвящаяся задача. Если стоимость покупки не меньше 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.

Ответ: любая пара «линейная задача плюс та же задача с условием» с блок-схемами и кодом; образец выше.

Шпаргалка

Термины: блок-схема, линейный алгоритм, ветвящийся алгоритм, циклический алгоритм, условие, ветвление.

Мини-тест

← 5.2. Разработка алгоритма · 5.4. Программирование задач. Практическая работа →