Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
22.05.2015
Размер:
94.21 Кб
Скачать

Раздел 4. Элементы математической логики и теория алгоритмов

ПРАКТИЧЕСКАЯ РАБОТА №8

АЛГОРИТМИЧЕСКИЕ СИСТЕМЫ.

ПОСТРОЕНИЕ ЭМУЛЯТОРА МАШИНЫ ПОСТА.

1. ОБЩИЕ СВЕДЕНИЯ

1.1. «Внешний вид» машины Поста

Машина Поста не есть реально существующее, сделанное кем-то устройство. Она представляет собой мысленную конструкцию.

Машина Поста состоит из ленты и каретки. Лента бесконечна и разделена на секции одинакового размера. Порядок в котором расположены секции ленты, подобен порядку, в котором расположены все целые числа. Поэтому принято рассматривать ленту, как «целочисленную систему координат» (рис.1).

Рис.1

В каждой секции ленты может быть либо ничего не записано (пустая секция), либо записана метка V. Информация о том, какие секции пусты, а какие отмечены, образует состояние ленты.

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

Информация о том, какие секции пусты, а какие отмечены и где стоит каретка, образует состояние машины Поста.

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

1.2 Программа машины Поста

Работа машины Поста состоит в том, что каретка передвигается вдоль ленты и печатает или стирает метки. Эта работа происходит согласно программе.

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

  1. Команда движения вправо. i  j

  2. Команда движения влево. i  j

  3. Команда печатания метки. i v j

  4. Команда стирания метки. i  j

  5. Команда передачи управления.

j1 если секция пуста

i ?

j2 если секция отмечена

  1. Команда остановки. ! стоп.

Число i, стоящее в начале команды, называется номером команды. Число j, стоящее в конце команды—отсылка. У команды остановки нет отсылки.

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

  1. на первом месте в этом списке стоит команда с номером 1, на втором месте- команда с номером 2 и т.д.; вообще на k- том месте стоит команда с номером k;

  2. отсылка любой из команд списка совпадает с номером некоторой (другой или той же самой) команды списка.

2. ЦЕЛЬ И ПОРЯДОК РАБОТЫ

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

Работу следует выполнять в таком порядке:

  • изучить описание работы;

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

  • написать эмулятор машины Поста на языке Turbo Pascal;

  • по индивидуальному заданию написать программу машины Поста, затем выполнить ее на созданном эмуляторе;

  • оформить отчет.

  1. ЗАДАНИЯ

  1. Написать пять программ машины Поста и осуществить их реализацию на существующем эмуляторе.

  1. На ленте имеется машинная запись числа N, представленная в виде массива из N+1 меток. Каретка находится против самого левого элемента массива. Требуется записать число N+1, добавив метку справа к массиву.

  2. Дан массив из 2*N-1 меток. Каретка находиться слева от массива. Требуется стереть среднюю метку.

  3. Дан массив из 2*N меток. Каретка находится слева от массива. Требуется раздвинуть две половины массива на одну секцию.

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

  5. На ленте имеется машинная запись числа N (массив N+1 меток). Требуется записать число N+1. Положение каретки произвольно. [УКАЗАНИЕ. Необходимо рассмотреть два случая: каретка расположена над заполненной секцией, тогда задача сводится к первой из предложенных; каретка расположена над пустой секцией, тогда нужно осуществить поиск массива]

3.2.На языке программирования Turbo Pascal написать простейший эмулятор машины Поста.

3.3.Согласно варианту выбрать задание и написать программу машины Поста. Реализацию программы осуществить на разработанном эмуляторе.

  1. Разделить заданное число на два.

  2. Разделить заданное число на три.

  3. Разделить заданное число на четыре.

Примечание. Каретка слева от массива. Начальное состояние ленты -

машинная запись делимого; конечное состояние - частное.

Пояснение. Под делением понимается нахождение частного или неполного частного, так что результат деления 7 на 3 будет 2.

  1. Разделить одно число на другое.

Примечание. Каретка слева от массивов. Начальное состояние ленты -

машинная запись делимого и делителя; конечное состояние - частное.

Пояснение. Под делением понимается нахождение частного или неполного частного, так что результат деления 7 на 3 будет 2.

5) Вычесть одно число из другого.

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

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

  1. Умножить заданное число на два.

  2. Умножить заданное число на три.

  3. Умножить заданное число на четыре.

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

9) Перемножить два числа.

Примечание. Каретка слева от массивов. Начальное состояние ленты -

