істу покажчика:
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).
В В В В В