Вслед определенному в §17 функционалу здесь подобает представить и примерные варианты «повествовательного» описания программ, если в качестве прототипа использовать компактные учебные программы. Тогда в качестве источника текста программы для перевода «на повествовательный» можно взять программу из пособия Р. Хершеля «Turbo Pascal 4,0/5,0», в данном случае - программу «вывод всех целых положительных чисел в порядке их возрастания». Программа выводит все числа, отсутствующие среди последовательно вводимых в порядке возрастания целых чисел (0 в этой программе означает конец ввода). Исходный текст данной программы выглядит так:
program outp_absent_num;
var ein, aus: integer;
begin
aus := 1;
writeln (‘новое число (конец = 0):’);
readln(ein); writeln (‘считано:’, ein:3);
while ein <> 0 do
begin
writeln (‘отсутствуют:’);
while aus < ein do
begin writeln(aus);
aus := aus +1;
end;
writeln (‘новое число (конец = 0):’);
readln(ein); aus := aus +1;
writeln (‘считано:’, ein:3);
end;
end.
На гипотетическом «выразительном» языке программирования эту программу можно представить тогда посредством такой картины:
рама ‘program outp_absent_num’
агрегат ‘основной’ активизация
узел ‘первый’
узел ‘второй’
завершить
агрегат ‘основной’
учредить
сведения ‘ein’ нелокальный
сведения ‘aus’ нелокальный
получить сведения ‘aus’ значение ‘1’
наэкран ‘новое число (конец = 0):’
получить сведения ‘ein’
наэкран ‘считано:’ раскрыть сведения ‘ein’:3
сторож сведения ‘aus’=0 узел ‘первый’ активизация
узел ‘первый’
наэкран ‘отсутствуют:’
турникет сведения ‘ein’ =< сведения ‘aus’ выполнение узел ‘второй’
на экран ‘новое число (конец = 0):’
получить сведения ‘ein’
добавить сведения ‘aus’ значение ‘1’
наэкран ‘считано:’
раскрыть сведения ‘ein’:3
узел ‘второй’
раскрыть сведения ‘aus’
добавить сведения ‘aus’ значение ‘1’
Более того, в целях доказательства универсальности предлагаемого способа «перевода» в формат повествования полезно представить и еще какой-нибудь «вариант перевода» программы, также заимствованной в названном выше источнике. Эта программа считывает число более 0 и менее 10, и заменяет звездочками * все числа в диапазоне 0…99, сумма которых или равна данному числу, или ему равно число цифр в этих числах, или числа делимые на исходное число.
program digitgame;
uses crt;
var i, n, zehner, einer, quersumme, teiler: integer;
begin
clrscr;
writeln (‘Введите число n из интервала 0 < n < 10 ’);
read(n);
clrscr;
for i := 0 to 99 do
begin
zenher := i div 10;
einer := i mod 10;
guersumme := zenher + einer;
teiler := i mod n;
if i mod 10 = 0 then writeln;
if (zenher = n) or (einer = n) or
(quersumme = n) or (teller = 0)
then write (‘*’:4)
else write (‘i’:4);
end;
readln;
end.
В том виде, в котором эта программа позволяет представление на предполагаемом «повествовательном» языке программирования приведенный пример можно перестроить в вид следующей формы записи:
рама ‘digitgame’
агрегат ‘основной’ активизация
узел ‘первый’
завершить
агрегат ‘основной’
учредить
сведения ‘i’ нелокальный
сведения ‘n’ нелокальный
сведения ‘zehner’
сведения ‘einer’
сведения ‘quersumme’
сведения ‘teiler’
очистить экран
наэкран ‘Введите число n из интервала 0 < n < 10 ’
получить сведения ‘n’
очистить экран
обработчик для всех ‘i’ 0 < n < 99 выполнение узел ‘первый’
узел ‘первый’
добавить сведения ‘zenher’ частное от деления ‘i’ на 10
добавить сведения ‘einer’ остаток от деления ‘i’ на 10
добавить сведения ‘guersumme’ сумма ‘zenher’ и ‘einer’
добавить сведения ‘teiler’ остаток от деления ‘i’ на ‘n’
турникет остаток от деления ‘i’ на 10 = 0 наэкран
турникет ‘zenher’ = ‘n’, ‘einer’ = ‘n’, ‘guersumme’ = ‘n’, ‘teiler’ = 0
наэкран ‘*’:4
при невыпуске наэкран ‘i’:4