Задачи для машины поста с решениями

Урок по теме: «Составление алгоритмов решения задач для управления машиной Поста»

Онлайн-конференция

«Современная профориентация педагогов
и родителей, перспективы рынка труда
и особенности личности подростка»

Свидетельство и скидка на обучение каждому участнику

Тема «Автоматическая обработка информации. Машина Поста»

повторить пройденный материал по теме: «Автоматическая обработка информации»;

научить работать с имитатором машины Поста

закрепить знания по теме при выполнении практического задания.

формировать аналитическое и логическое мышление учащихся;

развивать умение выделять главное, находить ошибку;

развивать способности сравнивать, сопоставлять.

воспитывать бережное отношение к компьютеру;

формировать умение преодолевать трудности;

способствовать развитию умения оценивать свои возможности.

Вид занятий (тип урока): практическое занятие.

Методы обучения: выполнение практического задания.

Средства обучения: персональные компьютеры, имитатор машины Поста.

1. Организационный момент.

— Здравствуйте! Все готовы к уроку?

— Садитесь. Кто сегодня дежурный? Кто отсутствует на уроке?

2. Актуализация знаний.

Проверка домашнего задания.

3. Сообщение темы и цели урока.

— Сегодня мы с вами поработаем за компьютерами. Прошу занять свои места. И открыть имитатор машины Поста. Сегодня будем разбирать задачи.

4. Практическая работа.

— И так, давайте разберем один пример вместе на доске. А потом вы попробуете порешить задачи самостоятельно. Откройте свои записи в тетради, где записали команды для работы на машине Поста.

Сдвиг каретки на шаг влево и переход к выполнению команды с номером m

Сдвиг каретки на шаг вправо и переход к выполнению команды с номером m

Запись метки в текущую пустую клетку и переход к выполнению команды с номером m

Стирание метки в текущей клетке и переход к выполнению команды с номером m

Остановка выполнения программы

Система команд машины Поста

— А сейчас давайте, рассмотрим один пример вместе. Рассмотрим программу:

Задача: увеличить число 3 на единицу (изменить значение в памяти с 3 на 4). Целое положительное число на ленте машины Поста представимо идущими подряд метками, которых на одну больше, чем кодируемое число. Это связано с тем, что одна метка обозначает ноль, а уже две – единицу, и т.д. Допустим, точно известно, что каретка стоит где-то слева от меток и обозревает пустую ячейку. Тогда программа увеличения числа на единицу может выглядеть так:

На доске вместе с учениками разбирается пример.

— Всем понятно решение этого примера?

Задачи для самостоятельной работы:

1. Пусть задано исходное состояние головки и требуется на пустой ленте написать две метки: одну в секцию под головкой, вторую справа от нее.

2. На ленте имеется некоторое множество меток (общее количество меток не менее 1). Между метками множества могут быть пропуски, длина которых составляет одну ячейку. Заполнить все пропуски метками.

Пример программы, которая не применима ни к одному состоянию машины Поста:

Программа для машины Поста:

Пояснения к условиям задач

1) В задачах под массивом понимается последовательность подряд идущих меток, ограниченная пустыми ячейками.

К примеру, запись “12012” будет соответствовать записи “11011” на ленте.

4) Если не сказано ничего о местонахождении каретки в начальный момент времени, то будем считать, что каретка обозревает ячейку с самой левой меткой.

1. Применимость программ. Определение результата выполнения программ

1. Выяснить, применимы ли программы к заданным состояниям машины Поста, указать результат работы машины Поста для каждого состояния.

Источник

Практическая работа, Машина Поста

Онлайн-конференция

«Современная профориентация педагогов
и родителей, перспективы рынка труда
и особенности личности подростка»

Свидетельство и скидка на обучение каждому участнику

Изучение машины Поста в школьном курсе информатики

Одним из центральных понятий информатики является понятие алгоритма. В 1936 году американский математик и логик Эмиль Леон Пост (1897–1954) предложил абстрактную вычислительную конструкцию, позволяющую формально определить алгоритм и названную впоследствии машиной Поста. При разработке вычислительной конструкции Пост руководствовался принципом создания максимально простой абстракции: минимумом операций при обработке информации, входная информация должна быть закодирована с использованием минимального набора символов.

