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

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

5.4. Программирование задач. Практическая работа

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

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

  • Создавать блок-схему алгоритма и по ней писать код на Python.
  • Решать задачи с линейным алгоритмом и с ветвлением.
  • Проверять программу на нескольких тестах, в том числе на граничных.

Разминка

  • Какова разница в структуре линейных и ветвящихся алгоритмов? В линейном все шаги идут подряд, по одному разу. В ветвящемся есть проверка условия, и программа выбирает один из путей.

Разбираемся

Что понадобится

Редактор для Python: IDLE, Thonny или онлайн-интерпретатор. Бумага и ручка для блок-схем. Файлы с диска не нужны: данные для проверки даны в самих задачах.

Как решать любую задачу

💡 Вводить сразу несколько чисел удобно так: a, b = map(int, input().split()). Числа вводятся в одну строку через пробел, как в примерах из задач.

⚠️ Частая ошибка. input() возвращает текст. Пока не превратишь его в число с помощью int() или float(), считать с ним нельзя.

👨‍👩‍👧 Родителю. Эти задачи хорошо решать парой: ребёнок рисует схему и пишет код, а вы задаёте вопросы вроде «а что будет, если ввести ноль?». Пусть сам придумает тест, на котором программа может сломаться.

Проверь себя

  • Чем отличаются линейный и ветвящийся алгоритмы? В ветвящемся есть условие, из которого выходят два пути, а в линейном условий нет.
  • Зачем нужны граничные тесты? Ошибки чаще всего прячутся на границах: на самом маленьком или самом большом допустимом числе, при равенстве и т. п.

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

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

Сначала три задачи на линейный алгоритм, потом пять на ветвление.

№ 1

«Практическая работа», задание 1* «Площадь круга» (линейный алгоритм). Найди сумму площадей двух кругов с радиусами R₁ и R₂. Формулы: S₁ = π · R₁², S₂ = π · R₂². Пример: радиусы 3 и 5 дают 106.76.

Как думать. Пример показывает, какое значение π взято: 3.14 · (9 + 25) = 3.14 · 34 = 106.76. Значит, берём π = 3.14. Алгоритм линейный: ввод, вычисление, вывод.

Решение. Схема: Начало, ввод R1, R2, вычисление S, вывод S, Конец.

R1, R2 = map(float, input().split())   # радиусы (могут быть дробными)
S = 3.14 * R1 ** 2 + 3.14 * R2 ** 2    # сумма площадей двух кругов
print(round(S, 2))                     # до сотых, чтобы не было лишних знаков
Ввод Вычисление Вывод
3 5 3.14 · (9 + 25) 106.76
1 2 3.14 · (1 + 4) 15.7
0 10 3.14 · 100 314.0

Ответ: 3.14 * R1 ** 2 + 3.14 * R2 ** 2; для 3 и 5 получается 106.76.

№ 2

«Практическая работа», задание 2** «Единицы измерения» (линейный алгоритм). Давние казахские меры длины: қарыс (1 қарыс = 21–22 см) и тұтам (1 тұтам = 10 см). Длина S см. Выразить её в қарыс и в тұтам. Пример: 220 даёт 10 22.

Как думать. Из примера видно, что взято 22 см на қарыс: 220 / 22 = 10. Тұтам это 220 / 10 = 22. Берём целое число мер, остаток отбрасываем. Для этого используем деление нацело //.

Решение.

