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




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

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


>{ 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);

>while not Eof(F) do begin { Цикл чтения и подсчета букв }

>Read(F, c);       { чтение одного символа из файла }

>if c in ['a'..'z']       { если символ в нужном диапазоне }

>      then Counts[c]:= Counts[c]+1; { наращиваем его счетчик }

>end;

>Close(F);

>{ После подсчета распечатаем все счетчики }

>for c:='a' to 'z' do Writeln (c, Counts[c]:6);

>Write('Нажмите Enter'); Readln;

>end.


Здесь осталась лишь одна шероховатость – при печати результатов часть строк не поместится на экране. Так направьте вывод в текстовый файл. Или слабо?

Итоги

• Массивы, как любые переменные, «живут» в оперативной памяти. Переместив данные из файлов в массивы, мы многократно ускорим их обработку.

• Для индексации массивов допустимы любые порядковые типы данных. Выбор подходящего типа для индекса упрощает и украшает программу.

• При чтении чисел из текстового файла в «боевых» программах необходимо учитывать возможное наличие в файле пустых строк. Такие строки могут привести к чтению оператором Read несуществующего пустого числа (см. процедуру ReadFromFile в программе «P_40_2»).

А слабо?

А) Напишите программу для подсчета различных цифр в файле полицейской базы данных (считать надо именно цифры, а не числа!).

Б) Объявите массив из сотни целых чисел, заполните его случайными числами в диапазоне от 0 до 255 и распечатайте этот массив.

В) Найдите в массиве (задание Б) все элементы, хранящие число 7 (если таковые найдутся). Напечатайте индексы элементов, которые содержат это число.

Г) Заполните массив (задание Б) случайными числами в диапазоне от 0 до 255 так, чтобы ни одно из них не повторялось. Воспользуйтесь вспомогательным множеством чисел, где будут запоминаться сгенерированные ранее числа.