Теми рефератів
> Реферати > Курсові роботи > Звіти з практики > Курсові проекти > Питання та відповіді > Ессе > Доклади > Учбові матеріали > Контрольні роботи > Методички > Лекції > Твори > Підручники > Статті Контакти
Реферати, твори, дипломи, практика » Курсовые проекты » Деякі способи розбиття множин

Реферат Деякі способи розбиття множин





істу покажчика: t : = k ^ , а запис значення в комірку пам'яті, куди вказує k, виглядає так: k ^: = 10. Але, чтобі використовувати покажчики, необхідно спочатку виділити пам'ять під них. Це робиться за допомогою команди new :

New ( k );

Щоб звільнити пам'ять, якщо покажчик вже не буде потрібен, використовують

Dispose ( k );

Оператори присвоювання, арифметичних операцій і циклів схожі в багатьох мовах, тому їх описувати не варто.


Реалізація алгоритмів
Генерування розбиттів множини В 

У табл.1 представлені розбиття для n = 4, генеруються наступним алгоритмом:


program razbienie_mnozhestwa (input, output),

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 - останній блок }

sled [k]: = j; { j - Одноелементний блок }

pred [j]: = k;

sled [j]: = 0

end;

if sled [k]> j then begin {j утворює новий < i> блок }

pred [j]: = k; { всі блоки праворуч від блоку з номером k містять елементи, великі j . Звідси випливає, що j утворює новий одноелементний блок }

sled [j]: = sled [k];

pred [sled [j]]: = j;

sled [k]: = j

end;

blok [j]: = sled [k] { переносимо наш елемент в активний блок з номером k }

end

else begin {j рухається назад }

blok [j]: = pred [k]; { поміщаємо j в попередній блок }

if k = j then if sled [k] = 0 then sled [pred [k]]: = 0 else begin

sled [pred [k]]: = sled [k];

pred [sled [k]]: = pred [k]

end

end;

write_razbienie;

j: = n;

while (j> 1) and

((Wper [j] and (blok [j] = j)) or (not wper [j] and (blok [j] = 1))) do begin

wper [j]: = not wper [j];

dec (j)

end

end

end.

Кількість всіх розбиттів можна порахувати використовуючи числа Белла і рекуррентную формулу (5).

В В В В В 

Назад | сторінка 3 з 6 | Наступна сторінка





Схожі реферати:

  • Реферат на тему: Creation of control system by a personnel how to begin with a zero
  • Реферат на тему: Блок виконання операцій десяткової арифметики
  • Реферат на тему: А. Блок і символізм
  • Реферат на тему: Блок збудження для ВТП
  • Реферат на тему: Системний блок