Алгоритмическая конструкция «следование». Линейные алгоритмы - Урок информатики для 8 класса
📚 Информатика 8 класс

Алгоритмическая конструкция «следование». Линейные алгоритмы

Привет! Сегодня мы разберём самый простой и понятный тип алгоритмов — линейные. Это те, где каждое действие идёт строго одно за другим, как шаги в рецепте или инструкции. Готов узнать, как они работают и почему их не всегда хватает для решения реальных задач? Поехали!

Линейный алгоритм — как путь по ступенькам: шаг за шагом, никуда не сворачивая

Начнём с главного

В жизни ты постоянно сталкиваешься с алгоритмами. Утренний подъём? Алгоритм. Заварить чай? Алгоритм. Запустить любимую игру? Тоже алгоритм. И все эти алгоритмы можно записать разными способами. Сегодня разберём самый базовый — следование.

📖 Ключевые слова

  • Следование — последовательное выполнение действий
  • Линейный алгоритм — алгоритм, состоящий только из последовательных шагов
  • Синтаксическая ошибка — неправильное написание команды
  • Логическая ошибка — программа работает, но даёт неверный результат

💡 Интересный факт

Эти три основные алгоритмические конструкции (следование, ветвление, повторение) выдвинул и доказал нидерландский учёный Эдсгер Вибе Дейкстра (1930–2002) в 70-х годах прошлого века. Его идеи оказали огромное влияние на развитие компьютерной индустрии.

3.4.1. Следование — что это такое?

Давайте разберёмся, что же такое конструкция «следование» и почему она так важна.

💡 Определение

Следование — алгоритмическая конструкция, отображающая естественный, последовательный порядок действий. Алгоритмы, в которых используется только конструкция «следование», называются линейными алгоритмами.

Схема следования: действие 1 → действие 2 → действие 3

Схема следования: действие 1 → действие 2 → действие 3

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

Пример 1: Готовим отвар из шиповника

Линейный алгоритм приготовления отвара шиповника — классический пример последовательных действий:

📝 Алгоритм приготовления отвара шиповника

Начало
  1. Столовую ложку сушёных плодов шиповника измельчить в ступке
  2. Положить в кастрюлю
  3. Залить стаканом кипятка
  4. Кипятить 10 минут на слабом огне
  5. Охладить
  6. Процедить
Конец

🤔 Обрати внимание!

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

Пример 2: Алгоритм с переменными

Теперь давай посмотрим на более «компьютерный» пример — фрагмент линейного алгоритма с переменными:

💻 Фрагмент линейного алгоритма

x := 2
y := x * x
y := y * y
x := y * x
s := x + y

Это запись на псевдокоде (упрощённом языке программирования). Здесь символ := означает «присвоить значение».

Давай выясним, какие значения получит переменная s после выполнения этого фрагмента. Для этого составим таблицу значений переменных, задействованных в алгоритме:

Шаг алгоритма x y s
1 2
2 2 4
3 2 16
4 32 16
5 32 16 48

💡 Важно понимать

Составленная нами таблица моделирует работу исполнителя этого алгоритма. Такой процесс называется трассировкой алгоритма.

Компьютер выполняет команды шаг за шагом, сохраняя результаты в переменных

Компьютер выполняет команды шаг за шагом, сохраняя результаты в переменных

Пример 3: Операции деления

Некоторый исполнитель может выполнять операции с целыми числами: сложение, вычитание, умножение и деление. Ещё две важные операции:

➗ Операция div

Вычисляет неполное частное (целая часть от деления)

5 div 2 = 2

пять разделить нацело на два — два

📐 Операция mod

Вычисляет остаток от деления

5 mod 2 = 1

остаток от деления пяти на два — один

💰 Практический пример: Кассир выдаёт сдачу

Покажем, как с помощью этих операций можно реализовать алгоритм работы кассира, выдающего покупателю сдачу (s) наименьшим количеством банкнот по 1000, 500, 100 и 50 рублей:

k1000 := s div 1000
s := s mod 1000
k500 := s div 500
s := s mod 500
k100 := s div 100
s := s mod 100
k50 := s div 50

Как это работает? Представь, сдача — 1864 рубля:

  • Сначала выделяем максимум тысячных купюр: 1864 div 1000 = 1 (одна купюра), остаток 1864 mod 1000 = 864
  • Потом пятисотки из 864: получается одна, остаток 364
  • Потом сотни: три штуки, остаток 64
  • И наконец, пятидесятки: одна штука, остаток 14 (который мелочью и отдадут)

Пример 4: Исполнитель Альфа

Рассмотрим интересную задачу с исполнителем, у которого всего две команды:

🤖 Условие задачи

У исполнителя Альфа есть две команды, которым присвоены номера:

  1. прибавь 2
  2. умножь на а (а — неизвестное натуральное число)

Выполняя первую команду, Альфа увеличивает число на экране на 2. Выполняя вторую, умножает это число на а.

Программа для исполнителя Альфа — это последовательность номеров команд. Известно, что программа 11211 переводит число 4 в число 100.

Необходимо определить значение а.

✅ Решение

Шаг 1. Запишем последовательность действий по преобразованию исходного числа 4 в соответствии с заданным алгоритмом:

(4 + 2 + 2) · а + 2 + 2 = 100

Шаг 2. Выполним преобразование левой части выражения:

8 · а + 4 = 100

Шаг 3. Решим линейное уравнение:

8 · а = 96
а = 12

Ответ: а = 12

Исполнитель Альфа выполняет команды строго по порядку

Исполнитель Альфа выполняет команды строго по порядку

3.4.2. Ограниченность линейных алгоритмов

Давайте разберёмся, почему линейных алгоритмов не всегда достаточно для решения реальных задач.

🤖 Пример 5: Робот-художник

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

