Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ОАиП(теория).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
151.01 Кб
Скачать

51. Создание типизированных файлов.

file of < тип элементов>;

Допустим, мы имеем дело с файлом, в котором записываются переменные типа Word, тогда переменная файлового типа может быть введена двояко: с явным объявлением файлового типа:

Type

WordFile = file of word;

Var

MyFile : WordFile;

или без объявления файлового типа:

Var

MyFile : file of word;

Длина любого компонента типизированного файла строго постоянна, т.к. тип компонент определяется при описании, а, следовательно, определяется объем памяти, отводимый под каждую компоненту. Это дает возможность организовать прямой доступ к каждой компоненте (т.е. доступ по порядковому номеру).

Перед первым обращением к процедурам ввода/вывода указатель файла стоит в его начале и указывает на его первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Переменные и выражения в списках ввода и вывода в процедурах read() и write() должны иметь тот же тип, что и компоненты файла Паскаля. Если этих переменных или выражений в списке несколько, то указатель будет смещаться после каждой операции обмена данными на соответствующее число позиций.

Для облегчения перемещения указателя по файлу и доступа к компонентам типизированного файла существуют специальные процедуры и функции:

fileSize(<имя_ф_переменной>) – функция Паскаля, определяющая число компонентов в файле;

filePos(<имя_ф_переменной>) – функция Паскаля, значением которой является текущая позиция указателя;

seek(<имя_ф_переменной>,n) – процедура Паскаля, смещающая указатель на компоненту файла с номером n. Так, процедура seek(<имя_ф_переменной>,0) установит указатель в начало файла, а процедура seek(<имя_ф_переменной>, FileSize(<имя_ф_переменной>)) установит указатель на признак конца файла.

36. Алгоритмы генерирования множества всех подмножеств

Генерирование подмножеств множества

Каждое n-элементное множество x = { x1, x2, …, xn} имеет в точности два в степени n (2n ) подмножества, чтобы убедиться в этом, достаточно каждому подмножеству Y принадлежащему X сопоставить бинарную последовательность ( состоящую из 0 и 1) b1, b2, … bn, определяемую следующим образом:

bi = { 0, если xi принадлежит Y;

{ 1, если xi не принадлежит Y

Тем самым мы устанавливаем взаимнооднозначное соответствие между элементами множества Р (х) всех подмножеств множества х и всеми бинарными последовательностями длины n. Число таких последовательностей в точности = 2n , а значит в силу установленного соответствия имеет место равенство: модуль P (x) = 2n. Последовательность b1, b2, … bn, становится удобным машинным представлением подмножества Y, особенно в ситуации, когда мощность множества Х невелика и последовательность b1, b2, … bn, может быть закодирована в виде одного машинного слова. Такое представление подсказывает простой метод генерирования всех подмножеств. Можно заметить, что каждая бинарная последовательность bn-1, bn-2, …b0 представляет собой взаимнооднозначное целое число 0 <= r <= 2n – 1, для которого bn-1, bn-2, …b0 есть двоичное представление.

Рассмотрим пример генерирования всех подмножеств n-элементного множества, в котором каждая последовательность подмножества получается из предыдущего добавлением или удалением единственного элемента, причем каждое подмножество представляется бинарной последовательностью b1, b2, … bn.

Uses

Crt;

Var

i, j, p, k, n : Integer;

b : Array [1..10] of Integer;

Begin

ClrScr;

Write (‘Введите n’);

Readln (n);

for i:=1 to n do

b[i]:=0;

k:=0;

repeat

for i:=1 to n do

begin

Write (b[i], ‘ ‘);

end;

Writeln;

k:=k+1;

p:=1;

j:=k;

while (j mod 2) = 0 do

begin

j:= j div 2;

p:= p+1;

end;

if p < = n then

b[p]: = 1 – b[p]

until p > n

ReadKey;

End.