end.

Для ввода и вывода множеств используем дисковые файлы, поэтому оператор Readln в конце программы не нужен. Для облегчения проверки я уменьшил число учеников – константу CMax – с 250 до 20. При тестировании программы входной файл содержал следующие строки.

2 11 4 13

9 17 12 11 3 5 18

14 2 13 15 20

А в выходной файл попали следующие числа.

1 6 7 8 10 16 19

Легко убедиться в том, что никто из этих учеников не состоит в кружках.

Директорская задача, второй вариант

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

Во-первых, слегка изменим входной файл. Пусть первая его строка содержит количество учеников в школе; и тогда файл станет таким.

20

2 11 4 13

9 17 12 11 3 5 18

14 2 13 15 20

Во-вторых, отведем для участников кружков не три, а лишь одну переменную типа множество. Затем, по мере чтения строк файла, будем накапливать в этой переменной всех, кто состоит в кружках. Цикл чтения завершится по достижении конца входного файла. Вот и все изменения, посмотрите на второй вариант (процедуры ввода и вывода множеств только обозначены).

{ P_37_4 – решение директорской задачи, вариант 2 }

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

{ Здесь надо поместить процедуры ввода и вывода множеств }

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

{ взять из P_37_2 }

procedure ReadSet(var aFile: text; var aSet : TSet);

{ взять из P_37_2 }

var R, S : TSet;

      FileIn, FileOut: text;

      N: integer; { общее число учеников }

begin

      Assign(FileIn, ' P_37_4.in'); Reset(FileIn);

      Assign(FileOut, ' P_37_4,out'); Rewrite(FileOut);

      Readln(FileIn, N);       { читаем общее число учеников }

      S:= []; { очищаем перед вводом }

      { пока не конец файла, объединяем участников всех кружков }

      while not Eof (FileIn) do ReadSet(FileIn, S);

      R:= [1..N] – S;       { Решение }

Вы читаете Песни о Паскале
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату