You are on page 1of 7

Лабораторна робота № 2

Тема: Розробка програм для машини Поста


Мета роботи: Вивчити машину Поста і способи написання алгоритмів для
неї. Отримати навички з написання алгоритмів розв'язання різних завдань
для машини Поста.
Завдання на лабораторну роботу
Завдання 1. Напишіть програму для машини Поста, яка збільшує на 2 число,
записане в унарній системі числення. Каретка розташована над першою
відміткою числа.
Рішення
1 > перемістити каретку праворуч на 1 клітину
2 ? 3,1 перевірити, якщо поточна секція містить "0", то перейти до рядка з
номером 3, інакше перейти до рядка 1
3 1 записати в поточну секцію «1» (поставити мітку)
4 >5 перемістити каретку праворуч на 1 клітину і перейти до рядка з
номером 5;
5 16 записати в поточну секцію «1» (поставити мітку) і перейти до рядка з
номером 6
6 . зупинити програму
Завдання 2. Напишіть програму для машини Поста, яка зменшує на 2 число,
записане в унарній системі числення. Каретка розташована над першою
відміткою числа.
Рішення
1 > перемістити каретку праворуч на 1 клітину
2 ? 3,1 перевірити, якщо поточна секція містить "0", то перейти до рядка з
номером 3, інакше перейти до рядка 1
3 < перемістити каретку ліворуч на 1 клітину
4 05 записати в поточну секцію «0» (стерти мітку) і перейти до рядка з
номером 5
5 <6 перемістити каретку ліворуч на 1 клітину і перейти до рядка 6
6 07 записати в поточну секцію «0» (стерти мітку) і перейти до рядка з
номером 7
7 . зупинити програму
Завдання 3. Напишіть програму для машини Поста, яка подвоює число,
записане в унарній системі числення. Каретка розташована над першою
відміткою числа.
Рішення
1 < перемістити каретку ліворуч на 1 клітину
2 ? 3,1 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 3, інакше перейти до рядка 1
3 >4 перемістити каретку праворуч на 1 клітину і перейти до рядка з
номером 4
4 05 записати в поточну секцію «0» (стерти мітку) і перейти до
рядка з номером 5
5 >6 перемістити каретку праворуч на 1 клітину і перейти до рядка 6
6 ? 7,5 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 7, інакше перейти до рядка 5
7 >8 перемістити каретку праворуч на 1 клітину і перейти до рядка з
номером 8
8 ? 9,7 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 9, інакше перейти до рядка 7
9 1 10 записати в поточну секцію «1» (поставити мітку) і перейти до
рядка з номером 10
1 > 11 перемістити каретку праворуч на 1 клітину і перейти до рядка з
0 номером 11
1 1 12 записати в поточну секцію «1» (поставити мітку) і перейти до
1 рядка з номером 12
1 < 13 перемістити каретку ліворуч на 1 клітину і перейти до рядка з
2 номером 13
1 ? 14,12 перевірити, якщо поточна секція містить "0", то перейти до
3 рядка з номером 14, інакше перейти до рядка 12
1 < 15 перемістити каретку ліворуч на 1 клітину і перейти до рядка з
4 номером 15
1 ? 16,1 перевірити, якщо поточна секція містить "0", то перейти до
5 рядка з номером 16, інакше перейти до рядка 1
1 . зупинити програму
6
Завдання 4. Напишіть програму для машини Поста, яка додає два числа в
унарній системі числення. Каретка розташована над пробілом, що розділяє ці
числа на стрічці.
Рішення
1 < перемістити каретку ліворуч на 1 клітину
2 ? 3,1 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 3, інакше перейти до рядка 1
3 >4 перемістити каретку праворуч на 1 клітину і перейти до рядка з
номером 4
4 05 записати в поточну секцію «0» (стерти мітку) і перейти до
рядка з номером 5
5 >6 перемістити каретку праворуч на 1 клітину і перейти до рядка 6
6 ? 7,5 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 7, інакше перейти до рядка 5
7 >8 перемістити каретку праворуч на 1 клітину і перейти до рядка з
номером 8
8 ? 9,7 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 9, інакше перейти до рядка 7
9 1 10 записати в поточну секцію «1» (поставити мітку) і перейти до
рядка з номером 10
1 > 11 перемістити каретку праворуч на 1 клітину і перейти до рядка з
0 номером 11
1 ? 12, 10 перевірити, якщо поточна секція містить "0", то перейти до
1 рядка з номером 12, інакше перейти до рядка 10
1 < 13 перемістити каретку ліворуч на 1 клітину і перейти до рядка з
2 номером 13
1 ? 14,1 перевірити, якщо поточна секція містить "0", то перейти до
3 рядка з номером 14, інакше перейти до рядка 1
1 . зупинити програму
4

Завдання 5. Напишіть програму для машини Поста, яка додає два числа,
записаних в унарній системі. Числа розташовані на невідомій відстані один
від одного. Каретка знаходиться над лівою границею першого (лівого) числа.
Рішення
1 02 записати в поточну секцію «0» (стерти мітку) і перейти до
рядка з номером 2
2 >3 перемістити каретку праворуч на 1 клітину і перейти до рядка з
номером 3
3 ? 4,2 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 4, інакше перейти до рядка 2
4 15 записати в поточну секцію «1» (поставити мітку) і перейти до
рядка з номером 5
5 >6 перемістити каретку праворуч на 1 клітину і перейти до рядка 6
6 ? 8,7 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 8, інакше перейти до рядка 7
7 . зупинити програму
8 <9 перемістити каретку ліворуч на 1 клітину і перейти до рядка з
номером 9
9 ? 10,8 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 10, інакше перейти до рядка 8
1 >1 перемістити каретку праворуч на 1 клітину і перейти до рядка 1
0

Завдання 6. Напишіть програму для машини Поста, яка додає кілька


натуральних чисел. Кожне число кодується як послідовність розташованих
поруч відміток (в унарній системі числення). Числа відокремлені один від
одного пробілами. Каретка знаходиться праворуч від першого числа.
Рішення
1 <2 перемістити каретку ліворуч на 1 клітину і перейти до рядка з
номером 2
2 ? 1,3 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 1, інакше перейти до рядка 3
3 04 записати в поточну секцію «0» (стерти мітку) і перейти до
рядка з номером 4
4 <5 перемістити каретку ліворуч на 1 клітину і перейти до рядка з
номером 5

5 ? 6,4 перевірити, якщо поточна секція містить "0", то перейти до


рядка з номером 6, інакше перейти до рядка 4
6 17 записати в поточну секцію «1» (поставити мітку) і перейти до
рядка з номером 7
7 <8 перемістити каретку ліворуч на 1 клітину і перейти до рядка з
номером 8
8 ? 9,10 перевірити, якщо поточна секція містить "0", то перейти до
рядка з номером 9, інакше перейти до рядка 10
9 . зупинити програму
1 > 11 перемістити каретку праворуч на 1 клітину і перейти до рядка
0 11
1 ? 1,10 перевірити, якщо поточна секція містить "0", то перейти до
1 рядка з номером 1, інакше перейти до рядка 10

You might also like