IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Модуль для работы с множествами
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


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

const
maxDigit = 10000;
ArraySize = maxDigit div (high (byte) + 1);
type
TSet = set of byte;
PSet = ^TSet;
TBigSet = array [0..ArraySize] of PSet;


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Здесь был: Эмуляция множеств, способных работать с бОльшим числом элементов ?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 3.10.2008 9:54) *

Спасибо, сейчас попробую разобраться.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 3.10.2008 9:54) *

Что-то как-то я не понял, как под данное условие переделать dry.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Что переделать? Сделать указатели вместо собственно Set-ов?
	TSet = array[0 .. pred(amount)] of T;

написать
	TSet = array[0 .. pred(amount)] of ^T;

(ну, и в остальных местах вместо s[ i ] поставить s[ i ]^, где нужно. Компилятор знает, где нужно)

Только теперь учти, что если раньше можно было сразу начинать пользоваться "множеством", то теперь, поскольку должна выделяться память, перед тем, как им пользоваться, его надо инициализировать... Вот так:

... { тут все предыдушие описания }
procedure CreateSet(var s: TSet);
var i: integer;
begin
for i := 0 to pred(amount) do begin
new(s[i]); s[i]^ := [];
end;
end;

procedure PlusSet(var left: TSet; right: TSet);
var i: integer;
begin
for i := 0 to pred(amount) do
left[i]^ := left[i]^ + right[i]^;
end;

{ А теперь - собственно программа: }
var
first, second: TSet;
begin
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);
end.

Операции
Цитата
объединения, пересечения и разности множеств
аналогичны по своей сути, меняются только знаки, так что остальные допишешь сам...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской

Репутация: -  0  +


unit ofset;

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 include(var s: TBigSet; i: Integer);

procedure exclude(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);

procedure PlusSet(const A,B: TBigSet; var C: TBigSet);


implementation

{------------------------------------------------------------------------}

procedure NewSet (var PS:Pset; S:Tset);
begin
new (PS);
PS^:=S;
end;

function GetIndex (i: integer):integer;
begin
result := i div 256
end;

function Number (i: integer): integer;
begin
result := i mod 256;
end;

function FullNumber (index: integer; i_mod: integer): integer;
begin
result := index*256 + i_mod
end;

{------------------------------------------------------------------------}

procedure CreateSet(var s: TBigSet);
var i: integer;
begin
for i := 0 to ArraySize do S[i]:=nil;
end;

{------------------------------------------------------------------------}

procedure PlusSet(const A,B: TBigSet; var C: TBigSet);
var i: integer;
begin
for i := 0 to ArraySize do
if (A[i]=nil) and (B[i]=nil) then
C[i]:=nil
else
if (A[i]=nil) and (B[i]<>nil) then
newset (c[i], b[i]^)
else
if (A[i]<>nil) and (B[i]=nil) then
newset (c[i], a[i]^)
else
if (a[i]<>nil) and (b[i]<>nil) then
newset (c[i], b[i]^+a[i]^)
end;
А как с таким описанием дописать этот модуль?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Ты бы нормально вопрос ставил, глядишь ,и ответили бы тебе... Что значит "с таким описанием дописать"? Реализуй все, что у тебя недореализовано... Что конкретно не получается - спрашивай... А то даешь кусок кода, и зачем он мне? Что, кто-то должен это протестировать? Сорри, но для этого надо ДОПИСАТЬ твой модуль, а если это лень делать тебе - то другим это и подавно не надо...

Есть какие-то конкретные проблемы? Несовместимости типов, отказ компилироваться по непонятной причине - спрашивай... За те почти два месяца, которые прошли с момента предыдущего ответа, уж как минимум сформулировать вопрос нормально можно было...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 6:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name