Рассмотрим задачу разделения INPUT на четные и нечетные символы и дальнейшего распечатывания последовательности нечетных и последовательности четных символов. Переключатель может отслеживать четность или нечетность очередного символа, который будет копироваться в файлы Odds или Evens соответственно. Далее эти два файла могут быть скопированы в OUTPUT. Программа Split реализует эту стратегию.
DP 2
PROGRAM Split (INPUT, OUTPUT);
{Копирует INPUT в OUTPUT, сначала все нечетные, потом все четные.
Программа выдаст ошибку, если в INPUT отсутствует #}
VAR
Ch: CHAR;
Odds, Evens: TEXT;
BEGIN {Split}
{Разбить INPUT на Odds и Evens}
{Копировать Odds в OUTPUT}
{Копировать Evens в OUTPUT}
END. {Split}
Реализуем переключатель, который записывает положение следующего символа который будет считан.
DP 2.1
BEGIN {Разбить INPUT на Odds и Evens}
REWRITE(Odds);
REWRITE(Evens);
Next := ‘O’;
READ(INPUT, Ch);
WHILE Ch <> ‘#’
DO
{Записывать Ch в файлы выбранный с помощью Next,
переключить Next, читать Ch}
WRITELN(Odds, ‘#’);
WRITELN(Evens, ‘#’);
END
DP 2.1.1
BEGIN {Записывать Ch в файлы выбранный с помощью Next,
переключить Next, читать Ch}
IF Next = ‘O’
THEN
BEGIN
WRITE(Odds, Ch);
Next := ‘E’;
END
ELSE
BEGIN
WRITE(Evens, Ch);
Next := ‘O’;
END;
READ(INPUT, Ch);
END
DP 2.2 {Копировать Odds в OUTPUT} и DP 2.3 {Копировать Evens в OUTPUT} аналогичны DP 1.2 для программы CopyTwice где необходимо заменит Chars на Odds и Evens.