3.8. Программирование линейных алгоритмов — Информатика 6 класс, Кадыркулов: разбор и ответы
Ookul.kz · разбор уроков

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

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)

Как думать. Читай построчно и проверяй: все ли скобки закрыты, везде ли стоит знак умножения, совпадают ли имена переменных.

Решение. Ошибки по строкам:

  1. Строка 2: input)) закрывающая скобка вместо пары (). Нужно int(input()).
  2. Строка 4: v: = a * bc двоеточие в присваивании не нужно, bc Python прочтёт как одно имя. Верно: V = a * b * c. Заодно имя V должно совпадать с тем, что в print: в строке 4 буква маленькая, в последней большая, а для Python это разные переменные.
  3. Строка 5: 2 (a * b ...) пропущен * после двойки; ac надо писать a * c. Верно: S = 2 * (a * b + b * c + a * c).
  4. Строка 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) и записываем, как меняются координаты после каждой команды.

Решение.

Алгоритм:

  1. вперёд 30
  2. вправо 20
  3. назад 10
  4. влево 30
  5. назад 10
  6. вправо 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.
  • Монеты считаем от крупных к мелким: // сколько штук, % сколько денег осталось.
  • Перед кодом пиши данные, результат и блоки алгоритма.

Мини-тест

← 3.7. Ввод и вывод чисел · 3.9. Практическая работа →