S = int(input())            # длина в сантиметрах
print(S // 22, S // 10)     # сколько қарыс и сколько тұтам, целыми числами
Ввод Вывод
220 10 22
250 11 25
21 0 2

Пояснение к 250: 250 // 22 = 11 (11 · 22 = 242, остаток 8), 250 // 10 = 25.

Ответ: print(S // 22, S // 10); для 220 выводится 10 22.

№ 3

«Практическая работа», задание 3** «Произведение цифр» (линейный алгоритм). Дано пятизначное число. Найди произведение цифры сотен и цифры тысяч. Пример: 49795 даёт 63.

Как думать. Число 49795 это 4 десятка тысяч, 9 тысяч, 7 сотен, 9 десятков и 5 единиц. Нужны 9 (тысячи) и 7 (сотни): 9 · 7 = 63. Чтобы достать цифру разряда, поделим нацело и возьмём остаток от деления на 10.

Решение.

N = int(input())           # пятизначное число
h = N // 100 % 10          # цифра сотен
t = N // 1000 % 10         # цифра тысяч
print(h * t)               # произведение
Ввод Сотни Тысячи Вывод
49795 7 9 63
12345 3 2 6
10000 0 0 0

Ответ: N // 100 % 10 * (N // 1000 % 10); для 49795 это 63.

№ 4

«Практическая работа», задание 4** «Парты» (ветвление). Школа заказывает двухместные парты для трёх кабинетов. В кабинетах N, P и K учеников. Найди наименьшее число парт, которое надо заказать. Пример: 21 27 30 даёт 40.

Как думать. За одной партой двое. Если в классе чётное число учеников, парт ровно N / 2. Если нечётное, то одному ученику парта достанется «в одиночку»: нужна ещё одна. Считаем каждый класс отдельно.

Решение. Для каждого класса: если число учеников чётное, парт N // 2, иначе N // 2 + 1.

N, P, K = map(int, input().split())   # ученики в трёх кабинетах
total = 0
for x in (N, P, K):                   # проходим по трём числам
    if x % 2 == 0:
        total += x // 2               # чётное: ровно x / 2 парт
    else:
        total += x // 2 + 1           # нечётное: ещё одна парта
print(total)

Для 21 27 30: 21 даёт 11, 27 даёт 14, 30 даёт 15, всего 40.

💡 Цикл for ты ещё не проходил, но здесь он просто три раза повторяет одну и ту же проверку. Без него можно писать три одинаковых блока if / else, результат будет тем же.

Ввод Парты Вывод
21 27 30 11 + 14 + 15 40
20 20 20 10 + 10 + 10 30
1 1 1 1 + 1 + 1 3

Ответ: для 21, 27, 30 нужно 40 парт.

№ 5

«Практическая работа», задание 5*** «Перемена между уроками» (ветвление). Уроки начинаются в 9:00, урок длится 40 минут. После нечётных уроков (1, 3, 5, 7) перемена 5 минут, после чётных (2, 4, 6, 8) перемена 10 минут. По номеру урока (от 1 до 8) вывести время окончания урока. Пример: 3 даёт 11:15.

Как думать. Это ⭐ повышенной сложности. Разобьём день на пары уроков. Пара «нечётный + чётный» вместе с двумя переменами занимает 40 + 5 + 40 + 10 = 95 минут. Дальше смотрим, чётный или нечётный номер у урока.

Решение.

n = int(input())               # номер урока, от 1 до 8
pairs = n // 2                 # сколько полных пар уроков до этого
if n % 2 == 1:
    total = pairs * 95 + 40    # нечётный урок: последняя перемена ещё не нужна
else:
    total = pairs * 95 - 10    # чётный: убираем перемену после последнего урока
h = 9 + total // 60            # часы
m = total % 60                 # минуты
print(f"{h}:{m:02d}")          # минуты всегда двумя цифрами
Ввод Минут от 9:00 Вывод
1 40 9:40
2 85 10:25
3 135 11:15
4 180 12:00
8 370 15:10

⚠️ Частая ошибка. Если вывести минуты просто как m, то вместо 12:00 получится 12:0. Формат {m:02d} добавляет ведущий ноль.

Ответ: программа выше; для 3 выводится 11:15.

№ 6

«Практическая работа», задание 6*** «Нумерация страниц» (ветвление). В книге «Великий Абай» N страниц (N не больше 1300). Сколько цифр нужно, чтобы пронумеровать все страницы? Примеры: 9 даёт 9, 20 даёт 31.

Как думать. Это ⭐ повышенной сложности. Страницы 1–9 по одной цифре (9 цифр), 10–99 по две (всего 180), 100–999 по три (всего 2700), от 1000 по четыре. Поэтому всё зависит от того, в какой «зоне» находится N.

Решение.

N = int(input())                 # число страниц
if N <= 9:
    digits = N                   # все страницы однозначные
elif N <= 99:
    digits = 9 + 2 * (N - 9)     # 9 однозначных + двузначные
elif N <= 999:
    digits = 189 + 3 * (N - 99)  # 9 + 180 = 189 цифр на страницы 1–99
else:
    digits = 2889 + 4 * (N - 999)  # 189 + 2700 = 2889 цифр на страницы 1–999
print(digits)
Ввод Зона Вывод
9 до 9 9
20 до 99 31
99 граница 189
100 от 100 192
1300 от 1000 4093

Ответ: программа выше; для 9 выводится 9, для 20 выводится 31, для 1300 выводится 4093.

№ 7

«Практическая работа», задание 7* «Определение количества разрядов числа». Дано число X от 1 до 9999. Найди, сколько в нём разрядов (цифр). Пример: 8596 даёт 4.

Как думать. Если X меньше 10, то одна цифра. Если меньше 100, то две. Если меньше 1000, то три. Иначе четыре.

Решение.

X = int(input())
if X < 10:
    print(1)
elif X < 100:
    print(2)
elif X < 1000:
    print(3)
else:
    print(4)
Ввод Вывод
8596 4
7 1
10 2
999 3
9999 4

Ответ: программа выше; для 8596 выводится 4.

№ 8

«Практическая работа», задание 8** «Целое число». Дано число N (N не больше 1000). Если оно целое, вывести 1, если дробное, вывести 0. Пример: 4.5 даёт 0.

Как думать. Число целое, если оно равно своей целой части. int(N) отбрасывает дробную часть: для 4.5 получится 4, а 4.5 не равно 4. Значит, число дробное.

Решение.

N = float(input())       # вводим как дробное число
if N == int(N):          # равно своей целой части?
    print(1)             # целое
else:
    print(0)             # дробное
Ввод int(N) Вывод
4.5 4 0
7 7 1
7.0 7 1
0.5 0 0
1000 1000 1

Число 7.0 мы считаем целым, потому что оно равно 7.

Ответ: программа выше; для 4.5 выводится 0.

Шпаргалка

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

Мини-тест

← 5.3. Программирование алгоритма · 5.5. Тестирование программы →