Алгоритмы для исполнителя МНР

(машины с неограниченными регистрами)

Опишем исполнителя МНР. МНР состоит из памяти данных и программной памяти. Ячейки памяти данных называют регистрами и обозначают R0, R1, R2 и т.д. до бесконечности. В каждом регистре может содержаться любое целое неотрицательное число. Число, содержащееся в Rn, или значение регистра Rn будем обозначать rn. В каждый момент времени только конечное число регистров содержит какие-то числа, т.е. память данных является не бесконечной, а потенциально бесконечной. МНР работает по программе. Программой называется пронумерованная конечная последовательность команд, хранящаяся в программной памяти. Программная память МНР также является потенциально бесконечной. Будем считать, что во всех ячейках, свободных от команд программы записана специфическая команда – Stop, результатом исполнения которой является остановка выполнения программы.

Система команд МНР содержит следующие команды:

1. Команда обнуления.

Команда обнуления записывается Z(n). Команда Z(n) выполняется так: содержимое регистра Rn обнуляется, т.е. rn становится равным нулю (rn:=0), содержимое других регистров не изменяется.

Пример 5. Пусть начальная конфигурация МНР имеет вид:

R0 R1 R2 R3 R4 R5

 

R0 R1 R2 R3 R4 R5 (*)

МНР выполнит команду обнуления – Z(3). Результатом будет следующая

 

конфигурация:

 

2. Команда прибавления единицы.

Команда прибавления единицы имеет вид S(n). Команда S(n) выполняется так: содержимое регистра Rn увеличивается на единицу, т.е. rn:=rn+1, новое значение rn равно старому значению, сложенному с 1, содержимое других регистров не изменяется.

Пример 6. Пусть начальная конфигурация МНР имеет вид (*). МНР выполнит команду S(4). Тогда новая конфигурация имеет вид:

R0 R1 R2 R3 R4 R5 (**)

3. Команда переадресации.

Команда переадресации имеет вид T(m,n). Команда T(m,n) выполняется так: содержимое регистра Rn заменяется числом rm, содержащимся в регистре Rm, т.е. rn:=rm, содержимое других регистров (включая Rm) не изменяется.

Пример 7. Пусть начальная конфигурация МНР имеет вид (**). МНР выполнит команду T(4,2). Тогда новая конфигурация МНР имеет вид:

R0 R1 R2 R3 R4 R5

В МНР есть особый регистр, который назовем счетчиком адресов команд (САК). При запуске программы на выполнение в САК заносится 1. Выполнение каждой команды МНР состоит из четырех этапов:

1. Читается адрес из САК.

2. Запоминается команда из памяти по этому адресу.

3. САК увеличивается на единицу.

4. Выполняется запомненная команда.

МНР выполняет каждую команду программы в 4 этапа, пока не встретит команду Stop.

Команды обнуления, прибавления единицы и переадресации называются арифметическими. После каждой команды типа 1-3 выполняется команда со следующим номером.

4. Команда условного перехода.

В работе алгоритма могут быть моменты, когда предписываются альтернативные действия, зависящие от результата работы алгоритма к этому моменту. В других ситуациях может потребоваться повторить группу команд несколько раз. МНР может выполнять такие процедуры, используя команды условного перехода; они позволяют делать скачки вперед и назад в списке команд. Мы будем использовать команду условного перехода для совершения, например, следующего действия: «Если r2=r6, перейди к десятой команде программы, в противном случае, перейди к следующей команде программы». Команда, вызывающая это действие, записывается как J(2,6,10).

Команда условного перехода в общем виде записывается так J(m,n,q). Выполнение команды осуществляется следующим образом: сравнивается содержимое регистров Rm и Rn, если rm=rn, то МНР переходит к выполнению q-ой команды исполняемой программы, в САК заносится число q; если rm¹rn, то МНР переходит к выполнению команды, следующей в программе за J(m,n,q), САК увеличивается на единицу, содержимое регистров не изменяется. Если условный переход невозможен ввиду того, что в исполняемой программе команд меньше, чем q, то МНР прекращает работу.

С помощью данной команды можно осуществлять и безусловный переход. Для этого команду нужно записать следующим образом: J(m,m,q).

Работа на МНР состоит из следующих этапов:

1. Заполняем регистры памяти данных какими-то числами, т.е. задаем так называемую начальную конфигурацию.

2. Заполняем командами ячейки программной памяти.