Несмотря на “примитивность” машины Поста, любой существующий алгоритм может быть записан в виде программы для машины Поста. В теории алгоритмов существует так называемый “тезис Поста”: “Всякий алгоритм представим в форме машины Поста”. Этот тезис одновременно является формальным определением алгоритма. Алгоритм (по Посту) — программа для машины Поста, приводящая к решению поставленной задачи.

Тезис Поста является гипотезой. Его невозможно строго доказать (так же, как и тезис Тьюринга), потому что в нем фигурируют, с одной стороны, интуитивное понятие “всякий алгоритм”, а с другой стороны — точное понятие “машина Поста”. Для того чтобы опровергнуть гипотезу Поста, необходимо придумать алгоритм, который невозможно записать в виде программы для машины Поста. На сегодняшний день такого алгоритма не существует.

Машина Поста — это абстрактная (т.е. не существующая в арсенале действующей техники), но очень простая вычислительная машина. Она способна выполнять лишь самые элементарные действия, и потому ее описание и составление простейших программ может быть доступно ученикам начальной школы. Тем не менее на машине Поста можно запрограммировать — в известном смысле — любые алгоритмы. Изучение машины Поста можно рассматривать как начальный этап обучения теории алгоритмов и программированию. Разработка программ для машин Поста — достаточно эффективный этап в обучении алгоритмизации, т.к. в процессе написания этих программ учащиеся учатся разбивать интуитивно понятные вычислительные процедуры на элементарные действия. Изучение машины Поста полезно как школьникам, интересующимся информатикой и математикой, так и студентам младших курсов, обучающимся по специальности “прикладная математика и информатика”. При этом теоретический материал доступен даже школьникам младших классов, но требует в этом случае некоторых методических поправок.

В статье предлагается материал для практикума по теме “Машина Поста” в рамках изучения основ алгоритмизации. Практикум включает в себя теоретическую часть и набор задач с решениями.

Теоретическая часть. Состав машины Поста

Машина Поста состоит из ленты и каретки (называемой также считывающей и записывающей головкой). Лента бесконечна и разделена на секции одинакового размера — ячейки.

image001

Рис. 1. В каждый момент времени каретка указывает на одну из ячеек

В каждой ячейке ленты может быть либо ничего не записано, либо стоять метка V. Информация о том, какие ячейки пусты, а какие содержат метки, образует состояние ленты. Иными словами, состояние ленты — это распределение меток по ячейкам. Состояние ленты меняется в процессе работы машины. Заметим, что наличие метки в ячейке можно интерпретировать как “1”, а отсутствие — “0”. Такое двоичное представление информации подобно представлению, используемому практически во всех современных ЭВМ.

Каретка может передвигаться вдоль ленты влево и вправо. Когда она неподвижна, она стоит против ровно одной ячейки ленты; говорят, что каретка обозревает одну ячейку. За единицу времени каретка может совершить одно из трех действий: стереть метку, поставить метку, совершить движение на соседнюю ячейку. Состояние машины Поста складывается из состояния ленты и положения каретки.

Действия каретки подчинены программе, состоящей из перенумерованного набора команд (команды можно представлять как строки программы). Команды бывают шести типов:

1. записать 1 (метку), перейти к i-й строке программы;

2. записать 0 (стереть метку), перейти к i-й строке программы;

3. сдвиг влево, перейти к i-й строке программы;

4. сдвиг вправо, перейти к i-й строке программы;

6. если 0, то перейти к i, иначе перейти к j.

Приведем список недопустимых действий, ведущих к аварийной остановке машины:

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

image002

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

Пример программы, которая не применима ни к одному состоянию машины Поста:

image003

Рассмотрим задачу для машины Поста и ее решение.

Программа для машины Поста:

image004

Практическая часть практикума “Машина Поста”

