команди з масиву і збільшення значення I на 1, а процедура видає значення комірки, з якої необхідно вважати номер. Отже, процедура зменшує номер, а програма збільшує, тим самим відбувається компенсація їх роботи.
Робота процедури полягає в наступному: якщо поточне значення стрічки дорівнює 1 то в змінну I записується номер рядка масиву A, в іншому випадку номер рядка масиву B. Процедура ReadFile призначена для читання файлу і запису його рядків у масив і змінні. У даній підпрограмі використовуються тільки глобальні змінні. Після того як підпрограма зв'язала файлову змінну F з файлом «Prog.txt» (файл повинен знаходиться там же, де і файл програми, в іншому випадку доведеться вказувати шлях до текстового файлу) і відкрила його для читання Reset (F), вона записує перший рядок файлу в змінну Lenta, другий в змінну Pos, а потім організовує цикл зчитування до кінця файлу (while not EOF (F) do).
Усередині даного циклу відбувається зчитування всіх перших чисел рядків у перший стовпець масиву Mass і перевіряється умова: якщо значення першого шпальти масиву одно 5, то вважати інші дві цифри рядка файлу в іншому випадку перейти на наступний рядок файлу. Перед завершенням роботи процедура закриває файл і передає управління в головну програму.
Першої запускається процедура ReadFile, яка зчитує інформацію з файлу, потім змінна Flag присвоюється значення «брехня», оскільки значення «істина» є ознакою зупинки програми. Основною частиною головної програми є цикл repeat until, який виконується до тих пір, поки не виконається умова істинності Flag. Цикл for I:=1 to 256 do виводить значення стрічки, відповідно зі змінами, які вносяться. Коли довжина змінної Lenta вичерпана, інша частина стрічки заповнюється нулями. Потім йде оператор вибору, який зчитує чергове значення масиву і відповідно з ним виконує одну з 6 команд машини Посту:
: зрушення головки вправо, тобто в змінній стрічка зміщується покажчик вправо Pos:=Pos + 1 («Зрушення вправо»);
: зрушення головки вліво, аналогічно попередній команді, тільки зсув вліво Pos:=Pos - 1 та виведення повідомлення («Зрушення вліво»);
: Запис одиниці, змінної, яка описує стрічку, в осередок присвоюється одиниця Lenta [Pos]:=«1» і виводиться повідомлення («Запис 1»). Тут так само здійснюється перевірка умови, щоб осередок спочатку не містила 1, інакше виводиться повідомлення про некоректність алгоритму і виконання роботи програми завершується;
: Запис нуля: змінної, яка описує стрічку, в осередок присвоюється нуль Lenta [Pos]:=«0» і виводиться повідомлення («Запис 0»). Тут так само здійснюється перевірка на те, що б осередок спочатку не містила 0, інакше виводиться повідомлення про некоректність алгоритму з наступним завершенням роботи програми;
: перехід по умові, викликається вище описана процедура Result (J, Pos, Lenta), яка і здійснює перехід, після чого виводиться повідомлення («Перехід»);
: зупинка виконання програми, ознакою зупинки програми є Flag:=True, після чого цикл закінчує свою роботу і виводить повідомлення («Стоп»).
Наприкінці програми варто Readln, що очікує натискання клавіші який дозволяє користувачеві переглянути результати роботи програми.
ВИСНОВОК