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

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

4.3–4.4. Программирование алгоритмов ветвления

Информатика, 7 класс. Учебник: Кадыркулов Р. А., Рыскулбекова А. Д., Нурмуханбетова Г. К. (Алматыкітап баспасы, 2023). Раздел 4: Программирование алгоритмов на языке Python. Страницы 115–120.

Чему научишься

  • Объяснять, чем алгоритм ветвления отличается от линейного.
  • Записывать условия с помощью ==, !=, >, <, >=, <=.
  • Писать на Python краткую (if) и полную (if – else) формы условного оператора.
  • Читать блок-схемы ветвления и строить их.
  • Проверять программу на нескольких тестах, в том числе на граничных.

Разминка

  • Какие виды алгоритмов ты знаешь? Линейный (шаги идут подряд), ветвление (выбор по условию) и циклический (повтор действий). Сегодня разбираем ветвление.
  • Приведи примеры линейных алгоритмов. Рецепт чая: вскипятить воду, залить заварку, добавить сахар. Или сборка рюкзака по списку: каждое действие делается всегда и по порядку.
  • Можно ли решить все задачи только линейными алгоритмами? Нет. Если ответ зависит от данных (больше или меньше, чётное или нечётное), нужен выбор. Например, найти модуль числа: для минуса одно действие, для плюса другое.
  • Какие ситуации могут нарушить повседневные планы? Автобус не пришёл, пошёл дождь, сел телефон. В каждой такой ситуации ты выбираешь запасной путь: пойду пешком, займусь в комнате, найду зарядку. Это и есть ветвление.

Разбираемся

Дорога раздваивается

Линейная программа идёт по одной дороге. Но в жизни всё чаще бывает так: если телефон разряжен, то ставлю на зарядку, иначе продолжаю играть. Дорога раздвоилась, и выбор зависит от ситуации.

📌 Алгоритм ветвления — алгоритм, где набор действий зависит от того, выполнено условие или нет. В нём всегда есть условие и слова «если», «то», «иначе».

Условие — вопрос с ответом «да» или «нет»

Условие — это выражение, которое после проверки становится либо истиной (True), либо ложью (False). Третьего не дано. Условия строят с помощью операторов сравнения.

Для примера возьмём x = 7 и y = 3.

Оператор Что значит Запись Результат при x = 7, y = 3
== равно x == y False
!= не равно x != y True
> больше x > y True
< меньше x < y False
>= больше или равно x >= y True
<= меньше или равно x <= y False

⚠️ Частая ошибка. Один знак = — это присваивание («положи значение в переменную»), а сравнение пишется двумя: ==. Если написать if x = 7:, Python остановится с SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?.

💡 Чётность проверяют остатком: n % 2 == 0 значит «n чётное». Остаток от деления на 2 у чётных всегда 0, у нечётных 1. Так же проверяют кратность: n % 5 == 0 — «n делится на 5».

Краткая форма: только «если»

Бывает, что действие нужно выполнить только при выполнении условия, а «иначе» ничего делать не надо. Тогда пишут краткую форму.

# Краткая форма: действие только если условие истинно
temp = int(input())              # температура на улице
if temp < 0:                     # после условия обязательно двоеточие
    print("Надень шапку")        # отступ: эта строка внутри if
print("Выходим во двор")         # без отступа: выполняется всегда

Что программа выведет:

Ввод Вывод
-5 Надень шапку, потом Выходим во двор
12 только Выходим во двор
0 только Выходим во двор (0 не меньше 0)

Блок-схема словами:

        (условие?)
        /        \
      Да          Нет
      |            |
 [блок команд 1]   |
        \         /
     [дальше по программе]

Ромб — это проверка условия. Блок команд 1 выполняется только по ветке «Да», а дальше обе дороги сходятся.

⚠️ Частая ошибка. Забыли двоеточие после условия: SyntaxError: expected ':'. Забыли отступ у команд внутри if: IndentationError: expected an indented block after 'if' statement. Отступ делают одинаковым, обычно 4 пробела.

Полная форма: «если – иначе»

Когда на каждую ситуацию своё действие, нужна полная форма.

# Полная форма: одно из двух действий выполнится обязательно
age = int(input())                # возраст
if age >= 18:
    print("Взрослый билет")       # условие истинно
else:
    print("Детский билет")        # условие ложно

Ввод и вывод:

Ввод Вывод
7 Детский билет
17 Детский билет
18 Взрослый билет
40 Взрослый билет