Все задачи практикума сгруппированы по темам. Начинать знакомство с машиной Поста рекомендуется с первой темы “Применимость программ. Определение результата выполнения программ”.

Пояснения к условиям задач

1) В задачах под массивом понимается последовательность подряд идущих меток, ограниченная пустыми ячейками.

2) Если в задаче говорится, что на ленте задано число в унарной системе, то имеется в виду, что натуральное число n закодировано с помощью массива длины n.

3) В задачах при описании начального состояния ленты будем указывать то, что записано начиная с самой левой непустой ячейки и заканчивая самой правой непустой ячейкой. При этом будем использовать следующие обозначения: nподряд идущих меток будем обозначать 1n, а m пустых ячеек — 0m. При обозначении одной заполненной или пустой ячейки будем писать просто 1 или 0, соответственно.

К примеру, запись “12012” будет соответствовать записи “11011” на ленте.

4) Если не сказано ничего о местонахождении каретки в начальный момент времени, то будем считать, что каретка обозревает ячейку с самой левой меткой.

1. Применимость программ. Определение результата выполнения программ

1. Выяснить, применимы ли программы к заданным состояниям машины Поста, указать результат работы машины Поста для каждого состояния.

image005

image006

c) 1) зацикливание (…111)

2) зацикливание (…1111001)

3) зацикливание (1010111…)

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

Пояснение : выделенная цифра, например 1, означает, что эту ячейку каретка обозревает в начальный момент времени.

image007

3. Написать программы для машины Поста, которые обладают следующими свойствами:

image010

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

2. Арифметические задачи

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

4. На ленте задан массив меток. Увеличить длину массива на 2 метки. Каретка находится либо слева от массива, либо над одной из ячеек самого массива.

3. –> 4 (команды 3 и 4 — передвигаем каретку к концу массива)

5. V 6 (команды 5–7 — ставим 2 метки в конце массива)

5. Даны два массива меток, которые находятся на не-
котором расстоянии друг от друга. Требуется соединить их в один массив. Каретка находится над крайней левой меткой первого массива.

image011

6. На ленте задана последовательность массивов, включающая в себя один и более массивов. При этом два соседних массива отделены друг от друга одной пустой ячейкой. Необходимо на ленте оставить один массив длиной равной сумме длин массивов, присутствовавших изначально. Каретка находится над крайней левой меткой первого (левого) массива.

image012

7. На ленте заданы два массива — m и n, m > n. Вычислить разность этих массивов. Каретка располагается над левой ячейкой правого массива.

1. Ищем правый край массива m, двигаясь слева направо.

2. Стираем правую метку массива m.

3. Ищем правый край массива n, двигаясь слева направо.

4. Стираем левую метку массива n.

5. Проверяем, мы стерли последнюю метку в массиве n (в этом случае следующая справа ячейка должна быть пустой)?

6. Если стерли последнюю метку, то конец алгоритма.

7. Иначе ищем правый конец массива m, двигаясь справа налево.

8. Переход на шаг 2.

1. –> 2 (команды 1–3: ищем левую метку массива m)

4. X 5 (стираем левую метку массива m)

7. X 8 (стираем левую метку массива n)

8. На ленте заданы два массива. Найти модуль разности длин массивов. Каретка располагается над первой ячейкой левого массива.

4. X 5 (удаляем крайний правый элемент 1-го массива)

9. X 10 (удаляем первую метку 2-го массива)

14. –> 15 (мы удалили полностью 1-й массив)

9. На ленте задан массив. Удвоить массив в два раза. Каретка располагается над первой ячейкой массива.

image013

10. На ленте задан массив. Вычислить остаток от деления длины заданного массива на 3. Каретка располагается над первой ячейкой массива.

image014

11. На ленте машины Поста расположен массив из n меток. Составить программу, действуя по которой машина выяснит, делится ли число n на 3. Если да, то после массива через одну пустую ячейку поставить метку.

image015

3. Ориентация на ленте

12 На ленте имеется некоторое множество меток (общее количество меток не менее 1). Между метками множества могут быть пропуски, длина которых составляет одну ячейку. Заполнить все пропуски метками.

