Модуль для работы с множествами [Pascal]
Множество должно удовлетворять
maxDigit = 10000;
ArraySize = maxDigit div (high (byte) + 1);
type
TSet = set of byte;
PSet = ^TSet;
TBigSet = array [0..ArraySize] of PSet;
Автор! Ну хоть чуть-чуть своих соображений/размышлений/наработок..
И объяснений что написано в теге [код] - комментариями в коде. А то мне элементарно лень додумываться что такое:
например.
И объяснений что написано в теге [код] - комментариями в коде. А то мне элементарно лень додумываться что такое:
Это число, определяющее количество множеств (в терминах pascal), совокупность элементов которых покроет количество элементов пользовательского универсума (кстати неверно посчитано, оби-ван-ошибка есть :).
Задумка понятная, но на универсальность не претендует. В Pascal массивы фиксированного размера.
interface
const
maxDigit = 10000;
ArraySize = maxDigit div (high (byte) + 1);
type
TSet = set of byte;
PSet = ^TSet;
TBigSet = array [0..ArraySize] of PSet;
{Инициализация множества}
procedure CreateSet(var s: TBigSet);
{Объединение множеств}
procedure PlusSet(var left: TBigSet; right: TBigSet);
{Включение элемента в множество}
procedure include(var s: TBigSet; i: Integer);
{Проверка на пустоту}
function is_empty(const s: TBigSet): boolean;
{Проверка, включен ли элемент в множество}
function in_set(const s: TBigSet; i: Integer): boolean;
{Печать}
procedure print_set(s: TBigSet);
implementation
procedure CreateSet(var s: TBigSet);
var i: integer;
begin
for i := 0 to pred(ArraySize) do begin
new(s); s^ := [];
end;
readln;
end;
procedure PlusSet(var left: TBigSet; right: TBigSet);
var i: integer;
begin
for i := 0 to pred(ArraySize) do
left^ := left^ + right^;
end;
procedure include(var s: TBigSet; i: Integer);
begin
system.include(s[i div 256]^, i mod 256)
end;
function is_empty(const s: TBigSet): boolean;
var
_result: boolean;
i: integer;
begin
_result := true;
i := 0;
while _result and (i < ArraySize) do begin
_result := _result and (S^ = []);
inc(i);
end;
is_empty := _result;
end;
function in_set(const s: TBigSet; i: Integer): boolean;
begin
in_set := (i mod 256) in s[i div 256]^;
end;
procedure print_set(s: TBigSet);
var
i: integer;
begin
for i := 0 to maxDigit do
if in_set(s, i) then write(i:6);
writeln;
end;
end.
Сам код программы::
uses
SysUtils, Unit1;
var
first, second: TBigSet; i:integer;
begin
writeln ('Vvedi elementy');
CreateSet(first);
for i := 2 to 20 do include(first, i);
CreateSet(second);
for i := 12 to 30 do include(second, i);
PlusSet(first, second);
print_set(first);
readln;
readln;
end.
короче, не работает пока
что не так??
В том-то и дело. Наткнешься и не понимаешь - так задумали или так ошиблись? Или так задумано что-то сложное во что я никак не въеду? А въезжать времени нет..
Так что исправляй ошибку и пиши комментарии. Кстати если напишешь хороший комментарий к константам/объявлениям типов он тебе сразу поможет понять ошибку.