"Информатика. (в 2 частях)", Поляков К.Ю., Еремин Е.А.
Алгоритм — это точное описание действий, с помощью которых решают задачу и получают результат. Его выполняет исполнитель: человек, устройство или программа, способные понимать команды и действовать в своей среде. У каждого исполнителя есть собственная система команд, поэтому алгоритм нужно записывать так, чтобы все его шаги были понятными и выполнимыми. Разберёмся, как связаны задача, алгоритм и исполнитель и что проверять перед выполнением.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Алгоритм — точное и понятное исполнителю описание последовательности действий, приводящей к решению задачи. Сама задача сообщает, что требуется получить, но не объясняет, как это сделать. Алгоритм задаёт путь от исходных данных к результату.
Исполнитель алгоритма — человек, устройство или программа, способные выполнять заданные команды. Исполнитель действует в определённой среде: например, человек — в комнате, а робот — на поле с клетками и препятствиями. Это понятие помогает заранее определить, кто или что будет выполнять каждый шаг.
Система команд исполнителя — набор команд, которые конкретный исполнитель умеет выполнять. У человека, компьютера и робота эти наборы разные, потому что их возможности не совпадают. Зная систему команд, можно составить алгоритм, который исполнитель действительно поймёт.
Допустимая команда — команда из системы команд исполнителя, которую можно выполнить в текущей ситуации. Неизвестная команда исполнителю непонятна, а известная может оказаться невыполнимой, например из-за препятствия. Проверка допустимости помогает заметить такой шаг до того, как он нарушит выполнение алгоритма.
Алгоритм описывает не только цель, но и порядок действий, потому что исполнитель должен понимать, что делать сначала и что — потом. Если написать лишь «получи ответ», исполнитель не узнает, какие операции нужны. Каждый шаг должен быть сформулирован так, чтобы его можно было выполнить без догадок.
Алгоритм пригоден для исполнения, если его команды точны, а действия идут последовательно. Это нужно, чтобы не возникало разных толкований и чтобы результат зависел от заданных шагов, а не от случайного выбора исполнителя. Кроме того, выполнение должно завершиться за конечное число шагов и привести к результату: бесконечный процесс не решит задачу.
Исполнитель может выполнить только команды из своей системы, а среда влияет на то, получится ли выполнить их сейчас. Например, компьютер умеет складывать числа, а робот — двигаться по полю, но эти действия не взаимозаменяемы. Поэтому один и тот же алгоритм подходит разным исполнителям только тогда, когда каждый способен понять и выполнить его шаги.
Алгоритм можно записать словами, перечислить нумерованными шагами или показать схемой. Разные формы помогают по-разному представить действия, но смысл должен оставаться однозначным. Если исполнитель не понимает обозначение или не умеет читать схему, такое представление ему не подходит.
Выполняя алгоритм, исполнитель проходит команды в заданном порядке и проверяет, можно ли применить каждую из них. Неизвестная команда не сообщает, какое действие требуется, а неверный шаг может оказаться невозможным в текущей среде. Чтобы получить результат, нужно заменить такой шаг понятной допустимой командой или последовательностью команд.
| Исполнитель | Среда | Примеры команд | Что важно учитывать |
|---|---|---|---|
| Человек | Комната, улица, рабочее место | Прочитай, запиши, сложи | Команды должны быть понятны человеку и выполнимы в данной обстановке |
| Компьютер | Компьютерная система, программа | Ввести данные, сложить числа, вывести результат | Команды задаются в понятной компьютеру форме и соответствуют его возможностям |
| Робот или черепаха | Поле, клетчатая поверхность, пространство с препятствиями | Вперёд, поверни, нарисуй | Нужно учитывать положение, направление и препятствия |
| Зависимость выполнения команды от системы команд и среды | Определяется ситуацией, в которой действует исполнитель | Только команды, известные исполнителю | Проверяют и знание команды, и возможность выполнить её сейчас |
Сравнивайте строки таблицы, чтобы увидеть, как среда и возможности исполнителя ограничивают набор команд. При составлении алгоритма сначала выберите исполнителя, а затем убедитесь, что каждый шаг подходит ему и его ситуации.
Условие. Нужно составить последовательность действий, чтобы найти сумму двух введённых чисел. Сначала определим, какие данные нужны: два числа, которые вводит пользователь. Результатом будет одно число — их сумма.
Порядок важен: пока числа не введены, складывать нечего, а вывести результат можно только после вычисления. Запись «найти сумму» была бы целью, а не готовым алгоритмом, потому что в ней не указаны нужные действия. Ответ: ввод a, ввод b, вычисление s = a + b, вывод s.
Условие. Робот стоит в клетке поля и должен дойти до отмеченной клетки, обходя препятствие. Точное расположение клеток в условии не указано, поэтому нельзя выбрать единственную последовательность поворотов и шагов. Составим пример для ситуации: цель находится на две клетки вправо и на одну клетку выше, а одна клетка на прямом пути закрыта препятствием.
Каждое движение меняет положение робота, поэтому следующий шаг выбирают с учётом новой клетки и направления. Если у робота нет команды поворота или движения, её нельзя использовать: нужно подобрать маршрут с командами из его системы. Ответ: алгоритм состоит из доступных поворотов и шагов по свободным клеткам; точную запись определяют по расположению препятствия и цели.
Условие. В алгоритме для исполнителя встречается команда, которой нет в его системе команд. Нужно определить, сможет ли он выполнить алгоритм, и исправить запись. Для примера пусть робот знает команды «вперёд» и «поверни», но в алгоритме ему велено «перепрыгни препятствие».
Исполнитель не сможет выполнить первоначальную запись, потому что не знает, какое действие скрывается за словом «перепрыгни». Замена должна не просто звучать понятно, а соответствовать доступным командам и свободному пути. Ответ: алгоритм в исходном виде невыполним; его исправляют допустимой последовательностью команд, если среда позволяет обойти препятствие.
Считать, что любой исполнитель может выполнить любую команду, — ошибка: возможности задаются системой команд. Её допускают, когда мысленно приписывают устройству человеческие умения. Проверьте себя: сравните каждый шаг алгоритма с командами конкретного исполнителя.
Запись «сделай как надо» расплывчата, потому что не указывает однозначное действие. Так пишут, когда считают цель понятной без объяснения шагов, но исполнитель не обязан угадывать замысел. Проверьте формулировку: сможет ли другой человек выполнить её одинаково, не задавая вопросов?
Путать алгоритм с целью или результатом задачи — значит пропустить способ решения. Например, фраза «получить сумму» сообщает, что нужно получить, но не перечисляет действия. Проверьте себя: в записи должны быть шаги, которые ведут от исходных данных к результату.
Не учитывать среду и положение исполнителя — значит предполагать, что любая известная команда выполнима везде. Ошибка возникает, если рассматривать команду отдельно от ситуации: робот не пройдёт сквозь стену. Перед каждым шагом проверьте, разрешает ли система команд его выполнить и свободен ли путь сейчас.
Чтобы разбираться в алгоритмах, нужно понимать, что такое задача, исходные данные и результат её решения: алгоритм связывает данные с нужным результатом. Эти понятия помогут отличать цель от последовательности действий и выбирать необходимые шаги. Позже понятия алгоритма и исполнителя пригодятся при изучении способов записи алгоритмов, программирования и работы с роботами.
Может ли один и тот же алгоритм быть выполнен разными исполнителями?
Может, если каждый исполнитель понимает все команды алгоритма и способен выполнить их в своей среде. Иногда для другого исполнителя алгоритм приходится записать иначе, сохранив порядок действий и результат.
Почему исполнитель не может выполнить команду, которой нет в его системе команд?
Исполнитель умеет выполнять только команды, которые входят в его систему команд. Неизвестная команда не задаёт ему понятного действия, поэтому её нужно заменить командами, которые он понимает.
Чем алгоритм отличается от задачи?
Задача описывает, что требуется получить, а алгоритм — как этого добиться. Например, найти сумму чисел — задача, а ввод чисел, их сложение и вывод результата — шаги алгоритма.
Может ли команда быть допустимой, но невыполнимой в конкретной ситуации?
Да. Например, команда «шаг вперёд» может входить в систему команд робота, но быть невыполнимой, если перед ним стена. Поэтому проверяют не только команду, но и положение исполнителя.
Зачем учитывать среду, в которой действует исполнитель?
Среда — это то, где действует исполнитель и с чем он взаимодействует. Она может ограничивать выполнение команд: робот не пройдёт сквозь препятствие, даже если команда движения ему известна.
§ 29. Алгоритмы и исполнители