image016

13. На ленте имеется массив из n отмеченных ячеек. Каретка обозревает крайнюю левую метку. Справа от данного массива на расстоянии в m ячеек находится еще одна метка. Составьте для машины Поста программу, придвигающую данный массив к данной ячейке.

1. X 2 (удаляем левую метку массива)

4. V 5 (ставим справа от массива метку, раннее нами была удалена самая левая метка)

9. –> 1 (и начинаем все сначала)

14. Известно, что на ленте машины Поста находится метка. Напишите программу, которая находит ее.

1. V 2 (выставили левую метку)

5. V 6 (выставили правую метку)

8. X 9 (стираем левую метку)

11. V 12 (передвигаем левую метку)

12. –> 13 (ищем правую метку)

14. X 15 (стираем правую метку)

15. –> 3 (повторяем действия)

4. Действия над заданным на ленте множеством меток

15. Дан массив меток. Каретка располагается где-то над массивом, но не над крайними метками. Стереть все метки, кроме крайних, и поставить каретку в исходное положение.

17. X 18 (удаляем метку, соответствующую исходному положению каретки)

16. На ленте машины Поста расположен массив из n меток (метки расположены через пробел). Нужно сжать массив так, чтобы все n меток занимали nрасположенных подряд ячеек.

6. X 7 (удаляем четный массив)

18. На ленте машины Поста расположено n массивов меток, отделенных друг от друга свободной ячейкой. Каретка находится над крайней левой меткой первого массива. Определить количество массивов.

image017

19. На ленте машины Поста расположен массив из 2n – 1 меток. Составить программу удаления средней метки массива.

14. V 15 (дошли до левого конца)

19. V 9 (дошли до правого конца)

20. На ленте машины Поста расположен массив из 2n ячеек. Составить программу, по которой машина Поста раздвинет на расстояние в одну ячейку две половины данного массива.

21. Написать программу, которая осуществляет преобразование 1 n 01 m –> 1 m 01 n (n image0081 и m image0081).

image018

22. На ленте расположены два массива разной длины. Каретка обозревает крайний элемент одного из них. Составьте программу для машины Поста, сравнивающую длины массивов и стирающую больший из них. Отдельно продумайте случай, когда длины массивов равны.

Решение аналогично нахождению разности двух чисел.

23. На ленте машины Поста находятся два массива в m и n меток. Составить программу выяснения, одинаковы ли массивы по длине.

Решение аналогично нахождению разности двух чисел.

24. Дано N массивов меток. Массивы разделены тремя пустыми ячейками. Количество меток в массиве не меньше двух. Если количество меток в массиве кратно трем, то стереть метки в этом массиве через одну, в противном случае стереть весь массив. Каретка находится над крайней левой меткой первого массива.

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

Источник

Методические рекомендации по выполнению практикума по учебной дисциплине «Теория алгоритмов» (Машина Поста)

Онлайн-конференция

«Современная профориентация педагогов
и родителей, перспективы рынка труда
и особенности личности подростка»

Свидетельство и скидка на обучение каждому участнику

hello html 86eb28b

Министерство образования и науки Самарской области

Министерство имущественных отношений Самарской области

Государственное бюджетное образовательное учреждение

среднего профессионального образования

«Чапаевский губернский колледж»

МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ СТУДЕНТАМ ПО ВЫПОЛНЕНИЮ ПРАКТИКУМА ПО УЧЕБНОЙ ДИСЦИПЛИНЕ « Теория алгоритмов »

(Раздел 2. Конечные автоматы

Тема 2.2. Рекурсивные функции и понятие вычислимости)

специальность230115 Программирование в компьютерных системах

Публикуется на основании решения

Автор: Дикова В.Г., преподаватель общепрофессиональных и специальных дисциплин ГБОУ СПО «Чапаевский губернский колледж»

Редактор: Следкова М.П., заместитель директора по учебно-методической работе образовательной программы среднего профессионального образования ГБОУ СПО «Чапаевский губернский колледж»

