Исполнителем алгоритма не может быть медсестра компьютер
Тест проводится после изучения материала «Управление и алгоритмы».
1. Алгоритмом можно считать:
1) описание выполнения кулинарного блюда
2) таблица успеваемости
3) правила техники безопасности
2. Алгоритмом называется …
1) нумерованный список команд исполнителя
2) система команд исполнителя
3) конечная последовательность шагов в решении задачи, приводящая от исходных данных к требуемому результату
3. Алгоритм может быть записан в виде:
1) словесной записи
2) символьной записи
3) последовательности нулей и единиц
4. С помощью одного алгоритма можно решать несколько однотипных задач. Это свойство алгоритма называется…
1) формальность
2) понятность
3) массовость
5. Исполнение алгоритма должно завершиться за конечное число шагов. Это свойство алгоритма называется…
1) точность
2) результативность
3) понятность
6. Исполнителем алгоритмов может быть…
1) компьютер
2) человек
3) исполнитель
7. Блок-схема – форма записи алгоритмов, при которой для обозначения различных шагов алгоритма используются ….
1) рисунки
2) геометрические фигуры
3) формулы
8. Геометрическая фигура прямоугольник используется в блок-схемах для обозначения …
1) начала или конца алгоритма
2) ввода или вывода
3) выполнения действия
9. Геометрическая фигура ромб используется в блок-схемах для обозначения …
1) начала или конца алгоритма
2) ввода или вывода
3) принятия решения (условие)
10. Алгоритм, в котором команды выполняются последовательно друг за другом, называется
1) циклическим
2) линейным
3) повторение
11. Алгоритм ветвления – это алгоритм в котором:
1) выполняется многократное повторение одних и тех же действий
2) ход выполнения алгоритма зависит от истинности тех или иных условий
3) команды выполняются в порядке естественного следования друг за другом
12. Для многократного выполнения одинаковых действий в алгоритме нужно использовать
1) ветвление
2) цикл
3) линейные команды
1. описание выполнения кулинарного блюда
2. конечная последовательность шагов в решении задачи, приводящая от исходных данных к требуемому результату
3. словесной записи
4. массовость
5. результативность
6. исполнитель
7. геометрические фигуры
8. выполнения действия
9. принятия решения (условие)
10. линейным
11. ход выполнения алгоритма зависит от истинности тех или иных условий
12. цикл
Раздел "Алгоритмизация и программирование"
- Алгоритм ветвления обязательно содержит условие, которое может выполниться или не выполниться.
- В алгоритме ветвления направление решения задачи не зависит от выполнения или невыполнения условия.
- В линейном алгоритме последовательность команд выполняется многократно.
- Линейный алгоритм является частным случаем алгоритма ветвления.
- При составлении сложного условия используются логические операции.
- Цикл-пока нельзя организовать с использованием структуры ветвления.
- Число повторений для цикла-для нельзя вычислить заранее.
- Тело цикла не может содержать ветвление.
- Параметр цикла может принимать только положительное значение.
- Шаг в цикле обязательно должен принимать целое значение.
- В цикле начальное значение параметра всегда должно быть меньше конечного.
- Любая последовательность действий является алгоритмом.
- Строгая последовательность конечного числа действий является алгоритмом.
- Алгоритм должен обязательно выполняться за конкретное (определенное) число шагов.
- Форма представления алгоритма не зависит от исполнителя.
- Процессор является формальным исполнителем алгоритма.
- Для любых задач можно разработать алгоритм.
- Графический способ представления алгоритма используется для исполнителя-человека.
- Словесный способ представления алгоритма более нагляден по сравнению с графической формой.
- Алгоритмизация — обязательный этап для решения задачи с использованием компьютера.
- Алгоритм разрабатывается с учетом системы команд исполнителя.
- Исполнитель алгоритма выполняет только те команды, которые входят в состав его команд.
- Свойство "дискретность" указывает на возможность разбиения алгоритма на отдельные шаги.
- Дискретность является необязательным свойством алгоритма.
- Свойство "результативность" указывает на получение результата за конечное число шагов.
- Цикл — многократное повторение одних и тех же действий.
- Программа — способ описания алгоритма для исполнителя-компьютера.
- Свойство "детерминированность" определяет строгую последовательность команд.
- "Детерминированность" является необязательным свойством.
- "Массовость" является желательным свойством алгоритма.
- Алгоритмом является.
- последовательность команд, которую может выполнить исполнитель, строгое исполнение которых приведет к решению поставленной задачи за конкретное число шагов.
- система команд исполнителя
- математическая модель
- информационная модель
- Алгоритмическая структура какого типа изображена на блок-схеме?
- цикл
- ветвление
- подпрограмма
- линейная
- Алгоритмическая структура какого типа изображена на блок-схеме?
- цикл
- ветвление
- подпрограмма
- линейная
- Алгоритм какого типа записан на алгоритмическом языке?
- циклический
- вспомогательный
- линейный
- разветвляющийся
- Что изменяет операция присваивания?
- значение переменной
- тип переменной
- имя переменной
- тип алгоритма
- Какой из документов является алгоритмом?
- правила техники безопасности
- инструкция по получению денег в банкомате
- расписание уроков
- список класса
- УСТАНОВИТЕ СООТВЕТСТВИЕ МЕЖДУ ХАРАКТЕРИСТИКОЙ И ВИДОМ АЛГОРИТМА
2) его команды выполняются в порядке их естественного следования друг за другом независимо от каких-либо условий;
B) циклический
- Алгоритм называется линейным, если.
- он составлен так, что его выполнение предполагает многократное повторение одних и тех же действий;
- ход его выполнения зависит от истинности тех или иных условий;
- его команды выполняются в порядке их естественного следования друг за другом независимо от каких-либо условий;
- он представим в табличной форме;
- он включает в себя вспомогательный алгоритм.
- Алгоритм называется циклическим, если.
- он составлен так, что его выполнение предполагает многократное повторение одних и тех же действий;
- ход его выполнения зависит от истинности тех или иных условий;
- его команды выполняются в порядке их естественного следования друг за другом независимо от каких-либо условий;
- он представим в табличной форме;
- он включает в себя вспомогательный алгоритм.
- Алгоритм включает в себя ветвление, если.
- он составлен так, что его выполнение предполагает многократное повторение одних и тех же действий;
- ход его выполнения зависит от истинности тех или иных условий;
- его команды выполняются в порядке их естественного следования друг за другом независимо от каких-либо условий;
- он представим в табличной форме;
- он включает в себя вспомогательный алгоритм.
- Свойство алгоритма, заключающиеся в том, что каждое действие и алгоритм в целом должны иметь возможность завершения, называется
- дискретность;
- детерминированность;
- конечность;
- массовость;
- результативность.
- Свойство алгоритма, заключающиеся в том, что алгоритм должен состоять из конкретных действий, следующих в определенном порядке, называется
- дискретность;
- детерминированность;
- конечность;
- массовость;
- результативность.
- Свойство алгоритма, заключающиеся в отсутствие ошибок, алгоритм должен приводить к правильному результату для всех допустимых входных значениях, называется
- дискретность;
- детерминированность;
- конечность;
- массовость;
- результативность.
- Свойство алгоритма, заключающиеся в том, что один и тот же алгоритм можно использовать с разными исходными данными, называется
- дискретность;
- детерминированность;
- конечность;
- массовость;
- результативность.
- Свойство алгоритма, заключающиеся в том, что любое действие должно быть строго и недвусмысленно определено в каждом случае, называется
- дискретность;
- детерминированность;
- конечность;
- массовость;
- результативность.
- Алгоритм, записанный на «понятном» компьютеру языке программирования, называется
- исполнителем алгоритмов;
- программой;
- листингом;
- текстовкой;
- протоколом алгоритма.
- Система команд исполнителя РОБОТ, «живущего» в прямоугольном лабиринте на клетчатой плоскости:
вверх вниз влево вправо.
При выполнении любой из этих команд РОБОТ перемещается на одну клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →. Четыре команды проверяют истинность условия отсутствия стены у каждой стороны той клетки, где находится РОБОТ:
сверху свободно снизу свободно
слева свободно справа свободно
Цикл ПОКА <условие> команда выполняется, пока условие истинно, иначе происходит переход на следующую строку. Сколько клеток приведенного лабиринта соответствуют требованию, что, выполнив предложенную ниже программу, РОБОТ остановится в той же клетке, с которой он начал движение?
НАЧАЛО
ПОКА <справа свободно> вправо
ПОКА <сверху свободно> вверх
ПОКА <слева свободно> влево
ПОКА <снизу свободно> вниз
КОНЕЦ
- 1
- 0
- 3
- 4
- Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:
1. Прибавь 7
2. Раздели на 4
Выполняя команду номер 1, КАЛЬКУЛЯТОР вычитает из числа на экране 7, а выполняя команду номер 2, делит число на экране на 4. Напишите программу, содержащую не более 5 команд, которая из числа 13 получает число 10. Укажите лишь номера команд.
Например, программа 21211 - это программа:
Раздели на 4
Прибавь 7
Раздели на 4
Прибавь 7
Прибавь 7
которая преобразует число 20 в число 17.
Ответ: 12121
1. прибавь 1
2. прибавь 2
Первая из них увеличивает число на экране на 1, вторая - на 2. Сколько различных чисел можно получить из числа 2 с помощью программы, которая содержит не более 4 команд?
- Исполнитель КАЛЬКУЛЯТОР имеет только две команды, которым присвоены номера:
Выполняя команду номер 1, КАЛЬКУЛЯТОР прибавляет к числу на экране 1, а выполняя команду номер 2, умножает число на экране на 2. Укажите минимальное число команд, которое должен выполнить исполнитель, чтобы получить из числа 23 число 999.
- Исполнитель КУЗНЕЧИК живёт на числовой оси. Начальное положение КУЗНЕЧИКА - точка 15. Система команд Кузнечика:
- Имеется фрагмент алгоритма, записанный на алгоритмическом языке:
m := 6
b := Извлечь(а, m)
с := Извлечь(а, m-4)
b := Склеить(b, с)
с := Извлечь(а, m+2)
b := Склеить(b, с)
нц для i от 10 до n
с := Извлечь(а, i)
b := Склеить(b, с)
кц
- ‘БЕРЕТ’
- ‘НИТКА’
- ‘ТИБЕТ’
- ‘НЕРКА’
- Имеется фрагмент алгоритма, записанный на алгоритмическом языке:
m := 10
b := Извлечь(а, m)
нц для k от 4 до 5
с := Извлечь(а, k)
b := Склеить(b, с)
кц
нц для k от 1 до 3
с := Извлечь(а, k)
b := Склеить(b, с)
кц
Здесь переменные a, b и с - строкового типа; переменные n, m, k - целые. В алгоритме используются следующие функции:
Извлечь(х,i) - возвращает i-й символ слева в строке х. Имеет строковый тип.
Склеить(х,у) - возвращает строку, в которой записаны подряд сначала все символы строки х, а затем все символы строки у. Имеет строковый тип.
Значения строк записываются в кавычках (одинарных), например x='школа' .
Какое значение примет переменная b после выполнения этого фрагмента алгоритма, если переменная а имела значение 'ИНФОРМАТИКА' ?
Сегодня довольно легко столкнуться с недобросовестными школьными учебниками, в частности с учебниками по информатике. В главах, посвященных алгоритмам, вы можете найти непосредственно определение алгоритма. Не пояснение, о чем идет речь, не рассказ о предмете, а именно определение. Причем выделенное жирным шрифтом, старательно обведенное в рамку и помеченное какой-нибудь заметной пиктограммой в виде восклицательного знака. Обычно приправлено всё это соусом из кучи обязательных и необязательных свойств, образуя в итоге феерический кавардак. Давайте попытаемся понять, что же такое алгоритм, почему мы не может дать ему конкретного определения и выясним, какие свойства являются обязательными, а какие нет.
Составителей учебников легко понять, ведь на самом деле строгого определения алгоритма не существует, и более того, такого определения быть не может. Но вместо попыток объяснить, что к чему, авторы подсовывают бедным ученикам еще одно задание по зубрежке бесполезных и неправильных терминов. Чтобы не быть голословным, приведу выдержку из одного весьма распространенного учебника:
В университетах дела обстоят получше, однако автору этих строк на курсе по математической логике и теории алгоритмов пришлось столкнуться все с тем же винегретом из определения алгоритма и его свойств. Разберемся, что тут не так.
Бесконечность не предел
Но перед этим немного вспомним математику. Из школьного курса математики мы знаем, что чисел существует бесконечно много — какое бы большое число мы не взяли, всегда можно прибавить единицу и получить число еще большее. Обычно в школе этим и ограничиваются. В университете на курсе высшей математики нам расскажут, что бесконечности на самом деле бывают разные: множества, элементы которого можно пронумеровать натуральными числами считаются счётно-бесконечными. К таким множествам относят сами натуральные числа (числу 1 мы дадим номер один, числу 2 номер два и т.д.), целые числа - натуральные плюс ноль и отрицательные целые числа (первый номер отдаем нулю, второй - числу 1, третий - числу -1, то есть каждой положительное число k получает номер 2k, а каждое отрицательное число -m получает номер 2m + 1). К счетно-бесконечным множествам относят четные, нечетные и даже рациональные числа (числа представимые в виде несократимой дроби m/n, где m - целое, n - натуральное). Получается, что натуральных чисел ровно столько же, сколько четных, и, в то же время, ровно столько же, сколько целых. «Количество» (мощность) множества натуральных чисел обозначается символом ℵ0 (алеф-ноль).
Такой же трюк с нумерацией не пройдет для бесконечных непериодических дробей (иррациональных чисел). Допустим такое множество счетное, то есть элементы этого множества можно пронумеровать натуральными числами. Тогда рассмотрим бесконечную десятичную дробь с нулевой целой частью, у которой первая цифра после запятой не равняется цифре на той же позиции у дроби с номером 1, вторая цифра не равняется цифре на второй позиции у дроби с номером 2 и т.д. Тогда полученная дробь будет заведомо отличаться от всех дробей хотя бы одной цифрой. Получается для нее не нашлось номера в нашей бесконечной нумерации! Примененная схема доказательства называется канторовским диагональным методом в честь придумавшего ее математика Георга Кантора.
Про бесконечные дроби
Не стоит делать ошибку, записывая в иррациональные числа все бесконечные дроби. Иррациональными являются только те числа, которые нельзя представить в виде несократимой дроби вида m/n. В десятичной системе счисления дроби 1/3 и 2/7 тоже окажутся бесконечными, однако их «бесконечность" обусловлена выбранной системой счисления. В системе счисления по основанию 21 эти дроби будут иметь конечное представление, а вот, например, дробь 1/2 окажется бесконечной (периодической).
Говорят, что множество бесконечных десятичных дробей имеет мощность континуум, которая обозначается символом ℵ1 (алеф-один). В дальнейшем нам понадобится следующее множество. Рассмотрим некоторый алфавит (конечное множество символов). Теперь представим множество всех конечных цепочек символов алфавита A*. Коль скоро алфавит конечен, и каждая цепочка конечна, то множество таких цепочек счетно (их можно пронумеровать натуральными числами).
На сколько велика бесконечность?
Допустим в наш алфавит вошли все придуманные на земле символы: русский алфавит, японские иероглифы, шумерская клинопись и т.д. Тогда в наше множество войдут все написанные когда-либо книги, все книги, которые будут написаны и все книги, которые никто не стал бы писать (например, хаотичные последовательности символов). Кроме того, представим книгу, толщиной в Солнечную систему и диагональю листа равной диаметру Млечного Пути, набранную 12-м шрифтом. В наше придуманное множество войдут все такие книги, отличающиеся хотя бы одним символов, и не только они, ведь вселенная бесконечна! Кто мешает представить себе книгу, размером в миллиарды световых лет? А все такие книги? Уже на этом этапе воображение может давать сбои, а ведь наше множество всего лишь счетное. Чтобы дополнить множество до континуума, нужно рассмотреть бесконечную книгу, по сравнению с которой, предыдущие книги — детские игрушки. Но и одной бесконечной книги нам не хватит, нужно рассмотреть все бесконечные книги.
Конструктивно оперировать континуальными бесконечностями невозможно. Даже работая со счетными множествами, мы не рассматриваем сами множества, а только говорим, что какой бы не был элемент N, всегда найдется элемент N+1. Если мы ставим себе прикладную задачу, появление в наших рассуждениях континуальной бесконечности должно служить нам «тревожной лампочкой»: осторожно, выход за пределы конструктивного.
Алгоритмы и вычислимость
Суть работы компьютера заключается в проведении некоторого вычисления — преобразования одной порции информации в другую порцию. Причем результатом работы не обязательно должно быть число, главное, чтобы информация была представлена в некоторой объективной форме. Обычно под такой формой имеют в виду конечные цепочки символов некоторого алфавита. Получается, компьютерное вычисление есть некоторая функция в сугубо математическом смысле, с областью определения и значений в рассмотренном выше множестве A*. Именно тут возникают определенные проблемы. Если мы можем вычислить функцию, то можем записать промежуточные вычисления в виде текста. Более того, в виде тексте можно описать вообще правила вычисления. Мы знаем, что множество всех текстов счетное. Однако выясняется, что множество всех функций над натуральными числами имеет мощность континуум. Если мы пронумеруем все тексты, то получается функций вида A* -> A* тоже континуум. Получается, что некоторые функции вычислимы, а некоторые нет.
Компьютер проводит свои вычисления, подчиняясь некоторой программе, которая воплощает собой конструктивную процедуру, или алгоритм. Не сложно догадаться, что алгоритм как раз и есть то правило, по которому вычисляется функция. Можно сказать, функция считается вычислимой, если для нее существует некоторый алгоритм.
Понятия алгоритм и вычислимая функция оказываются настолько заковыристыми, что некоторые составители учебной литературы не утруждают себя попытками разъяснить их суть. Дело в том, что определения алгоритма не существует, и кроме того, существовать не может, иначе пришлось бы выбросить на свалку целый раздел математики — теорию вычислимости. Попробуем разобраться более подробнее.
Частично-рекурсивные функции и тезис Черча
Все началось с того, что математик Давид Гильберт в 1900 году предложил список нерешенных на тот момент математических проблем. Позже выяснилось, что десятая проблема (проблема решения произвольного диофантового уравнения) оказалось неразрешимой, но для доказательства этого факта пришлось составить целую новую математическую теорию. Вопросами того, какие задачи можно конструктивно решить, и что такое конструктивное решение, занялись математики Курт Гедель, Стивен Клини, Алонсо Черч и Алан Тьюринг.
Курт Гедель наиболее известен тем, что сформулировал и доказал 2 теоремы о неполноте. Между прочим, сделал он это в возрасте всего лишь 24 лет.
Как выяснилось выше, континуальные бесконечности не всегда подходят под конструктивные рассуждения, поэтому Гедель и Клини предложили рассматривать только функции натурального аргумента (при необходимости любые функции над счетными множествами можно привести к «натуральным функция» путем замены элементов множеств их номерами). Изучая вычислимость таких функций, Гедель, Клини, Аккерман и другие математики пришли к так называемому классу частично-рекурсивных функций. В качестве определения этого класса рассматривается набор базовых, очень простых функций (константа, увеличение на единицу и проекция, которая сопоставляет функции многих аргументов один из ее аргументов) и операторов, позволяющих из функций строить новые функции (операторы композиции, примитивной рекурсии и минимизации). Слово «частичные» показывает, что эти функции определены лишь на некоторых числах. На остальных они не могут быть вычислены. Попытки расширить класс частично-рекурсивных функций ни к чему не привели, так как введение новых операций приводило к тому, что получалось множество функций, совпадающее с классом частично-рекурсивных. В дальнейшем Алонсо Черч отказался от попыток расширения этого класса, заявив, что, видимо:
Частично-рекурсивные функции соответствуют вычислимым функциям в любом разумном понимании вычислимости.
Это утверждение называют тезисом Черча. Стоит отметить, что тезис Черча не является теоремой или доказанным утверждением. Во-первых, не понятно, что такое «разумное понимание», во-вторых, превратив тезис Черча в доказанный факт, мы лишаем себя перспектив дальнейшего исследования вычислимости и механизмов вычислений. Никто, впрочем, не мешает попробовать определить такой набор операций, который был бы мощнее базиса для частично-рекурсивных функций. Только вот, до сих пор это никому не удавалось сделать.
Ученые долго не могли привести пример частично-рекурсивной функции, не являющейся примитивно-рекурсивной (без оператора минимизации). Наконец это удалось Вильгельму Аккерману. Предложенная функция Аккермана растет так быстро, что количество цифр в десятичной записи числа A(4,4) превосходит количество атомов во Вселенной.
Формальная теория алгоритмов во многом построена аналогично теории вычислимости. Считается, что алгоритм есть некое конструктивное преобразование входного слова (цепочки символов некоторого алфавита) в некоторое выходное слово. Опять же, здесь мы имеем с функциями вида A*->A*. Конечно, предложенное описание не подходит под определение алгоритма, так как неясно, что же такое «конструктивное преобразование». Хоть понятия алгоритма и вычислимой функции близки, не стоит их смешивать. Для одного и того же алгоритма может быть предъявлено сколько угодно его записей на каком-нибудь формальном языке, но соответствующая вычислимая функция всегда одна. Один из основателей формальной теории алгоритмов, Алан Тьюринг, предложил формальную модель автомата, известного как машина Тьюринга. Тезис Тьюринга гласит:
Каково бы не было разумное понимание алгоритма, любой алгоритм, соответствующий такому пониманию, может быть реализован на машине Тьюринга.
Любые попытки построить более мощные автомат заканчивались неудачей: для каждого такого автомата (машина Поста, нормальные алгоритмы Маркова, автоматы с регистрами и несколькими лентами) удавалось построить аналогичную машину Тьюринга. Некоторые ученые объединяют тезис Черча и тезис Тьюринга в тезис Черча-Тьюринга, так как они весьма близки по духу.
С помощью такого незамысловатого автомата можно формализовать любой алгоритм.
Таким образом, определив понятие алгоритма, мы будем вынуждены забыть о тезисе Черча-Тьюринга, и отказаться от целой математической теории, богатой содержанием и подарившую нам множество практических результатов.
Свойства алгоритмов
Мы выяснили, почему у алгоритма не может быть конкретного определения. Однако можно определить свойства, которыми должен обладать каждый алгоритм. К сожалению, в литературе часто смешивают обязательные и необязательный свойств. Разберемся подробнее.
Обязательные свойства
Начнем с обязательных свойств. Алгоритм можно записать в виде конечного текста из символов конечного алфавита. Действительно, бесконечный текст мы не можем записать чисто технически, а раз алгоритмы имеют отношение к конструктивной деятельности, бесконечными они быть не могут. Возможность представить алгоритм в виде конечного текста можно назвать свойством объективности и конечности.
Еще одно достаточно очевидное свойство любого алгоритма — его дискретность. Независимо от исполнителя, исполнение алгоритма представляет собой дискретный процесс, при рассмотрение распадающийся на элементарные действия. Понимать дискретность можно и в том смысле, что любая информация, над которой работает алгоритм может быть представлена в виде текста.
Третье фундаментальное свойство алгоритмов называется детерминированностью. Оно заключается в том, что следовать предписанной процедуре можно только одним способом. Единственное, что может повлиять на ход выполнения — это исходные данные, однако при одних и тех же исходных данных, алгоритм всегда выдает один и тот же результат.
Эти три свойства присущи всем алгоритмам. Если нарушено хотя бы одно из них, перед нами уже не алгоритм. С натяжкой к обязательным свойствам можно добавить понятность для исполнителя, хотя это уже на грани фола. По большей части. это относится не к самому алгоритму, а к его записи.
«Винегрет» из свойств из того же учебника по информатике.
Необязательные свойства
Наряду с обязательными свойствами, алгоритм может обладать некоторыми частными свойствами, которые вовсе не обязательны. Начнем с массовости. Конечно, хочется, чтобы алгоритмы решали классы задач в зависимости от входных данных. Однако существуют алгоритмы, которые вообще не зависят от входных данных, например всем известный вывод на экран «Hello world». Как среди вычислимых функций существуют константные, так и среди алгоритмов существуют генераторы единственного результата.
Теперь рассмотрим широко распространенное убеждение, что алгоритмы должны обладать свойством правильности и завершаемости. Начнем с правильности. Такое свойство попросту невозможно формализовать, так как отсутствуют критерии этой правильности. Наверняка, многие из вас сталкивались с ситуацией, когда программист считает программу правильной, а заказчик нет. С завершаемостью дела обстоят интереснее. Рассмотрим термин «применимость« — алгоритм называется применимым к слову, если, получив на вход это слово, он завершается за конечное число шагов. Самое интересное то, что проблема применимости является алгоритмически неразрешимой, то есть невозможно составить алгоритм, которые определял бы по записи алгоритма и входному слову, завершится ли он за конечное число шагов. Никто не мешает вам составить программу, состоящую только из одного бесконечного цикла. И эта программа все еще будет алгоритмом.
Про зависающие программы
Программы, которые не могут зациклиться, на самом деле входят в класс примитивно-рекурсивных — подмножество частично-рекурсивного класса. Отличает их отсутствия оператора минимизации. Он то и вносит пикантности. Если вы используете «неарифметический цикл» while или рекурсию, для которых нельзя заранее определить, сколько раз они выполняться, то ваша программа сразу переходит из класса примитивно-рекурсивных в класс частично-рекурсивных.
Заключение
Иногда мир устроен несколько сложнее, чем хотелось бы. Существующие формализмы в теории алгоритмов не более чем абстрактные математические системы, наподобие геометрии Евклида или теории вероятности, тогда как понятие вычислимости, возможно, находится вне математики и является свойством нашей Вселенной наряду со скоростью света и законом всемирного тяготения. И хотя, скорее всего, нам так и не удастся ответить на вопрос, что такое алгоритмы и вычислимость, попытки найти ответ на этот вопрос оказались более ценными, чем возможный однозначный ответ.
Материал данной статьи во многом опирается на 1-ый том «Программирование: введение в профессию» А. В. Столярова. Тем, кто хочет подробнее изучить вопросы, связанные с алгоритмами и теорией вычислимости, кроме этой книги, советую Босс В «От Диофанта до Тьюринга» и трехтомник А. Шеня по математической логике и теории алгоритмов.
Дата-центр ITSOFT — размещение и аренда серверов и стоек в двух дата-центрах в Москве. За последние годы UPTIME 100%. Размещение GPU-ферм и ASIC-майнеров, аренда GPU-серверов, лицензии связи, SSL-сертификаты, администрирование серверов и поддержка сайтов.
Детальные инструкции значительно упрощают решение сложных задач для исполнителя. А пошаговые рекомендации позволяют автоматизировать процесс. Каждый такой алгоритм создается для определенного исполнителя. Если им будет маленький ребенок, команды будут одними, если взрослый человек – другими, компьютер или робот – третьими.
Примеры задач из жизни и люди, которые их обычно решают:
- прием ЕГЭ – члены комиссии;
- управление поездом, перевозка пассажиров, груза – машинист;
- написание статей – журналист;
- забота о детях – родители.
Если вопрос касается профессиональной сферы, то работники опираются на должностные и рабочие инструкции, в них описан круг обязанностей и порядок их выполнения. Если же это социальные задачи, люди ориентируются на то, как это делалось в семье их родителей, как это делают другие люди или как описано в литературе.
Виды исполнителей, их особенности
Одной из основных классификаций является деление исполнителей по отношению к тому, как они выполняют. Одушевленных называют неформальными, потому что они понимают, что делают, могут анализировать и даже видоизменять команды при изменении условий. Неодушевленных – формальными исполнителями, так как они строго выполняют команды, механически, не понимая, что делают, не задумываясь над задачей или промежуточными итогами.
Хорошим примером формального исполнителя является любая программируемая система, иногда даже человек, который подходит к выполнению определенных задач бездумно, как робот, не только не волнуясь о результате, и не анализируя происходящее.
Алгоритм пишут, учитывая особенности того, для кого он предназначен. Для некоторых людей сухого набора команд мало, им нужны дополнительные инструменты (изображения, примеры). Инструкция будет разной, если написана она для конкретного Игоря Козакова или для учеников 6-класса. Точно также команды для бездомной собаки Жуля будут одни, а для дрессированных полицейских овчарок – другие.
Характеристики исполнителей
Перед написанием алгоритма следует определиться не только с конечной задачей, но и с особенностями исполнителей. Это позволит использовать правильные слова, а также учесть все факторы, которые могут повлиять на конечный результат.
- круг решаемых задач – существует определенных объем заданий по типу и объему, которые под силу конкретному человеку. Это значит, что нет смысла просить собаку прочесть газету, даже если инструкция будет написана с максимальной детализацией. Также не рационально просить ученого физика спеть рок-оперу. Но всегда есть исключения;
- среда – место, окружение, где исполнитель будет выполнять команды. При написании рабочей инструкции высотнику следует учитывать технику безопасности, правила работы с высотным оборудованием, медицинские аспекты и непосредственно то, что будет делать этот специалист (управлять краном, заниматься отделкой или строительством зданий);
- режим непосредственного выполнения команд исполнителю или программного управления. В первом случае даются простые единичные указания, которые сразу выполняются (например, команда собаке «Сидеть»). Во втором случае задается множество заданий, выполняемых в определенном порядке, с соблюдением условий, указанных в программе/алгоритме (пошаговый рецепт приготовления борща);
- СКИ – любой алгоритм рассчитан на конкретного исполнителя, поэтому написан при помощи понятной ему системы команд (СКИ). В случае с живым существом (человек, собака), это будут слова, которые он понимает. Для неживого (робот, ПК) – строгие команды, и правила оформления, которые нельзя изменять (язык программирования).
СКИ – набор простейших команд, понятных данному исполнителю.
Перспективными исполнителями являются роботы, автоматы и компьютеры. Несмотря на формальность работы, их можно запрограммировать и «научить» очень и очень многому. Даже если это светофор, стиральная машинка, не говоря уже о роботах, космических кораблях, персональных или научных компьютерах.
Особенно удивительно выглядит компьютер, ведь он:
- универсальный – позволяет запрограммировать разные процессы (визуальные, звуковые, текстовые);
- многозадачный – готов рисовать, писать, считать, рассчитывать и транслировать, даже одновременно;
- пользовательский – его интерфейс можно сделать «под пользователя».
Пользователи ПК могут использовать готовые приложения, чтобы задать ту или иную команду своему смартфону, компьютеру или другой умной технике. Или же самостоятельно написать «внутренности», программный код, задавая приложению те характеристики и функции, которые нужны.
Учебная среда Исполнителя
Для того, что сделать мир программирования и алгоритмизации ярким и веселым, были разработаны различные приложения. Существует учебная среда Исполнитель Кумир для учащихся, в которую входят Чертежник, Робот, Редактор и другие.
Различные приложения отличаются интерфейсом и набором команд, но общий принцип у них одинаковый – пользователь учится писать инструкции для компьютерного исполнителя (робот, черепашка, чертежник и другие). Он дает ему команды, изучая программирование от единичных заданий, постепенно переходя от элементарных линейных алгоритмов до циклических с условиями. Обучение проходит в игровой форме, при помощи кнопок. Далее этап написания команд на русском языке. На финальном этапе ученик осваивает СКИ на языке программирования (на английском).
Если ученик/пользователь дает задание исполнителю, которое невозможно выполнить физически (непреодолимое препятствие), математически (деление на ноль) – запускается система отказов.
Сравнительная характеристика основных приложений:
Исполнитель «Черепашка»
При помощи простых команд и красочного интерфейса пользователь легко освоит построение алгоритмов. На первом этапе в игровой форме, используя готовые кнопки и цвета. На следующем уровне уже можно программировать, записывая команды на русском по всем правилам программирования.
Исполнитель «Робот»
На клеточном поле произвольно выставляется робот, который обозначается любым удобным символом (*, Р, ●, ♦, другими). Задания пишутся при помощи системы команд исполнителя Робот.
В этой учебной системе можно самому рисовать стены, выращивать клумбы, задавать маршрут прохождения. Можно закрашивать клетки, даже если они до этого были цветные. Делать это можно при помощи линейных алгоритмов, с разветвлением или с повторением цикличных команд.
Для программирования используются простейшие алгоритмы и элементы программирования (правила написания команд, условия, обязательные символы), которые применяются в большинстве компьютерных языков.
В случае ошибок система выдает отказ. Отказы могут быть в случае неправильного написания элемента программы, противоречивых команд или логических ошибок. Отказ в виде ответа Робота: «Не могу» (пройти через стену), «Не понимаю» (ошибочно написана команда) или результат не тот, что нужен (перепутаны горизонталь и вертикаль).
Составляем алгоритм для Робота
- Нужно заставить робота двигаться вдоль стены, закрашивая клетки, которые он прошел:
- Следует высадить цветы по пути следования робота, но чтобы он не разрушился (не упирался в стены):
Как видно из этого примера, в некоторых случаях команды многократно повторяются. Тогда используют подзадачи и циклы.
Основная программа с именем подзадачи:
Алгоритм Рисунок
Начало
Алгоритм Узор (5 раз);
Конец.
Указав только имя подзадачи в теле программы, пользователь вызывает ее столько раз, сколько указано в скобках. Полный текст вспомогательного алгоритма описывается под основным.
Алгоритм Узор
Начало
конец.
Если не использовать подзадачи, которые повторяются много раз, то размер программы увеличится в десятки раз.
Чтобы выполнить движение, робот может выполнять команды проверки наличия стены на пути: Сверху/снизу/слева/справа свободно?
Используя условие «если», робот проверяет дорогу и только тогда идет:
(Снизу_свободно), то вниз (3)
Или условие «пока» есть куда идти (нет стены сверху), робот будет идти прямо вверх и сажать цветы.
Исполнитель «Чертежник»
Учебная система «Исполнитель Чертежник» используется для рисования графиков, чертежей в системе координат (x;y). Поле поделено на пиксели, в параметрах можно указать размер поля и количество точек по осям.
Перо – инструмент чертежника, его, как настоящее, можно поднимать и опускать на рисовальное поле, перемещать в нужное место, менять цвет и добавлять надпись. Если перо приподнято, то не остается следа, если опущено – за ним тянется линия.
Во время рисования видно труженика Чертежника, который выполняет команды. Но его иконку можно скрыть, тогда будет виден только карандаш.
Начинать работу следует с команды «использовать Чертежник». Писать можно одиночные команды, а можно целые серии. Правила написания программы соответствуют основам большинства компьютерных языков. Это облегчит в будущем изучение программированию, улучшит понимание процесса построения алгоритмов, начиная от линейных и заканчивая циклическими.
На следующем этапе можно перейти к написанию алгоритма на языке Pascal. Процесс построения аналогичен, только команды пишутся на языке программирования (на английском):
uses Drawman;
begin
PenUp;
ToPoint (1, 1);
PenDown;
ToPoint (1, 5);
ToPoint (3, 5);
ToPoint (2, 4);
ToPoint (3, 3);
ToPoint (1, 3);
end.
Освоив построение алгоритмов на родном языке, запомнив правила написания команд, пользователь с легкостью перейдет на задания, написанные на языке программирования.
Вспомогательные алгоритмы или процедуры
Во время работы с учебными исполнителями приходится часто выполнять однотипные команды или серии команд. Намного удобнее создать вспомогательные подзадачи или процедуры. Таким блокам команд присваивается имя и потом не нужно каждый раз повторять ту или иную последовательность операций, достаточно указать имя вспомогательной процедуры.
Читайте также: