Песни о Паскале | страница 105
>{ P_29_1 – Полицейская база данных, версия 1 }
>function FindNumber(var aFile: text; aNumber: integer): boolean;
>var N: integer; { текущий номер в БД }
>begin
> FindNumber:= false; { на случай, если файл пуст }
> Reset(aFile); { позицию чтения устанавливаем в начало файла }
> N:=0; { в начале цикла задаем несуществующий номер }
> { читаем номера из файла, пока НЕ конец файла И номер НЕ найден }
> while not Eof(aFile) and (N<>aNumber) do begin
> Readln(aFile, N);
> FindNumber:= (N=aNumber); { true, если номер нашелся }
> end;
>end;
>var F: text; Num: integer;
>begin {----- Главная программа -----}
> Assign(F, 'Police.txt');
> repeat
> Write('Укажите номер автомобиля: '); Readln(Num);
> if FindNumber(F, Num)
> then Writeln('Эта машина в розыске, хватайте его!')
> else Writeln('Пропустите его');
> until Num=0; { 0 – признак завершения программы}
> Close(F);
>end.
Поясню некоторые моменты. В начале главной программы файловая переменная F связывается с файлом «Police.txt». Далее следует хорошо знакомая конструкция REPEAT–UNTIL с проверкой условия в конце цикла.
Самое интересное скрыто внутри функции FindNumber (от Find – «искать», Number – «номер»). Туда передаются два параметра, один из которых – файловая переменная. Обратите внимание на способ её передачи: файловая переменная передается по ссылке (в заголовке указано слово VAR). И никак иначе такую переменную не передают! Со временем узнаете причину, а пока просто запомните: файловые переменные передают внутрь процедур и функций только по ссылке! Следовательно, параметр aFile ссылается на глобальную переменную F.
А к чему здесь приставки «a» перед именами параметров: aFile, aNumber? Или это тоже правило языка? Нет, друзья, это всего лишь уловка программистов, которую полезно перенять. Чем сложнее будут ваши программы, тем гуще будут заселены разного рода переменными и параметрами. Во избежание путаницы лучше учредить разумную систему обозначений. Большинство программистов используют для систематизации имен так называемые префиксы или приставки. Например, для параметров (аргументов) процедур и функций применяют префикс «a» (от слова «argument»). Помеченные таким образом параметры уже не спутаешь с локальными или глобальными переменными.
Теперь заглянем внутрь функции FindNumber. В первой строке результату функции присваивается значение FALSE. И это оправдано, поскольку значение функции обязательно должно быть определено, а в случае, если файл БД окажется пустым, этого не случится, поскольку следующий далее цикл WHILE не будет выполняться.