Рецензент: Орлова Н.Н., старший преподаватель кафедры Высшей математики и информатики СФ МГПУ

Методические рекомендации предназначены для студентов специальности 230115 Программирование в КС при изучении вычислимости функций и машины Поста как универсального конечного автомата. Тематика практических заданий соответствует программе учебной дисциплины. Практикум предназначен для закрепления теоретического материала, формирования практических умений разработки алгоритмов по заданным параметрам.

Примеры решения задач

Задания для самостоятельной работы

Список источников и литературы

Методические рекомендации по выполнению практикума разработаны в помощь студентам специальности 230115 Программирование в КС для изучения раздела «Конечные автоматы» по дисциплине «Теория алгоритмов».

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

При разработке практических заданий учитывались требования к результатам освоения учебной дисциплины, сформулированные в ФГОС СПО III поколения.

В результате освоения раздела обучающийся должен овладеть общими и профессиональными компетенциями, а также

строить принципиальные схемы конечных автоматов;

использовать систему команд машины Поста для записи алгоритма решения задачи;

предупреждать недопустимые действия, ведущие к аварийной остановке машины.

основные модели алгоритмов;

методы построения алгоритмов;

способы построения конечных автоматов;

устройство машины Поста;

систему команд машины Поста.

Разработка программ для машин Поста — достаточно эффективный этап в обучении алгоритмизации, т.к. в процессе написания этих программ студенты учатся разбивать интуитивно понятные вычислительные процедуры на элементарные действия.

Практикум включает в себя теоретическую часть и набор задач с решениями.

Все задачи практикума сгруппированы по темам. Начинать знакомство с машиной Поста рекомендуется с первой темы “Применимость программ. Определение результата выполнения программ”.

Методические рекомендации могут быть использованы студентами и преподавателями данной дисциплины при подготовке к учебным занятиям.

Назначение машины Поста

Одним из центральных понятий информатики является понятие алгоритма. В 1936 году американский математик и логик Эмиль Леон Пост (1897–1954) предложил абстрактную вычислительную конструкцию, позволяющую формально определить алгоритм и названную впоследствии машиной Поста. При разработке вычислительной конструкции Пост руководствовался принципом создания максимально простой абстракции: минимумом операций при обработке информации, входная информация должна быть закодирована с использованием минимального набора символов.

Несмотря на “примитивность” машины Поста, любой существующий алгоритм может быть записан в виде программы для машины Поста. В теории алгоритмов существует так называемый “тезис Поста”: “Всякий алгоритм представим в форме машины Поста”. Этот тезис одновременно является формальным определением алгоритма. Алгоритм (по Посту) — программа для машины Поста, приводящая к решению поставленной задачи.

Тезис Поста является гипотезой. Его невозможно строго доказать (так же, как и тезис Тьюринга), потому что в нем фигурируют, с одной стороны, интуитивное понятие “всякий алгоритм”, а с другой стороны — точное понятие “машина Поста”. Для того чтобы опровергнуть гипотезу Поста, необходимо придумать алгоритм, который невозможно записать в виде программы для машины Поста. На сегодняшний день такого алгоритма не существует.

Машина Поста — это абстрактная (т.е. не существующая в арсенале действующей техники), но очень простая вычислительная машина. Она способна выполнять лишь самые элементарные действия, и потому ее описание и составление простейших программ может быть доступно ученикам начальной школы. Тем не менее, на машине Поста можно запрограммировать — в известном смысле — любые алгоритмы. Изучение машины Поста можно рассматривать как начальный этап обучения теории алгоритмов и программированию.

Состав машины Поста

Машина Поста состоит из ленты и каретки (называемой также считывающей и записывающей головкой). Лента бесконечна и разделена на секции одинакового размера — ячейки.

hello html 1c278828

В каждый момент времени каретка указывает на одну из ячеек

В каждой ячейке ленты может быть либо ничего не записано, либо стоять метка V. Информация о том, какие ячейки пусты, а какие содержат метки, образует состояние ленты. Иными словами, состояние ленты — это распределение меток по ячейкам. Состояние ленты меняется в процессе работы машины. Заметим, что наличие метки в ячейке можно интерпретировать как “1”, а отсутствие — “0”. Такое двоичное представление информации подобно представлению, используемому практически во всех современных ЭВМ.

