Песни о Паскале | страница 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 так, чтобы ни одно из них не повторялось. Воспользуйтесь вспомогательным множеством чисел, где будут запоминаться сгенерированные ранее числа.