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



>      c2:= ['1'..'9'];

>      c2:= c2 + ’0’;

>      c2:= c2 + [0];

>      b1:= c1;

>      b2:= b1 + [1,7,3];

>      Writeln(b1=b2);

>      Writeln(1 in b2);

>      Writeln([1] in b2);

>      Writeln(b1 in b2);

>end.


Б) Напечатайте 20 случайных чисел в диапазоне от 1 до 50 так, чтобы каждое число встретилось в распечатке лишь по разу. Подсказка: после генерации числа функцией Random проверьте его на вхождение в множество уже напечатанных чисел.

В) Введите программу решения директорской задачи (см. предыдущую страницу), а затем запустите её в пошаговом режиме (клавишей F7). Перед запуском вставьте все переменные в окно обзора переменных «Watch» и проследите за их изменением. Напомню, что о средствах отладки рассказано в главе 21.

Глава 37

Ввод и вывод множеств



Мы узнали о множествах и приспособили их к директорской задаче. Чтобы покончить с нею доделаем ещё пару пустяков: организуем ввод и вывод множеств. Для ввода-вывода строк и простых типов данных годятся процедуры Read[ln] и Write[ln]. Но сейчас все не так просто, – эти процедуры не способны работать, ни с множествами, ни с другими сложными типами данных. Однако ж «нормальные герои всегда идут в обход», – пойдем так и на этот раз.

Вывод множества в текстовый файл

Начнем с вывода числового множества на экран (или в файл, – что одно и то же). Так мы получим средство для последующей проверки вводимых множеств.

Раз уж процедура Writeln не печатает множество одним махом, выведем каждый его элемент по отдельности – ведь это обычные числа или символы. Проверяя все возможные элементы множества, будем печатать лишь те, что входят в него – в этом основная идея. Напомню, что для такой проверки подходит операция IN. Дополнив её циклом со счетчиком, соорудим несложную процедуру распечатки числового множества. Вот она вместе с программой для её проверки.


>{ P_37_1 – вывод множества в файл }


>type TSet = set of 1..255;       { объявление типа «множество» }


>      {----- Процедура вывода множества в файл -----}

>procedure WriteSet(var aFile: text; const aSet : TSet);

>var k : integer;

>begin

>      for k:=1 to 255 do       { цикл по всем элементам множества}

>      if k in aSet       { если K входит в множество }

>      then Write(aFile, k:4);       { печатаем в строке }

>      Writeln(aFile); { по окончании – переход на следующую строку }

>end;

>      {----- Программа для проверки процедуры WriteSet -----}

>var S1 : TSet;       F: text;

>begin

>      Assign(F, ''); Rewrite(F); { связываем файл с экраном! }