Каретка может передвигаться вдоль ленты влево и вправо. Когда она неподвижна, она стоит против ровно одной ячейки ленты; говорят, что каретка обозревает одну ячейку. За единицу времени каретка может совершить одно из трех действий: стереть метку, поставить метку, совершить движение на соседнюю ячейку. Состояние машины Поста складывается из состояния ленты и положения каретки.

Действия каретки подчинены программе, состоящей из перенумерованного набора команд (команды можно представлять как строки программы). Команды бывают шести типов:

1. записать 1 (метку), перейти к i-й строке программы;

2. записать 0 (стереть метку), перейти к i-й строке программы;

3. сдвиг влево, перейти к i-й строке программы;

4. сдвиг вправо, перейти к i-й строке программы;

6. если 0, то перейти к i, иначе перейти к j.

Приведем список недопустимых действий, ведущих к аварийной остановке машины:

попытка записать 1 (метку) в заполненную ячейку;

попытка стереть метку в пустой ячейке;

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

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

hello html 7d91faed

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

Пример программы, которая не применима ни к одному состоянию машины Поста:

hello html 6956b92e

Рассмотрим задачу для машины Поста и ее решение.

Задача. На ленте проставлена метка в одной-единственной ячейке. Каретка стоит на некотором расстоянии левее этой ячейки. Необходимо подвести каретку к ячейке, стереть метку и остановить каретку слева от этой ячейки.

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

Программа для машины Поста:

hello html m3ca03c7d

Примеры решения задач

Пояснения к условиям задач

1) В задачах под массивом понимается последовательность подряд идущих меток, ограниченная пустыми ячейками.

2) Если в задаче говорится, что на ленте задано число в унарной системе, то имеется в виду, что натуральное число n закодировано с помощью массива длины n.

3) В задачах при описании начального состояния ленты будем указывать то, что записано начиная с самой левой непустой ячейки и заканчивая самой правой непустой ячейкой. При этом будем использовать следующие обозначения: n подряд идущих меток будем обозначать 1n, а m пустых ячеек — 0m. При обозначении одной заполненной или пустой ячейки будем писать просто 1 или 0, соответственно.

К примеру, запись “12012” будет соответствовать записи “11011” на ленте.

4) Если не сказано ничего о местонахождении каретки в начальный момент времени, то будем считать, что каретка обозревает ячейку с самой левой меткой.

Применимость программ. Определение результата выполнения программ

1. Выяснить, применимы ли программы к заданным состояниям машины Поста, указать результат работы машины Поста для каждого состояния.

hello html m57239ba

hello html m3178fa76

c) 1) зацикливание (…111)

2) зацикливание (…1111001)

3) зацикливание (1010111…)

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

Пояснение: выделенная цифра, например 1, означает, что эту ячейку каретка обозревает в начальный момент времени.

hello html 64a63aa3

Решение. Выделенная цифра показывает, на какой ячейке остановится машина.

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

3. На ленте задан массив меток. Увеличить длину массива на 2 метки. Каретка находится либо слева от массива, либо над одной из ячеек самого массива.

3. –> 4 (команды 3 и 4 — передвигаем каретку к концу массива)

5. V 6 (команды 5–7 — ставим 2 метки в конце массива)

4. Даны два массива меток, которые находятся на не-
котором расстоянии друг от друга. Требуется соединить их в один массив. Каретка находится над крайней левой меткой первого массива.

hello html 1b51bb5

5. На ленте задана последовательность массивов, включающая в себя один и более массивов. При этом два соседних массива отделены друг от друга одной пустой ячейкой. Необходимо на ленте оставить один массив длиной равной сумме длин массивов, присутствовавших изначально. Каретка находится над крайней левой меткой первого (левого) массива.

hello html 8436684

6. На ленте заданы два массива — m и n, m > n. Вычислить разность этих массивов. Каретка располагается над левой ячейкой правого массива.

