Книга: Насосы интуиции и другие инструменты мышления
Назад: XI. Что осталось за кадром
Дальше: Источники

Приложение
Решения задач о регистровых машинах

упражнение 1
программа 1:

 

 

а. Сколько шагов потребуется регистровой машине, чтобы сложить+и получить 7, выполняя программу(считая Кон отдельным шагом)?

 

Ответ: шесть шагов. Три декремента, два инкремента, одно окончание программы (последний декремент – переход на ноль).

 

б. Сколько шагов потребуется машине, чтобы сложить+ 2?

 

Ответ: двенадцать шагов. Шесть декрементов, пять инкрементов и одно окончание программы.

 

1(Какой из этого можно сделать вывод?)

 

Ответ: порядок содержимого может иметь большое значение, так что вам может показаться необходимым ввести правило всегда помещать меньшее число в регистр 1, но, если для этого вам сначала придется сравнивать два числа, чтобы выяснить, какое из них меньше, в итоге вам потребуется больше шагов, чем для сложения!
упражнение 2
а. Напишите РПА-программу для этого графа потока. (Обратите внимание: поскольку программа разветвляется, вы можете пронумеровать шаги несколькими способами. Неважно, какой из них вы выберете: главное, чтобы на верные следующие шаги указывали команды безусловного перехода.)

 

 

 

б. Что происходит, когда программа пытается вычестьиз 3 илииз 4?

 

Программа останавливается с нулем в регистре 4.

 

в. Какая возможная ошибка предотвращается обнулением регистраперед попыткой вычитания на шагевместо шага 4?

 

Если на старте и в регистре 1, и в регистре 2 были нули, в конце программа могла выдать абсурдный ответ (либо – 0, либо число, отличное от 0 и 1, в регистре знака).
упражнение 3
а. Нарисуйте граф потока (и напишите РПА-программу) для умножения содержимого регистрана содержимое регистра 3, поместив ответ в регистр 5.

 

 

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

 

 

 

 

 

 

в. (По желанию) Нарисуйте граф потока и напишите РПА-программу, которая изучает содержимое регистраи регистра(не разрушая их!) и записывает адрес (или 3) регистра с большим содержимым в регистр 2 или помещаетв регистр 2, если содержимое регистрови 3 равно. (После выполнения этой программы содержимое регистраи регистрадолжно остаться неизменным, а регистрдолжен показывать, равно ли их содержимое, а если нет, то в каком из регистров содержимое больше.)

 

 

 

упражнение 4 (по желанию)
Нарисуйте граф потока и напишите РПА-программу, которая превращает регистровую машину в простой карманный калькулятор, следующим образом:

 

а. Используйте регистрдля операции:

 

= ADD
= SUBTRACT
= MULTIPLY
= DIVIDE

 

б. Поместите числа, с которыми будут производиться манипуляции, в регистрыи 3.
(Таким образом, 3 0 6 будет означать+ 6; 5 1 3 будет означать 5–3; 4 2 5 будет означать* 5; а 9 3 3 будет означать÷ 3.) Затем поместите результаты операции в регистры 4–7, используя регистрдля знака (гдеозначает +, а 1 означает –), регистрдля численного ответа, регистрдля возможного остатка в случае деления, а регистрдля сообщения об ошибке ввода (либо требовании делить на ноль, либо неопределенной операции в регистре 2).

 

 

 

 

Назад: XI. Что осталось за кадром
Дальше: Источники