Читается так: «Если возраст не меньше 18, то выдай взрослый билет, иначе выдай детский».

Блок-схема полной формы выглядит так:

        (условие?)
        /        \
      Да          Нет
      |            |
 [блок команд 1] [блок команд 2]
        \         /
     [дальше по программе]

Как проверить, что программа работает

Одного теста мало. Хороший набор тестов включает:

  1. обычное значение для каждой ветки;
  2. граничное значение: то самое число, на котором условие меняется. Для age >= 18 это 17 и 18.

Если вместо >= случайно написать >, обычные тесты (7 и 40) ничего не заметят. А тест на 18 сразу покажет ошибку: человек, которому ровно 18, получит детский билет.

👨‍👩‍👧 Родителю. Попросите ребёнка придумать «условную» ситуацию из дня: «если пятница, то идём в кино, иначе делаем уроки». Потом пусть превратит её в программу с if – else. Это лучшая тренировка: сначала формулируем словами, потом записываем кодом. А ещё спросите про граничные тесты: «Что будет, если число равно ровно 18?»

Проверь себя

  • Какой алгоритм называют алгоритмом ветвления? Тот, в котором действия выбираются по условию: при истине выполняется одно, при лжи другое или ничего.
  • Какие слова обязательно есть в ветвлении? Условие и ключевые слова «если», «то», «иначе» (на Python if и else).
  • Что такое условие? Выражение, которое при проверке даёт истину (True) или ложь (False).
  • Чем краткая форма отличается от полной? В краткой действия есть только на случай истины. В полной есть ещё и ветка else на случай лжи.
  • Зачем в программе нужны отступы? По отступам Python понимает, какие команды относятся к if, а какие к else.

Решаем упражнения

Практическая работа

№ 1 · «Практическая работа», задание 1

Даны целые числа a и b. Если a чётное, возведи его в квадрат и прибавь к b. Если нечётное, прибавь его к b. Выведи результат.

Как думать. Чётность проверяем остатком: a % 2 == 0. Если число чётное, его сначала заменяем квадратом, а потом в любом случае складываем с b. Поэтому хватит краткой формы: else не нужен.

Решение. Запускаем IDLE или Thonny (можно онлайн-интерпретатор), создаём новый файл и пишем:

a = int(input())          # первое число
b = int(input())          # второе число
if a % 2 == 0:            # a чётное?
    a = a ** 2            # тогда заменяем a его квадратом
k = a + b                 # в любом случае складываем
print(k)

Проверяем на тестах:

a b Ожидаемо Пояснение
10 4 104 10 чётное: 10 · 10 + 4
9 4 13 9 нечётное: 9 + 4
0 3 3 0 чётное: 0 · 0 + 3
-4 1 17 −4 чётное: 16 + 1

Ответ: программа выше; для a = 10, b = 4 выводит 104.

№ 2 · «Практическая работа», задание 2

Дано действительное число A. Если A положительное, возведи его в квадрат. Если отрицательное, вычисли его куб. Выведи результат.

Как думать. Здесь две взаимоисключающие ситуации, значит нужна полная форма. Случай A = 0 задача не рассматривает, но программа его переживёт: ветка else даст 0 ** 3 = 0.

Решение.

A = float(input())        # действительное число
if A > 0:
    k = A ** 2            # положительное: квадрат
else:
    k = A ** 3            # отрицательное: куб
print(k)
Ввод Вывод
8 64.0
-5 -125.0
0.5 0.25
-2 -8.0

Из-за float Python пишет результат с .0. Это то же число: 64.0 = 64.

Ответ: для 8 получится 64, для −5 получится −125 (Python выведет 64.0 и -125.0).

Анализ

№ 3 · «Анализ»

Вопросы 1–3. Разбери программу поиска наибольшего из трёх чисел a, b, c: 1) на каком алгоритме она основана; 2) какая форма условного оператора в ней применена; 3) построй блок-схему.

В программе сначала три input(), потом переменной с максимумом присваивается a, затем дважды стоит краткое if: сравнение с b и сравнение с c, в конце print.

Как думать. Представь, что ты ищешь самого высокого в строю из трёх человек. Первого считаешь самым высоким. Потом сравниваешь с вторым: выше второй, так и запоминаешь. Потом с третьим.

a = int(input())
b = int(input())
c = int(input())
biggest = a               # пока считаем наибольшим первое число
if biggest < b:           # второе больше?
    biggest = b           # тогда запоминаем второе
