и в начале строки, перед фамилией. И что тогда? – проверьте на практике. При чтении чисел процедура Read «не заметит» лишних пробелов, – она достаточно «умна». Другое дело – показанная выше блок-схема: если перед фамилией обнаружится пробел, то чтение слова завершится досрочно. Стало быть, для правильного чтения фамилии надо пропустить стоящие перед нею пробелы (если они есть). Это улучшение слегка усложнит блок-схему (рис. 72).

В основу новой версии программы «P_31_1» положим программу «P_30_1». Вам следует, прежде всего, открыть её и сохранить под новым именем. Готово? Тогда приступаем к правке.
Начнем с главной программы, где надо изменить имена входных и выходных файлов (чтобы не путать с похожими файлами предыдущей версии).
Assign(InFile,
Assign(OutFile,
Позаботьтесь о том, чтобы файл «Journal2.in» был похож на настоящий классный журнал с фамилиями, как о нём сказано в начале 30-й главы.
Второе изменение внесем в процедуру обработки строки HandleString. Здесь объявим ещё одну переменную строкового типа, назовем её Fam, она будет вмещать фамилию ученика.
Fam:=
Разумеется, оператор печати строки тоже будет изменен.
Writeln(OutFile, Counter:3,
Осталось выяснить, что такое ReadFam? Это функция чтения фамилии, которую мы напишем по рассмотренному чуть выше алгоритму (рис. 72). Мой вариант функции таков.
function ReadFam: string;
var sym: char; { очередной символ }
S : string; { накопитель строки }
begin
S:=''; { очистка накопителя строки }
{ чтение символов до первой буквы }
repeat Read(InFile, sym); until
{ чтение последующих символов }
repeat
s:= s+sym;
if Eoln(InFile) then Break;
Read(InFile, sym);
until not ((Ord(sym)>32));
ReadFam:= S; { возвращаемый результат }
end;
Обратите внимание на сравнение введенного символа с пробелом. Это сравнение можно было бы записать так:
sym <> ’ ’