Решение. Запишем решение алгоритма в словесной форме.

1. Ищем правый край массива m, двигаясь слева направо.

2. Стираем правую метку массива m.

3. Ищем правый край массива n, двигаясь слева направо.

4. Стираем левую метку массива n.

5. Проверяем, мы стерли последнюю метку в массиве n (в этом случае следующая справа ячейка должна быть пустой)?

6. Если стерли последнюю метку, то конец алгоритма.

7. Иначе ищем правый конец массива m, двигаясь справа налево.

8. Переход на шаг 2.

1. –> 2 (команды 1–3: ищем левую метку массива m)

7. X 8 (стираем левую метку массива n)

9. X 10 (удаляем первую метку 2-го массива)

12. 15 (мы удалили полностью 1-й массив)

8. На ленте задан массив. Удвоить массив в два раза. Каретка располагается над первой ячейкой массива.

Решение. В результате работы программы справа от исходного массива будет сформирован новый массив удвоенной длины, исходный массив будет стерт.

hello html 5aef88ed

9. На ленте задан массив. Вычислить остаток от деления длины заданного массива на 3. Каретка располагается над первой ячейкой массива.

hello html m80ec7c5

Ориентация на ленте

10. На ленте имеется некоторое множество меток (общее количество меток не менее 1). Между метками множества могут быть пропуски, длина которых составляет одну ячейку. Заполнить все пропуски метками.

hello html m1af78f92

11. На ленте имеется массив из n отмеченных ячеек. Каретка обозревает крайнюю левую метку. Справа от данного массива на расстоянии в m ячеек находится еще одна метка. Составьте для машины Поста программу, придвигающую данный массив к данной ячейке.

1. X 2 (удаляем левую метку массива)

4. V 5 (ставим справа от массива метку, раннее нами была удалена самая левая метка)

7. 1 (и начинаем все сначала)

12. Известно, что на ленте машины Поста находится метка. Напишите программу, которая находит ее.

Решение. Этот алгоритм решения заимствован из замечательной книги В.А. Успенского “Машина Поста”. Мы не знаем, в какую сторону нам надо двигаться, но, в какую бы сторону мы ни пошли, может случиться, что метка стоит в другой стороне. Очевидно, что нам надо двигаться попеременно, то в одну сторону, то в другую, постоянно увеличивая размах своих колебаний. Но как определить момент, когда надо поворачивать, т.е. менять направление? Выход из положения есть. Вначале работы выставим метки слева и справа от исходного положения каретки, а затем будем ходить между ними и передвигать их.

1. V 2 (выставили левую метку)

5. V 6 (выставили правую метку)

6. 13 (ищем правую метку)

14. X 15 (стираем правую метку)

15. –> 3 (повторяем действия)

Действия над заданным на ленте множеством меток

13. Дан массив меток. Каретка располагается где-то над массивом, но не над крайними метками. Стереть все метки, кроме крайних, и поставить каретку в исходное положение.

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

17. X 18 (удаляем метку, соответствующую исходному положению каретки)

14. На ленте машины Поста расположен массив из n меток (метки расположены через пробел). Нужно сжать массив так, чтобы все n меток занимали nрасположенных подряд ячеек.

Решение. Идея решения состоит в последовательном придвижении каждой отдельной метки к уже сформированному массиву. Считаем, что каретка находится над левой меткой массива. Программа решения данной задачи эквивалентна программе сложения произвольного количества чисел (см. задачу 6).

15. Дано несколько массивов меток. Удалить четные массивы. Каретка находится над первым массивом.

6. X 7 (удаляем четный массив)

16. На ленте машины Поста расположено n массивов меток, отделенных друг от друга свободной ячейкой. Каретка находится над крайней левой меткой первого массива. Определить количество массивов.

Решение. Идея решения такова: будем “считать” массивы слева направо, удаляя каждый “посчитанный” массив. При этом слева от последовательности оставшихся массивов будем держать массив меток, длина которого соответствует числу “посчитанных” массивов.