Запишем линейный алгоритм, исполняя который Робот нарисует на клетчатом поле следующий узор и вернётся в исходное положение:

алг узор
нач
    закрасить
    вправо
    вправо
    закрасить
    вниз
    влево
    закрасить
    влево
    вверх
кон

⚠️ Проблема!

А теперь подумайте: что произойдёт, если Робот приступит к выполнению этой же программы в обстановке, в которой между двумя клетками есть стена?

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

Робот не может отклониться от программы, даже если встретит препятствие

Робот не может отклониться от программы, даже если встретит препятствие

💡 Главный вывод об ограниченности линейных алгоритмов

Рассмотренный пример демонстрирует особенность линейных алгоритмов, состоящую в том, что их исполнитель не может уклониться от выполнения ни одной из последовательно идущих команд, даже если очевидно, что очередное действие бессмысленно. Однако исполнитель всё равно попытается его выполнить, потому что «не умеет» различать такие ситуации.

Практически любая задача, возникающая в жизни, предполагает ситуации, когда выбор действия зависит от тех или иных условий и не может быть жёстко предопределён заранее. По этой причине исключительно линейные алгоритмы находят весьма ограниченное применение.

3.4.3. Ошибки в алгоритмах

Давайте разберёмся, какие бывают ошибки при создании алгоритмов и как их исправлять.

📝 Синтаксические ошибки

Это ошибки в написании команд. Если вы, например, вместо команды влево введёте злева или в лево, то на экране увидите сообщение об ошибке.

Хорошая новость: такие ошибки легко устранить — достаточно внимательно отследить все сообщения, появляющиеся на экране, и внести исправления.

🐛 Логические ошибки

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

  1. При выполнении алгоритма может возникнуть отказ, если исполнитель не может выполнить некоторую команду
  2. Алгоритм может быть завершён, но результат его работы не будет соответствовать поставленной задаче
Синтаксические ошибки компьютер находит сам и подсказывает, где исправить

Синтаксические ошибки компьютер находит сам и подсказывает, где исправить

🔧 Отладка программы

Все ошибки исправляются в процессе отладки программы. Это важный этап создания любого алгоритма или программы.

📌 Самое главное

Давайте подведём итоги всего, что мы узнали о линейных алгоритмах:

Для записи любого алгоритма достаточно трёх основных алгоритмических конструкций: следования, ветвления, повторения
Следование — алгоритмическая конструкция, отображающая естественный, последовательный порядок действий
Алгоритмы, в которых используется только структура «следование», называются линейными
Практически любая задача предполагает ситуации, когда выбор действия зависит от условий. По этой причине исключительно линейные алгоритмы находят ограниченное применение

🤔 Проверь себя

Давайте проверим, как хорошо ты усвоил материал!

1. Можешь назвать главное отличие линейных алгоритмов? Зависит ли в линейном алгоритме последовательность выполняемых действий от исходных данных?

Подсказка: Вспомни, может ли линейный алгоритм «принимать решения» в зависимости от ситуации?

2. Придумай свой пример линейного алгоритма из повседневной жизни, из литературного произведения или из любой предметной области, изучаемой в школе

Варианты:

  • Из повседневной жизни (например, как сделать бутерброд?)
  • Из литературного произведения (может, из сказки или рассказа?)
  • Из любой предметной области (химия, физика, география?)
3. Задачка про Робота: Запиши линейный алгоритм, исполняя который Робот нарисует узор на клетчатом поле и вернётся в исходное положение

Робот стоит в левом верхнем углу поля 5×5. Придумай свой узор и составь для него алгоритм!

4. Восстанови формулу вычисления y для произвольного значения x по алгоритму
a1 := 1 / x
a2 := a1 / x
a3 := a2 / x
a4 := a3 / x
y := a1 + a2
y := y + a3
y := y + a4

Подсказка: Попробуй выразить каждую переменную через x и упростить.

5. Какое значение получит переменная y после выполнения следующего алгоритма? Восстанови формулу вычисления y для произвольного значения x
x := 1
y := 2 * x
y := y + 3
y := y * x
y := y + 4
y := y * x
y := y + 5
6. Задача про время: Для заданного количества суток (tfh) требуется определить количество часов (h), минут (m) и секунд (c). Составь соответствующий линейный алгоритм

Подсказка: Вспомни, сколько часов в сутках, минут в часе, секунд в минуте.

7. Переводим расстояние: Составь линейный алгоритм перевода расстояния X миль в километры

Дано:

  • 1 миля = 1,5 версты
  • 1 верста = 500 саженей
  • 1 сажень = 3 аршина
  • 1 аршин = 28 дюймов
  • 1 дюйм = 25,4 мм
8. Разложи число: Исходное данное — целое трёхзначное число x. Выполни для x = 125 следующий алгоритм. Какой смысл имеет результат s?
a := x div 100
b := x mod 100 div 10
c := x mod 10
s := a + b + c
9. Найди значения переменных x и y после выполнения алгоритма
x := 336
y := 8
x := x div y
y := x mod y
10. Снова задача про Альфу: Определи значение a, если программа 12211 переводит число 4 в число 100

Команды исполнителя Альфа:

  1. прибавь 2
  2. умножь на а (а — неизвестное натуральное число)

Программа для исполнителя Альфа — это последовательность номеров команд.

Теперь ты знаешь всё о линейных алгоритмах!

Теперь ты знаешь всё о линейных алгоритмах!

🚀 Отличная работа! Теперь ты знаешь, что такое линейные алгоритмы, как они работают и почему их не всегда хватает для решения реальных задач. В следующих уроках мы узнаем про ветвления и циклы — те самые конструкции, которые сделают твои алгоритмы по-настоящему умными и гибкими!

Информатика — твой билет в цифровое будущее