машинная запись двух чисел; конечное состояние - произведение.

10)Найти НОД (наибольший общий делитель) двух чисел.

Примечание. Каретка слева от массивов. Начальное состояние ленты -

машинная запись двух чисел; конечное состояние - НОД.

11) Найти сумму двух чисел.

Примечание. Положение каретки произвольно. Начальное состояние ленты -два массива, расположенных на произвольном расстоянии; конечное состояние- сумма.

Пояснение. Необходимо предусмотреть поиск массивов, т.к. неизвестно ни положение каретки, ни расположение массивов относительно друг друга.

  1. Найти выражение (a+b)*c.

Примечание. Каретка слева от массивов. Начальное состояние ленты -первый массив слева -число a, второй массив- число b, третий массив- число с; конечное состояние- результат.

13) Перемножить два числа.

Примечание. Положение каретки произвольно. Начальное состояние ленты -два массива, расположенных на произвольном расстоянии; конечное состояние- произведение.

Пояснение. Необходимо предусмотреть поиск массивов, т.к. неизвестно ни положение каретки, ни расположение массивов относительно друг друга.

  1. Возвести число в квадрат.

  2. Возвести число в куб.

Примечание. Каретка слева от массива. Начальное состояние ленты -машинная запись числа; конечное состояние- результат.

  1. МЕТОДИЧЕСКИЕ УКАЗАНИЯ

4.1. Создание эмулятора машины Поста.

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

Рекомендуется для описания состояния ленты использовать массив булевых элементов (например 100 элементов. Ограничение ленты упрощает работу). При этом в начале работы каретка находится напротив нулевой секции ( 50-тый элемент массива). В эмуляторе каретка всегда остается на месте, а передвигаются лента, программно это означает перерисовывание меток.

Проще рисовать эмулятор в текстовом режиме, используя символы ASCII для рисования таблиц.

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

Примерные фрагменты процедур

Процедура вывода рамки ленты и каретки

procedure lenta_wid;

begin

textcolor (7);

gotoxy (1,6);

{Рисование заголовка (верхняя треть) ленты}

write (#194);

for i:=1 to 39 do

write (#196,#194);

write (#196);

{Середина ленты}

for i:=1 to 40 do

write (#179,#32);

{Подвал ленты}

write (#193);

for i:=1 to 39 do

write (#196,#193);

write (#196);

{Изображение каретки}

gotoxy (40,5);

textcolor (14);

write (c00);

end;

Процедура работы с клавиатурой

procedure key;

begin

b:=false; gotoxy (40,5);

c:=readkey;

while keypressed do

c:=readkey; {Очистка буфера}

case c of

#32 :ln[n]:=not (ln[n]); {Пробел - поставить/стереть метку}

#75 :if n<>0

then n:=n-1

else {Курсор вправо - сдвиг ленты}

begin

gotoxy (5,10);

write ('Конец ленты')

end;

#77 :if n<>100 then n:=n+1

else {Курсор влево - сдвиг ленты}

begin

gotoxy (5,10);

write ('Конец ленты')

end;

#27,#13 : b:=true; {Esc,Enter - окончание редактирования ленты}

else b:=false

end

end;

Процедура вывода состояния текущего участка ленты

procedure obraz;

var i00 :integer;

begin

for i:=1 to 40 do

begin {Проход всего видимого участка ленты}

gotoxy (2*i,7); {Перевод курсора в ячейку}

i00:=n-20+i;

if (i00>=0) and (i00<=100)

then {Определение границ}

{Если границы соответствуют и метка есть вывести символ метки, иначе забить предыдущий символ данной ячейки}

if ln[i00] then write (c01)

else write (' ');

gotoxy (38,9);

write (' ',n-50,' ')

end

end;

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

5. СОДЕРЖАНИЕ ОТЧЕТА

Отчет должен содержать:

  • наименование работы;

  • текст пяти обязательных программ в тетради;

  • программу создания эмулятора машины Поста (в электронном виде);

  • текст программы машины Поста по индивидуальному заданию.

  1. КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Что представляет собой машина Поста?

  2. Что называют состоянием ленты, а что - состоянием машины Поста?

3. Для чего предназначена каретка?

4. Какие команды могут быть использованы в программе машины Поста?

5.Объяснить алгоритм поиска массива меток, используемый в пятом обязательном задании.

7. ЛИТЕРАТУРА

1.Успенский В.А. Машина Поста.-2-е изд.,испр.-М..:Наука.2007.-96 с.

6

Соседние файлы в папке дискретка