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




>      A[’s’]:= 10;

>      A[’R’]:= 10;

>      C:=’d’; A[C]:= 10;

>      Readln(C); A[C]:= 10;


Проверьте свои решения на практике.

Глава 40

Пристрелка на знакомых мишенях



Итак, из арсенала Паскаля мы извлекли ещё одно мощное оружие – массивы. Опробуем его на знакомых мишенях, – некоторые наши программы можно улучшить, например, программу «вопрос-ответ» или полицейскую базу данных.

Вопрос-ответ – добиваемся гибкости

В 16-й главе мы смастерили шуточную программку, невпопад отвечающую на вопросы пользователей. Жаль только, что ответы намертво вбиты в саму программу. Скоро пользователям надоест смеяться над одним и тем же, и они забросят игрушку. Так пусть ваши приятели сами сочиняют смешные ответы и помещают их в текстовый файл, и тогда программа при запуске будет загружать их оттуда.

Прежде всего, подумаем над размещением вводимых из файла строк, где поселить их? «В массиве строк», – скажете, и будете правы. А сколько элементов запасти в этом массиве? Чем больше, тем лучше? Некоторые компиляторы накладывают ограничение на размер массива, но сотню строк они позволят, и этого пока достаточно. Итак, для хранения ответов объявим массив из 100 строковых переменных.

Перейдем к процедуре ввода этих строк. Техника ввода массива рассмотрена в предыдущей главе. Но теперь надо ещё и подсчитать введенные строки, иначе в дальнейшем мы не всегда сможем правильно индексировать массив, — ведь фактическое количество строк в файле может быть и меньше ста. С этой целью объявим переменную Fact, в которой и сделаем нужный нам подсчёт.

Обсудив эти моменты, обратимся к программе «P_40_1».


>{ P_40_1 – Программа "вопрос-ответ" с применением массива }


>const CAnswers = 100; { размер массива с ответами }

>      { объявление типа для массива ответов }

>type TAnswers = array[1..CAnswers] of string;


>var Answers : TAnswers; { объявление массива ответов }

>      Fact : integer;       { фактическое количество ответов }

>      F : text;       { файл с ответами }

>      S : string;       { строка с вопросом }

>{ Процедура ввода ответов из файла с подсчетом введенных строк }

>procedure ReadFromFile(var aFile: text);

>var i: integer;

>begin

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

>{ цикл по массиву строк }

>for i:=1 to CAnswers do begin

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

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

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

>end;

>end;


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