Next:4.5.2
Приближенное вычисление сумм
Up:4.5
Обработка последовательности последовательностей
Previous:4.5
Обработка последовательности последовательностей
Решение. Последовательность идентификаторов -- это последовательность последовательностей, состоящих из букв и цифр. Такое рассмотрение приводит к программе РАСПЕЧАТКА, в которой учитывается непустота любой последовательности, образующей идентификатор, а также константность выражения, дающего сумму номеров букв и в литерном типе.
module ОбработкаСловПредложения;
var X:char; N:integer;
begin
N := integer('Z') + integer('A');
while ~ Eof do
(*Обработка идентификатора и пробела за ним *)
repeat
read(X);
if ('A' <= X) & (X <= 'Z')
then write(chr(N-integer(X)))
end
until X = ' ';
writeLn
end
end ОбработкаСловПредложения.
Другой вариант решения можно получить, если рассматривать исходную последовательность
как последовательность литер, на которой определены функции "первый необработанный
символ текущего идентификатора", "идентификатор закончился". Для этих функций
довольно очевидны соотношения сведения, позволяющие осуществить вычисление
без использования вложенных циклов (см. программу ОбработкаСловПредложений2).
module ОбработкаСловПредложения2;
var X:char; N:integer;
begin
N := integer('Z') + integer('A');
while ~ Eof do
read(X);
if X # ' ' then (* X - символ текущего идентификатора*)
if ('A' <=X) & (X<= 'Z') then write(Chr(N-Ord(X)))
end
else (* Идентификатор закончился *) writeln
end
end ОбработкаСловПредложения2.
Сравнивая эти два варианта, можно заметить, что с точки зрения эффективности они практически не различаются. Нельзя отдать безусловное предпочтение ни одному из них и с точки зрения наглядности: первый вариант алгоритма имеет более сложную логическую структуру, однако она вполне адекватна структуре входных данных.
Next:4.5.2
Приближенное вычисление сумм
Up:4.5
Обработка последовательности последовательностей
Previous:4.5
Обработка последовательности последовательностей