if biggest < c:           # третье больше?
    biggest = c           # тогда запоминаем третье
print(biggest)

Решение.

  1. Алгоритм основан на последовательном сравнении: берём первое число за наибольшее и по очереди сравниваем с остальными, меняя «рекорд», если нашли больше.
  2. Использована краткая (неполная) форма if, причём два раза подряд: ветки else нет.
  3. Блок-схема:
[Начало]
   |
[Ввод a, b, c]
   |
[biggest = a]
   |
(biggest < b?) -- Да --> [biggest = b]
   |  Нет                     |
   +<-------------------------+
   |
(biggest < c?) -- Да --> [biggest = c]
   |  Нет                     |
   +<-------------------------+
   |
[Вывод biggest]
   |
[Конец]

⚠️ Частая ошибка. Называть переменную max, как делают в примерах многих учебников, можно, но тогда ты затираешь встроенную функцию max(). Лучше выбирай другое имя, например biggest.

Ответ: 1) последовательное сравнение; 2) краткая форма, два раза; 3) блок-схема выше. Для 4, 9, 7 программа выведет 9.

Синтез

№ 4 · «Синтез»

Задание. Придумай тексты задач на краткую и полную формы условного оператора и покажи, как их решить.

Как думать. Берём ситуации из жизни, где нужно выбрать. Для краткой формы хорош случай «только если что-то не так — предупреди». Для полной нужны две разные реакции.

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

Задача на краткую форму. Дана сумма на карте и цена наушников. Если денег не хватает, выведи, сколько тенге не хватает. В конце всегда пиши «Проверка завершена».

money = int(input())      # сумма на карте
price = int(input())      # цена наушников
if money < price:         # денег не хватает?
    print("Не хватает", price - money, "тенге")
print("Проверка завершена")
Ввод Вывод
1500 и 2000 Не хватает 500 тенге, затем Проверка завершена
2000 и 2000 Проверка завершена

Задача на полную форму. Дан пароль. Если он равен Almaty2023, выведи «Доступ открыт», иначе «Доступ закрыт».

password = input()                    # вводим пароль как текст
if password == "Almaty2023":          # строки тоже можно сравнивать через ==
    print("Доступ открыт")
else:
    print("Доступ закрыт")
Ввод Вывод
Almaty2023 Доступ открыт
almaty2023 Доступ закрыт (заглавная и строчная буквы — разные символы)

Ответ: две задачи с решениями выше. Подойдут и любые другие, лишь бы в одной действие было только при истине, а в другой — в обеих ветках.

Оценка

№ 5 · «Оценка»

Задание. Оцени значимость оператора проверки условий в программировании.

Как думать. Представь программу без выбора: она всегда делает одно и то же, что бы ты ни ввёл. Какие программы тогда вообще можно написать?

Пример ответа. Без условного оператора программа не умела бы реагировать на данные. Не было бы проверки пароля, игры с «жизнями», расчёта скидок, проверки пин-кода. Условие делает программу «умной»: она сама выбирает, что делать. Поэтому оператор if — один из главных в любом языке.

Ответ: условный оператор очень важен: без него программы не могли бы выбирать действия по данным.

Вопросы для размышления

№ 6 · «Вопросы для размышления», вопрос 1

Какой алгоритм является алгоритмом ветвления?

Как думать. Вспомни слова «если», «то», «иначе».

Ответ: алгоритм ветвления — тот, в котором выполняемые действия зависят от условия: при истинном условии выполняется одно, при ложном — другое (или ничего).

№ 7 · «Вопросы для размышления», вопрос 2

Какой пример алгоритма ветвления из повседневной жизни можешь привести?

Как думать. Подойдёт любое «если ..., то ..., иначе ...».

Пример ответа. Если сегодня школьный день, то собираю рюкзак, иначе иду гулять. Или: если на светофоре зелёный, перехожу дорогу, иначе жду.

Ответ: например, «если горит зелёный, перехожу дорогу, иначе жду».

№ 8 · «Вопросы для размышления», вопрос 3

Что ты узнал о структуре оператора проверки условия?

Как думать. Из каких частей состоит запись if?

Ответ: после слова if пишется условие, потом двоеточие. Команды, которые выполняются при истине, пишутся ниже с отступом. В полной форме после них идёт else: и свой блок команд с отступом. Условие строится с помощью операторов сравнения ==, !=, >, <, >=, <=.

№ 9 · «Вопросы для размышления», вопрос 4

