Песни о Паскале | страница 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;