В разделе 13.1 ContingBlanksInText выполняла подсчет пробелов во входном файле с использованием модуля счетчика.
PROGRAM CountingBlanksInText(INPUT, OUTPUT);
VAR
Ch, X100, X10, X1: CHAR;
{Включить модуль счетчика}
BEGIN {CountingBlanksInText}
Start; {обнулить счетчик}
WHILE NOT EOF
DO
BEGIN
WHILE NOT EOLN
DO
BEGIN
READ(Ch);
IF Ch = ‘ ‘
THEN
BEGIN
Bump; {Увеличиваем счетчик на едеинцу}
Ch:= ‘#’;
END;
WRITE(Ch);
END;
READLN;
WRITELN
END;
WRITELN;
Value(X100, X10, X1); {получаем значение счетчика}
IF (X100 = ‘9’) AND (X10 = ‘9’) AND (X1 = ‘9’)
THEN
WRITELN(‘Количество пробелов как минимум 999’)
ELSE
WRITELN(‘Количество пробелов ’, X100, X10, X1)
END. {CountingBlanksInText}
Модуль определял абстракцию счетчика состоящего из трех переменных. Start присваивала символ 0 каждой из трех переменных, Bump изображала добавление единицы к к символьному представлению целочисленного значения, Value возвращала значение счетчика. Эти процедуры добавляли порядка 50 строк к программе, делая ее общую длину более 75 строк. С использованием типа данных INTEGER счетчик может быть реализован как переменная программы.
VAR
Counter: INTEGER;
а процедуры Start и Bump становятся операторами присваивания:
Counter:= 0; {Start}
Counter:= Counter + 1; {Bump}
Value заменяется ссылкой на Counter и Counter может быть сравнен с целой константой 999. Полная программа приведена ниже (теперь каких-то 25 строк).
PROGRAM CountingBlanksInText(INPUT, OUTPUT);
VAR
Ch: CHAR;
Counter: INTEGER;
BEGIN {CountingBlanksInText}
Counter:= 0; {обнулить счетчик}
WHILE NOT EOF
DO
BEGIN
WHILE NOT EOLN
DO
BEGIN
READ(Ch);
IF Ch = ‘ ‘
THEN {Увеличиваем счетчик на единицу}
Counter:= Counter +1;
WRITE(Ch);
END;
READLN;
WRITELN
END;
WRITELN;
IF Counter >= 999
THEN
WRITELN(‘Количество пробелов как минимум 999’)
ELSE
WRITELN(‘Количество пробелов ’, Counter)
END. {CountingBlanksInText}
INPUT:
Now is
the time for
all good men.
OUTPUT:
Now is
the time for
all good men.
Количество пробелов 9
INPUT:
OUTPUT:
Количество пробелов 0
Тест на более чем трехзначные значения был оставлен, чтобы программа была похода на ту которая использовала модуль счетчика, хотя с целочисленной переменной действительным ограничением является MAXINT. Частной и небезопасной практикой является игнорирование существования MAXINT и надежда на то, что Паскаль-машина сама разберется с этими проблемами.