Песни о Паскале | страница 166



>while Eoln(aFile) do { Пропуск пустых строк }

>      if Eof(aFile) then Break else Readln(aFile);

>if Eof(aFile) then Break; { если конец файла – выход из цикла }

>Read(aFile, Numbers[i]); { читаем номер в элемент массива }

>Fact:= Fact+1;       { наращиваем счетчик номеров }

>end;

>end;


>{ Функция поиска в массиве номеров автомобилей }

>function FindNumber(aNum: integer): boolean;

>var i: integer;

>begin

>      FindNumber:= false;

>      for i:=1 to Fact do

>      if aNum=Numbers[i] then begin

>      FindNumber:= true;       { нашли ! }

>      Break;       { выход из цикла }

>      end

>end;

>begin       {--- Главная программа ---}

>      { открываем файл и читаем номера автомобилей }

>      Assign(F, 'P_38_2.in'); Reset(F);

>      ReadFromFile(F);       { ввод номеров из файла }

>      Close(F);

>      repeat       { Главный цикл }

>      Write('Укажите номер автомобиля: '); Readln(Num);

>      if FindNumber(Num)

>      then Writeln('Эта машина в розыске, хватайте его!')

>      else Writeln('Пропустите его');

>      until Num=0; { 0 – признак завершения программы}

>end.


Ещё раз о статистике

Следующая программка будет маленькой, да удаленькой. Вернемся к статистике, с которой познакомились при обработке классного журнала. Напомню, что статистика – это наука, изучающая массовые явления. В текстах наших программ полным-полно разных букв, – давайте посчитаем их. Результатом работы программы будет таблица, похожая на эту.


>a 119

>b 45

>c 72

>...


Здесь левый столбец составляют буквы, а правый – количество этих букв в некотором файле. Упростим себе задачу, ограничившись подсчетом лишь маленьких латинских букв от «a» до «z».

Для подсчета общего количества символов в файле хватило бы одного счетчика. Но здесь 26 букв, а значит и счетчиков надо столько же. Массив счетчиков напрашивается сам собой, его тип можно объявить так:


>type TCounts = array [1..26] of integer;


Однако не спешите этого делать. Вспомните о том, что индексом массива может быть любой порядковый тип данных. А к ним, наряду с числами, относятся символьный и даже булев тип. Стало быть, допустимы такие массивы.


>type TA = array ['A'..'F'] of integer;

>      TB = array [false..true] of integer;


Первый из них содержит 6 элементов, а индексируется символьным выражением. Второй содержит всего два элемента, индексы которого имеют булев тип. В решаемой задаче напрашивается символьная индексация, а потому объявим тип для массива счетчиков так:


>type TCounts = array ['a'..'z'] of integer;