Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2008, 15:07   #1
iFool
 
Регистрация: 16.10.2008
Сообщений: 3
По умолчанию Модуль для работы с множествами [Pascal]

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

Код:
const
  maxDigit = 10000;
  ArraySize = maxDigit div (high (byte) + 1);
type
  TSet = set of byte;
  PSet = ^TSet;
  TBigSet = array [0..ArraySize] of PSet;
мои нароботки
Вот мой недописанный модуль (не все процедуры пока)

Код:
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[i]); s[i]^ := [];
  end;
  readln;
end;

procedure PlusSet(var left: TBigSet; right: TBigSet);
var i: integer;
begin
  for i := 0 to pred(ArraySize) do
    left[i]^ := left[i]^ + right[i]^;
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[i]^ = []);
		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.
короче, не работает пока
что не так??
iFool вне форума Ответить с цитированием
Старый 17.10.2008, 16:23   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
короче, не работает
Что конкретно не работает? У меня работает, только в конце нового множества выкидывает мусор, потому что неверно написана процедура print_set(s: TBigSet); неверно определен размер множества. Напиши так.
Код:
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;
По хорошему еще бы надо процедуру освобождения памяти.
Код:
procedure DisposeSet(var s: TBigSet);
var i: integer;
begin
  for i := 0 to pred(ArraySize) do
  dispose(s[i]);
end;
puporev вне форума Ответить с цитированием
Старый 20.10.2008, 22:04   #3
iFool
 
Регистрация: 16.10.2008
Сообщений: 3
По умолчанию

не пойму почему вылетает
начинаю вводить множество и вылетае
iFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите плс.Pascal-->модуль graph Бедный студент Помощь студентам 0 31.05.2008 01:49
Модуль для работы с дуальными числами Wizlight Общие вопросы Delphi 1 13.04.2008 14:11
Модуль для DLE! okolovas Фриланс 1 28.12.2007 02:31
Мой собственный модуль работы с сообщениями Sibedir Софт 7 17.11.2007 01:23