3. Записываем в САК единицу, запускаем МНР и она работает так, как было описано выше до тех пор, пока не встретит команду Stop. При этом полученное по окончании работы машины содержимое регистров памяти данных называется конечной конфигурацией.

Примеры алгоритмов

Задача 37. Напишите для исполнителя МНР алгоритм вычисления суммы целых положительных чисел x и y, результат запишите в регистр R0.

Решение. Поместим x в регистр R0, y – в регистр R1, т.е. зададим начальную конфигурацию:

R0 R1
x y

Конечная конфигурация:

R0
x+y

 

Блок-схема алгоритма: Алгоритм вычисления x+y:

1. Z(2)

2. J(1,2,6)

3. S(0)

4. S(2)

5. J(0,0,2)

6. Stop

 

 

Исполнение алгоритма при x=3, y=2

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

Шаги САК Исполняемая команда Конфигурация МНР после исполнения команды Проверяемое условие
      R0 R1 R2 R3  
     
Z(2)  
J(1,2,6) 2=0 (нет)
S(0)  
S(2)  
J(0,0,2) 4=4 (да) САК=2
J(1,2,6) 2=1 (нет)
S(0)  
S(2)  
J(0,0,2) 5=5 (да) САК=2
J(1,2,6) 2=2 (да) САК=6
Stop    

Задача 38. Напишите для исполнителя МНР алгоритм определения является ли треугольник с заданными сторонами a, b, c равнобедренным: . Результат запишите в регистр R0.

R0 R1 R2
a b c

Решение. Зададим начальную конфигурацию:

Блок-схема алгоритма:


Алгоритм вычисления t:

1. Z(3)

2. J(0,1,6)

3. J(0,2,6)

4. J(1,2,6)

5. J(0,0,7)

6. S(3)

7. T(3,0)

8. Stop

 

Конечная конфигурация:

R0
t

 

Исполнение алгоритма при a=5, b=4, c=4

Шаги САК Исполняемая команда Конфигурация МНР после исполнения команды Проверяемое условие
      R0 R1 R2 R3  
     
Z(3)  
J(0,1,6) 5=4 (нет)
J(0,2,6) 5=4 (нет)
J(1,2,6) 4=4 (да) САК=6
S(3)  
T(3,0)  
Stop  

 

R0 R1 R2
x y z

Задача 39.Напишите для исполнителя МНР алгоритм нахождения большего из трех целых положительных чисел t = max(x,y,z). Результат запишите в регистр R0.

Решение. Зададим начальную конфигурацию:

Блок-схема алгоритма:

В регистре R3 будем вначале хранить min(x,y), а затем min(max(x,y),z)).

 

Алгоритм вычисления max(x,y,z):

1. Z(3)

2. J(0,3,6)

3. J(1,3,7)

4. S(3)

5. J(0,0,2)

6. T(1,0)

7. Z(3)

8. J(0,3,12)

9. J(2,3,13)

10. S(3)

11. J(0,0,8)

12. T(2,0)

13. Stop

 

Конечная конфигурация:

R0
max(x,y,z)

 

Исполнение алгоритма при x=3, y=2, z=4

Шаги САК Исполняемая команда Конфигурация МНР после исполнения команды Проверяемое условие
      R0 R1 R2 R3  
     
Z(3)  
J(0,3,6) 3=0 (нет)
J(1,3,7) 2=0 (нет)
S(3)  
J(0,0,2) 3=3 (да) САК=2
J(0,3,6) 3=1 (нет)
J(1,3,7) 2=1 (нет)
S(3)  
J(0,0,2) 3=3 (да) САК=2
J(0,3,6) 3=2 (нет)
J(1,3,7) 2=2 (да) САК=7
Z(3)  
J(0,3,12) 3=0 (нет)
J(2,3,13) 4=0 (нет)
S(3)  
J(0,0,8) 3=3 (да) САК=8
J(0,3,12) 3=1 (нет)
J(2,3,13) 4=1 (нет)
S(3)  
J(0,0,8) 3=3 (да) САК=8
J(0,3,12) 3=2 (нет)
J(2,3,13) 4=2 (нет)
S(3)  
J(0,0,8) 3=3 (да) САК=8
J(0,3,12) 3=3 (да) САК=12
T(2,0)  
Stop  








Дата добавления: 2015-01-26; просмотров: 10924;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.019 сек.