procedure ReadFromFile(var aFile: text);

var i: integer;

begin

Fact:=0; { для начала подсчета номеров обнуляем счетчик }

for i:=1 to CNumbers do begin { цикл по массиву номеров }

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;

Теперь символ, прочитанный из файла, можно использовать как индекс в массиве счетчиков, надо лишь предварительно проверить его на попадание в нужный диапазон.

Входным файлом программы будет текст её самой же. Вот она, простая и красивая.

{ P_40_3 – Подсчет количества различных букв в файле }

      { Тип массива из целых чисел, индекс – символьный }

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

var Counts : TCounts; { массив из счетчиков букв }

      c: char; { текущий символ файла, он же – индекс счетчика }

      F : text; { файл с текстом программы }

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

{ Перед началом подсчета все счетчики обнуляем }

for c:='a' to 'z' do Counts[c]:=0;

{ Открываем входной файл для чтения }

Assign(F, 'P_40_3.pas'); Reset(F);

Перейти на страницу:

Похожие книги