hello html 2c1e4deb

17. На ленте машины Поста расположен массив из 2n – 1 меток. Составить программу удаления средней метки массива.

Решение. Идея решения состоит в следующем: во вторых ячейках от каждого края массива ставим “маячки-пузырьки” (эти ячейки делаем пустыми). Далее последовательно перемещаем к центру левый и правый пузырьки. Эти пузырьки встретятся ровно на центральном элементе исходного массива. При реализации программы надо отдельно учесть три случая: n = 1, n = 3, n > 3. Считаем, что в начале работы каретка стоит на самой левой метке массива.

19. V 9 (дошли до правого конца)

18. На ленте машины Поста расположен массив из 2n ячеек. Составить программу, по которой машина Поста раздвинет на расстояние в одну ячейку две половины данного массива.

Решение. Идея решения состоит в следующем. Сначала между двумя левыми и двумя правыми метками ставим “маячки” — пустые клетки. Первым ставим левый маячок. Затем поочередно сдвигаем эти маячки к центру. Как только маячки сомкнутся, вместо правого маячка ставим метку, идем к правому краю массива и удаляем самую правую метку. Для простоты решения считаем, что каретка стоит под самой левой меткой.

19. Написать программу, которая осуществляет преобразование 1 n 01 m –> 1 m 01 n (n hello html md60f5821 и m hello html md60f5821).

Решение. Правый массив длины m остается на месте, левый массив переносится слева направо относительно неподвижного массива.

hello html 7eff2be7

Задания для самостоятельной работы

Даны два массива меток, которые находятся на некотором расстоянии друг от друга. Требуется соединить их в один массив. Каретка находится над крайней левой меткой первого массива.

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

Произвести умножение двух чисел. Каретка располагается над пустой ячейкой, которая разделяет данные массивы.

Составить программу нахождения разности двух целых неотрицательных чисел a и b. Если a меньше b, то перед разностью через одну пустую ячейку поставить метку. Каретка находится над крайней левой меткой левого числа.

Дан массив меток. Каретка располагается где-то над массивом, но не над крайними метками. Стереть все метки, кроме крайних, и поставить каретку в исходное положение.

Дано N массивов меток. После последнего массива на расстоянии более трёх пустых ячеек находится одна метка. Массивы разделены тремя пустыми ячейками. Количество меток в массиве >=2. Если количество меток в массиве кратно трём, то стереть метки в этом массиве через одну, в противном случае стереть весь массив. Каретка находится над крайней левой меткой первого массива.

Удвоить данный массив справа от него, через ячейку, и затем стереть исходный. Каретка находится над крайней левой меткой.

Написать длину слова целым без знака.

На ленте машины Поста находятся два массива в m и n меток. Составить программу выяснения, одинаковы ли массивы по длине.

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

Дано N массивов меток. Массивы разделены тремя пустыми ячейками. Количество меток в массиве не меньше двух. Если количество меток в массиве кратно трем, то стереть метки в этом массиве через одну, в противном случае стереть весь массив. Каретка находится над крайней левой меткой первого массива.

1. Написать программы для машины Поста, которые обладают следующими свойствами:

программа применима к любому состоянию машины Поста;

программа не применима ни к какому состоянию машины Поста, и зона работы для любого начального состояния — бесконечная;

программа не применима ни к какому состоянию машины Поста, и зона работы для любого начального состояния ограничена одним и тем же числом ячеек, не зависящим от выбранного начального состояния ленты;

2. На ленте машины Поста расположен массив из n меток. Составить программу, действуя по которой машина выяснит, делится ли число n на 3. Если да, то после массива через одну пустую ячейку поставить метку.

Список источников и литературы

В.И.Игошин. Математическая логика и теория алгоритмов. [Текст]: В.И. Игошин. – М.: Академия, 2010 г. – 448 с.

Б.Я. Фалевич. Теория алгоритмов. [Текст]: Б.Я. Фалевич. – М.: Машиностроение, 2012 г. – 160 с.

Источник

Оцените статью
AvtoRazbor.top - все самое важное о вашем авто