3.8. Программирование линейных алгоритмов
Информатика, 6 класс. Учебник: Кадыркулов Р. А., Нурмуханбетова Г. К. (Алматыкітап баспасы, 2023). Раздел 3: Программирование на языке Python. Страницы 97–100.
Чему научишься
- Объяснять, что такое линейный алгоритм, и приводить примеры.
- Записывать решение задачи четырьмя этапами: данные, результат, алгоритм, проверка.
- Читать блок-схему и превращать её в программу на Python.
- Пользоваться
//и%для задач про монеты, цифры и остатки.
Разминка
- Какие виды алгоритмов бывают? Три: линейный, разветвлённый и циклический.
- Какой из них самый простой? Линейный: команды выполняются одна за другой, по порядку, один раз.
- Приведи пример из жизни. Чистка зубов, сборка рюкзака, запуск игры на телефоне: шаг 1, шаг 2, шаг 3, и всё.
- Зачем программе
input()? Чтобы она могла решать задачу для любых данных, а не для одного числа, вписанного в код.
Разбираемся
Линейный алгоритм: без «если» и «повторяй»
В линейном алгоритме нет развилок и повторов. Компьютер идёт сверху вниз и каждую команду выполняет ровно один раз. Как инструкция по заварке лапши: залить, подождать, слить.
📌 Линейный алгоритм: команды выполняются последовательно, по одному разу, и в конце получается результат.
Четыре шага перед тем, как писать код
Опытные программисты не бросаются сразу печатать. Они сначала думают.
💡 Имена переменных программисты называют идентификаторами. Выбирай понятные:
price,count, а неx1q.
Разбираем задачу целиком
Даны целые числа a, b, c и d. Найди произведение последних цифр суммы a и b и разности c и d.
Пример: ввод 15 47 и 98 63. Сумма 15 + 47 = 62, последняя цифра 2. Разность 98 − 63 = 35, последняя цифра 5. Произведение 2 · 5 = 10.
Как получить последнюю цифру? Остаток от деления на 10: 62 % 10 = 2.
Вот алгоритм по блокам. В блок-схеме у каждого действия своя фигура: овал (начало и конец), параллелограмм (ввод и вывод), прямоугольник (вычисления).
| блок | что делаем | код на Python |
|---|---|---|
| Начало | старт алгоритма | |
| Ввод | вводим a, b, c, d | a, b = map(int, input().split(' ')) и c, d = map(int, input().split(' ')) |
| Вычисления | цифры суммы и разности, потом произведение | t = (a + b) % 10, k = (c - d) % 10, n = t * k |
| Вывод | показываем результат | print(n) |
| Конец | финиш |
Полная программа:
a, b = map(int, input().split()) # вводим: 15 47
c, d = map(int, input().split()) # вводим: 98 63
t = (a + b) % 10 # последняя цифра суммы: 2
k = (c - d) % 10 # последняя цифра разности: 5
n = t * k # произведение: 10
print(n) # 10
⚠️ Частая ошибка. Если разность
c - dполучится отрицательной, Python всё равно вернёт неотрицательный остаток:(-12) % 10даёт8, а не2. В этой задаче учебник берёт обычные числа, поэтому всё хорошо, но про такую особенность стоит помнить.
📌 Остаток от деления — это
%, целая часть —//. Вместе они «разбирают» число:477 // 100 = 4сотни,477 % 100 = 77остаток.
Пример про монеты: сколько штук нужно
Есть монеты 1, 5, 10, 50 и 100 тенге. Как заплатить S тенге, взяв меньше всего монет? Берём самые крупные монеты, сколько влезет, потом следующие, и так далее.
Проверь себя
- Какой алгоритм называют линейным? Тот, в котором результат получается при однократном последовательном выполнении команд. Примеры: рецепт, расчёт стоимости покупки.
- Из каких этапов состоит разработка линейной программы? Определяем данные и их типы; определяем результат и его тип; готовим ввод, вычисление и вывод; проверяем программу на разных данных.
- Как вывести результат? Командой
print().
Решаем упражнения
№ 1
(Применяй на практике, «Практическое задание».) Как оплатить S тенге наименьшим количеством монет 1, 5, 10, 50 и 100 тенге? S целое, 0 < S < 100000. Составь блок-схему и программу. Примеры: 477 даёт 10; 340 даёт 7.
Как думать. Чтобы монет было меньше, берём монеты от крупных к мелким. Сколько монет данного номинала влезет, показывает //, сколько денег останется, показывает %.
Решение. Блок-схема из пяти блоков: Начало → ввод S → вычисления (по каждому номиналу) → вывод P → Конец.
S = int(input()) # сумма, например 477
P = 0 # P будет считать монеты
K = S // 100; P += K; S %= 100 # сколько монет по 100, остаток
K = S // 50; P += K; S %= 50 # по 50
K = S // 10; P += K; S %= 10 # по 10
K = S // 5; P += K; S %= 5 # по 5
P += S # остаток платим монетами по 1
print(P) # 477 -> 10
P += K значит «прибавь K к P». Для 340 получится 3 + 0 + 4 + 0 = 7 монет.
📕 В учебнике сказано, что при составлении программы «необходимо использовать оператор инкремент». В Python оператора инкремента (
++) нет. Здесь используется записьP += K: это «сложение с присваиванием». Результат тот же: значение переменной увеличивается.
Ответ: программа выше; 477 тенге это 10 монет, 340 тенге это 7 монет.
№ 2
(Применяй на практике, «Анализ».) Выполни анализ кода из практического задания. Если S = 789, запиши значения переменных после каждого шага.
Как думать. Идём по строкам и ведём «таблицу» из S, K и P, как в тетради.
Решение. Таблица:
| шаг | K | P | S |
|---|---|---|---|
| начало | 0 | 789 | |
| по 100 | 7 | 7 | 89 |
| по 50 | 1 | 8 | 39 |
| по 10 | 3 | 11 | 9 |
| по 5 | 1 | 12 | 4 |
| по 1 | 16 | 4 |
Проверка: 700 + 50 + 30 + 5 + 4 = 789.
Ответ: P = 16 монет.
№ 3
(Применяй на практике, «Синтез».) Найди ошибки в синтаксисе кода. Что вычисляет программа?
a = int(input())
b = int(input))
c = int(input())
v: = a * bc
S = 2 (a * b + b * c + ac)
print (V, , S)
Как думать. Читай построчно и проверяй: все ли скобки закрыты, везде ли стоит знак умножения, совпадают ли имена переменных.
Решение. Ошибки по строкам:
- Строка 2:
input))закрывающая скобка вместо пары(). Нужноint(input()). - Строка 4:
v: = a * bcдвоеточие в присваивании не нужно,bcPython прочтёт как одно имя. Верно:V = a * b * c. Заодно имяVдолжно совпадать с тем, что вprint: в строке 4 буква маленькая, в последней большая, а для Python это разные переменные. - Строка 5:
2 (a * b ...)пропущен*после двойки;acнадо писатьa * c. Верно:S = 2 * (a * b + b * c + a * c). - Строка 6: две запятые подряд. Верно:
print(V, S).
Исправленный код:
a = int(input())
b = int(input())
c = int(input())
V = a * b * c # объём
S = 2 * (a * b + b * c + a * c) # площадь поверхности
print(V, S)
При a = 2, b = 3, c = 4 выведет 24 52.
Ответ: программа вычисляет объём V и площадь поверхности S прямоугольного параллелепипеда (коробки) со сторонами a, b, c.
№ 4
(Применяй на практике, «Оценка».) Оцени значимость линейных алгоритмов в повседневной жизни.
Как думать. Вспомни, сколько всего ты делаешь «по шагам»: утро, готовка, зарядка телефона.
Пример ответа. Линейные алгоритмы окружают нас везде: рецепт блюда, сборка конструктора по инструкции, порядок действий при входе в Wi-Fi. Они важны, потому что из них строятся все остальные алгоритмы. Научившись описывать простые последовательности, ты сможешь добавлять в них условия и повторы.
Ответ: линейные алгоритмы очень значимы: они лежат в основе инструкций и программ, это самый простой и надёжный вид.
№ 5
(Вопросы для размышления, № 1.) Какой алгоритм называют линейным? Приведи примеры.
Как думать. Вспомни слово «последовательно».
Пример ответа. Линейный алгоритм выполняется один раз сверху вниз без условий и повторов. Примеры: рецепт чая, инструкция по сборке стула, программа, которая вводит два числа и выводит их сумму.
Ответ: алгоритм, в котором результат получается при однократном последовательном выполнении команд.
№ 6
(Вопросы для размышления, № 2.) Из каких этапов состоит разработка программы по линейному алгоритму?
Как думать. Вспомни схему из четырёх шагов.
Решение. 1) Определить входные данные и их типы, выбрать имена переменных. 2) Определить результат, его тип и имена. 3) Подготовить ввод, вычисление и вывод. 4) Проверить программу на разных входных данных.
Ответ: данные, результат, алгоритм (ввод, вычисления, вывод), проверка.
№ 7
(Вопросы для размышления, № 3.) Какой из этих этапов наиболее значимый?
Как думать. Единственного «правильного» ответа тут нет, важно объяснить свой выбор.
Пример ответа. Я считаю, что самый важный первый этап: если неправильно понять данные и результат, то и программа решит не ту задачу. Но и без проверки в конце нельзя: она ловит ошибки, которые не заметил сам.
Ответ: мнение с объяснением; чаще всего называют определение данных и результата либо проверку на разных значениях.
№ 8
(Вопросы для размышления, № 4.) Как можно вывести на экран результаты линейной программы?
Как думать. Какая функция выводит данные?
Пример ответа. С помощью print(). Можно вывести одно значение: print(n), несколько через пробел: print(V, S), или с разделителем: print(V, S, sep=' | '). Если нужно, чтобы каждое было на новой строке, используют end='\n' или несколько print.
Ответ: функцией print(), при необходимости с параметрами sep и end.
№ 9
(Задания, № 1 с двумя звёздочками.) Самат прочитал «Остров сокровищ» Стивенсона и нашёл карту клада. От дерева в середине карты: к северу 30 шагов, к востоку 20, к югу 10, к западу 30, к югу 10 и к востоку 50. Составь алгоритм перемещения, используя команды «вправо, влево, вперёд, назад» (например: вперёд 30 м). Нарисуй график пути, если 1 клетка листа равна 10 шагам.
Как думать. Север на карте это «вперёд» (вверх), восток «вправо», юг «назад» (вниз), запад «влево». Начало пути (дерево) считаем точкой (0; 0) и записываем, как меняются координаты после каждой команды.
Решение.
Алгоритм:
- вперёд 30
- вправо 20
- назад 10
- влево 30
- назад 10
- вправо 50
График (1 клетка = 10 шагов): путь начинается в точке (0; 0), потом проходит точки (0; 3), (2; 3), (2; 2), (−1; 2), (−1; 1) и заканчивается в (4; 1).
Можно проверить и программой: она складывает смещения.
x = 0; y = 0 # дерево
y += 30 # вперёд 30
x += 20 # вправо 20
y -= 10 # назад 10
x -= 30 # влево 30
y -= 10 # назад 10
x += 50 # вправо 50
print(x, y) # 40 10
Клад лежит в 40 шагах к востоку и в 10 шагах к северу от дерева.
Ответ: алгоритм из шести команд выше; клад в точке (40; 10) шагов от дерева, на графике это клетка (4; 1).
№ 10
(Задания, № 2 с двумя звёздочками.) Даны строки a, b и c, состоящие только из цифр. 1) Выведи их слитно. 2) Преврати их в целые числа и найди сумму. Пример: ввод 214, 456, 300, вывод 214456300 и 970.
Как думать. Строки можно «склеить» знаком +: '12' + '34' даёт '1234'. Чтобы сложить как числа, их сначала превращают в int.
Решение.
a = input() # 214
b = input() # 456
c = input() # 300
print(a + b + c) # слитно: 214456300
print(int(a) + int(b) + int(c)) # как числа: 970
Ответ: 214456300 и 970.
№ 11
(Домашнее задание.) Для кода найди результат при a = 486 и определи функции программы.
a = int(input())
x = a // 100
y = (a // 10) % 10
z = a % 10
b = x * 100 + z
print(b)
Как думать. Разбери число на цифры: сотни, десятки, единицы.
Решение. a = 486.
x = 486 // 100 = 4: цифра сотен;y = (486 // 10) % 10 = 48 % 10 = 8: цифра десятков;z = 486 % 10 = 6: цифра единиц;b = 4 * 100 + 6 = 406.
Программа раскладывает трёхзначное число на цифры и собирает новое, в котором цифра десятков заменена нулём. Переменная y вычисляется, но в результате не участвует.
Ответ: 406. Программа выделяет цифры трёхзначного числа и обнуляет цифру десятков.
Шпаргалка
- Последняя цифра числа это
n % 10, число без последней цифрыn // 10. - Монеты считаем от крупных к мелким:
//сколько штук,%сколько денег осталось. - Перед кодом пиши данные, результат и блоки алгоритма.