Чем отличаются полная и неполная формы записи оператора проверки условия?

Как думать. Что происходит, когда условие ложно?

Ответ: в неполной (краткой) форме есть только if: при истине действия выполняются, при лжи не делается ничего. В полной форме есть if и else: при истине выполняется блок 1, при лжи блок 2, и один из них выполнится всегда.

Задание

№ 10

«Задание», задача 1 ().* Дано число k. Определи, чётное оно или нечётное. Если нечётное, выведи 1, иначе 0.

Как думать. Нечётное — это остаток 1 при делении на 2. Две ситуации — полная форма.

Решение.

k = int(input())
if k % 2 == 1:            # нечётное?
    print(1)
else:
    print(0)
Ввод Вывод
17 1
62 0
-3 1
0 0

Отрицательные числа тоже работают: в Python -3 % 2 равно 1.

Ответ: программа выше; для 17 выведет 1, для 62 выведет 0.

№ 11

«Задание», задача 2 (**). Велосипедист едет по велотрассе в Бурабае со скоростью v м/с. Нужно узнать, преодолеет ли он путь s м за t с. Если да, выведи «да», иначе «нет». Порядок ввода: v, s, t.

Как думать. За время t со скоростью v велосипедист проедет v * t метров. Если это не меньше s, путь пройден.

Решение.

v, s, t = map(float, input().split())    # три числа в одной строке
if v * t >= s:                           # проехал не меньше нужного?
    print("да")
else:
    print("нет")
Ввод Вывод Пояснение
5 100 15 нет 5 · 15 = 75, меньше 100
10 800 90 да 10 · 90 = 900, больше 800
10 900 90 да граничный случай: ровно 900
2 500 60 нет 2 · 60 = 120

Ответ: условие v * t >= s; для 5 100 15 выведет «нет», для 10 800 90 выведет «да».

№ 12 · «Задание», задача 3

⭐ повышенной сложности. Зимой в тёплые дни хоккея не будет. Семиклассники играют, только если наименьшая из температур последних трёх дней ниже t. Определи, сыграют ли они. Порядок ввода: a, b, c, t.

Как думать. Сначала найди самую низкую температуру из трёх (можно функцией min() или методом из № 3). Потом одно сравнение: она ниже t или нет?

Решение.

a, b, c, t = map(float, input().split())   # три температуры и порог
lowest = min(a, b, c)                      # самая низкая из трёх
if lowest < t:                             # ниже порога?
    print("да")
else:
    print("нет")
Ввод Вывод Пояснение
-8 -10 -6 -5 да наименьшая −10, это ниже −5
-3 -2 -4 -5 нет наименьшая −4, это выше −5
-1 -5 -2 -5 нет граничный случай: −5 не ниже −5
-3 -6 -4 -5 да наименьшая −6, это ниже −5

📕 В учебнике для ввода -3 -6 -4 -5 указан ответ «нет», но правильно «да»: наименьшая температура −6, а −6 ниже −5, значит условие выполнено.

Ответ: проверка min(a, b, c) < t; для -8 -10 -6 -5 выведет «да».

Домашнее задание

№ 13 · «Домашнее задание»

Задание. По значениям переменных x и y определи, истинно выражение или ложно: 1) x = 74; y = 14, выражение x == y; 2) x = 0; y = 0, x != y; 3) x = 590; y = 590, x > y; 4) x = 243; y = 243, x < y; 5) x = 740; y = 740, x >= y; 6) x = 29; y = 30, x <= y.

Как думать. Подставь числа и скажи: «верно ли это?». Равенства со знаком > или < на одинаковых числах всегда ложны, а с >= и <= — истинны.

Решение.

Данные Выражение Результат
x = 74; y = 14 x == y ложь: 74 не равно 14
x = 0; y = 0 x != y ложь: числа равны
x = 590; y = 590 x > y ложь: числа равны
x = 243; y = 243 x < y ложь: числа равны
x = 740; y = 740 x >= y истина: равны, а «больше или равно» это допускает
x = 29; y = 30 x <= y истина: 29 меньше 30

Проверить можно в IDLE: print(74 == 14) выведет False.

Ответ: ложь, ложь, ложь, ложь, истина, истина.

Шпаргалка

Термины: алгоритм ветвления, условие, логическое выражение, оператор сравнения, краткая форма, полная форма, граничный тест.

Мини-тест

← 4.2. Функции для работы с файлами · 4.5. Программирование вложенных условий →