Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Модуль для работы с множествами [Pascal]

13K
07 октября 2008 года
*alt
36 / / 12.04.2007
Реализовать Модуль для работы с множествами целых чисел, число элементов в котором больше, чем 256. Модуль должен содержать процедуры инициализации множества, включения, исключения элемента, проверки принадлежности элемента множеству; объединения, пересечения и разности множеств. Написать программу, иллюстрирующую работу данного модуля/
Множество должно удовлетворять

 
Код:
const
  maxDigit = 10000;
  ArraySize = maxDigit div (high (byte) + 1);
type
  TSet = set of byte;
  PSet = ^TSet;
  TBigSet = array [0..ArraySize] of PSet;
13K
14 октября 2008 года
*alt
36 / / 12.04.2007
народ! ну всё же, хоть чуть-чуть помощи..
314
15 октября 2008 года
fanto
374 / / 15.02.2003
связанный список
14
15 октября 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: *alt
народ! ну всё же, хоть чуть-чуть помощи..



Автор! Ну хоть чуть-чуть своих соображений/размышлений/наработок..

И объяснений что написано в теге [код] - комментариями в коде. А то мне элементарно лень додумываться что такое:

 
Код:
maxDigit div (high (byte) + 1)

например.
5
15 октября 2008 года
hardcase
4.5K / / 09.08.2005
Цитата: Phodopus

И объяснений что написано в теге [код] - комментариями в коде. А то мне элементарно лень додумываться что такое:
 
Код:
maxDigit div (high (byte) + 1)
например.


Это число, определяющее количество множеств (в терминах pascal), совокупность элементов которых покроет количество элементов пользовательского универсума (кстати неверно посчитано, оби-ван-ошибка есть :).
Задумка понятная, но на универсальность не претендует. В Pascal массивы фиксированного размера.

13K
17 октября 2008 года
*alt
36 / / 12.04.2007
Вот мой недописанный модуль (не все процедуры пока)

Код:
unit Unit1;

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.


Сам код программы::

Код:
program Project_BigSet;

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.


короче, не работает пока
что не так??
14
17 октября 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: hardcase
кстати неверно посчитано, оби-ван-ошибка есть :).


В том-то и дело. Наткнешься и не понимаешь - так задумали или так ошиблись? Или так задумано что-то сложное во что я никак не въеду? А въезжать времени нет..

Так что исправляй ошибку и пиши комментарии. Кстати если напишешь хороший комментарий к константам/объявлениям типов он тебе сразу поможет понять ошибку.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог