Песни о Паскале | страница 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 не будет выполняться.