Курсовая работа: Некоторые способы разбиения множеств
var i,j,k,n:byte;wper:array[1..255]of boolean;
sled,pred,blok:array[1..255]of byte;
procedure write_razbienie; {процедура, выписывающая разбиение на экран }
var
i,j:byte;
begin
j:=1; {номер первого блока }
repeat
write('( ');
for i:=j to n do if blok[i]=j then write(i, ' '); { если число і из блока j, то пишем это число }
j:=sled[j]; {следующий по номеру блок }
write(')');
until j=0;
WRITELN
end;
begin
write('input n:');
readln(n); {вводим количество элементов множества }
for i:=1 to n do begin { строим разбиение {{1, …, n}} }
blok[i]:=1;
wper[i]:=true
end;
sled[1]:=0;
write_razbienie; { выписать разбиение }
j:=n; {активный элемент }
while j>1 do begin {задача цикла – перемещение «активного» элемента j в соседний блок – в предыдущий или последующий (в последнем случае может возникнуть необходимость создания нового блока вида { j }, а затем определение активного элемента во вновь образованном разбиении }
k:=blok[j]; {процесс переноса активного элемента; k – номер активного блока }
if wper[j] then begin {j движется вперёд }
if sled[k]=0 then begin {k – последний блок }