Множества в B.Pascal

alextard
Автор темы
Аватара
alextard
Автор темы
Репутация: 0
Сообщения: 12
С нами: 5 лет 9 месяцев

Сообщение #1 alextard » 21.02.2013, 17:20

Всем добрый день! Хочу обратиться за помощью к добрым людям. Кто поможет реализовать задание??

Создать класс типа – множество (SET). Определить функции добавления элемента в множество, проверку на принадлежность элемента множеству; определить методы сложения, вычитания и пересечения двух множеств. Определить конструкторы и деструктор для данного класса.

Заранее благодарен!

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 10 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Сообщение #2 Andrey » 21.02.2013, 18:23

Множества уже есть в паскале. Если я правильно понял нужно сделать аналогичный класс. На основе массивов или не важно?

alextard
Автор темы
Аватара
alextard
Автор темы
Репутация: 0
Сообщения: 12
С нами: 5 лет 9 месяцев

Сообщение #3 alextard » 21.02.2013, 18:36

Да , я знаю что множества там присутствуют. а вот реализовывать как массив или нет , я не знаю. думаю, что всё же не через массив

Добавлено спустя 2 минуты 51 секунду:
Как я понял , мне нужно создать два множества через set of ... и затем выполнить опред. операции над ними...

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 10 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Сообщение #4 Andrey » 21.02.2013, 18:45

Я понял так: нужно создать класс (без использования set of). В этом классе создать методы для операций над множествами. Это не сложно, сейчас напишу как сделать.

alextard
Автор темы
Аватара
alextard
Автор темы
Репутация: 0
Сообщения: 12
С нами: 5 лет 9 месяцев

Сообщение #5 alextard » 21.02.2013, 18:48

А почему вы поняли , что без использования множества?? :du_ma_et:

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 10 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Сообщение #6 Andrey » 21.02.2013, 18:51

Часто дают классические задачи - повторить своим способом уже имеющийся в языке программирования функционал.
А если использовать множества, то задача уже решена, т.к. для этого есть стандартные функции. :-):

alextard
Автор темы
Аватара
alextard
Автор темы
Репутация: 0
Сообщения: 12
С нами: 5 лет 9 месяцев

Сообщение #7 alextard » 21.02.2013, 18:58

А сможете , если не трудно и через стандартные функции тоже реализовать. просто скорее всего я через них и пытался))

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 10 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Сообщение #8 Andrey » 21.02.2013, 19:33

Ладно, попробую два варианта: класс и с двумя множествами. Что такое бинарные сдвиги известно? Или лучше не использовать?

Предупреждение: из-за ошибки хостера сайт может в течение нескольких минут (а может и больше) не работать (dns-сервер отвалился, доступ только благодаря кешу). Поэтому если открыть не удастся, то придётся подождать.

alextard
Автор темы
Аватара
alextard
Автор темы
Репутация: 0
Сообщения: 12
С нами: 5 лет 9 месяцев

Сообщение #9 alextard » 21.02.2013, 19:39

Сдвиги известны , но думаю тут их не нужно точно использовать)

vlad M
Супермодератор
Супермодератор
Аватара
vlad M
Супермодератор
Супермодератор
Репутация: 0
Сообщения: 233
С нами: 6 лет 10 месяцев

Сообщение #10 vlad » 21.02.2013, 21:42

У меня есть такой класс, но выложить могу только завтра во второй половине дня, а это наверно слишком долго (не дома). А переписывать сейчас лень, он не маленький, т.к. нюансов в этой задачке много (всякие перегрузки операторов, индексаторы и прочее).
alextard писал(а):Как я понял , мне нужно создать два множества через set of ... и затем выполнить опред. операции над ними...
Ну это просто, поэтому наверно нет

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 10 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Сообщение #11 Andrey » 21.02.2013, 21:45

Пока не успеваю дописать из-за этих самых нюансов.
Ну а про использование set of - это просто операции с обычными множествами
var
a,b,c,d,e: set of byte;
begin
a := [1,4,6,8];
b := [1,2,3,6];
c := a+b; //объединение - элементы обоих множеств (1,2,3,4,6,8)
d := a-b; //вычитание - элементы множества A без повторяющихся в B (4,8)
e := a*b; //пересечение - одинаковые элементы множеств (1,6)
end;

alextard
Автор темы
Аватара
alextard
Автор темы
Репутация: 0
Сообщения: 12
С нами: 5 лет 9 месяцев

Сообщение #12 alextard » 21.02.2013, 21:53

Хорошо. спасибо . подожду тогда до завтра . так вот как раз такую структуру типа set of и нужно реализовать только используя конструкторы , функции и тд. что там требуется. давайте я вам скину что у меня было

Program P1;
uses crt;
var x:byte;


type Complex = object
{private}
a:set of byte;
public

constructor Init;
destructor destroy;
procedure Incl(x:byte);
function prov(x:byte):byte;
procedure Sum(b,c:Complex);
procedure Min(b,c:Complex);
procedure Per(b,c:Complex);
procedure Vivod;
end;

constructor Complex.Init;
begin

(* type a=array[1..5] of integer;
var b:a; i: byte;
begin
writeln('Vvedite znecenie elementov massiva: ');
for i:=1 to 5 do begin *)
a:=[1];

end;
procedure Complex.Incl( x:byte);
begin
a:=a+[1];
end;

function Complex.prov(x:byte):byte;
begin
if x in a then
prov:=1
else
prov:=0;
end;
procedure Complex.Sum(b,c:Complex);
begin
for x:=0 to 200 do
if x in b then
a:=a+[x];
if x:=0 in c then
a:=a+[x];

end;

procedure Complex.Min(b,c:Complex);
begin
a:=b-c;
end;

procedure Complex.Per(b,c:Complex);
begin
a:=b*c;
end;

destructor Complex.destroy;
begin
a:=[];
end;
procedure Complex.Vivod;
begin
for i:=0 to 3200 then
if i in a then
writeln(i);
end;
var b,c,m1,m2,m3,m4,m5: Complex;
begin
m1.Init;
m1.Incl(6);
m2.Init;
m3.Sum(m1,m2);
m3.Vivod;
readkey;
end.
Последний раз редактировалось alextard 21.02.2013, 21:53, всего редактировалось 3 раза.
Причина: Оформление кода (для читабельности)

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 10 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Сообщение #13 Andrey » 21.02.2013, 21:58

Примерно так я и делаю.
Если vlad завтра в первой половине дня не выложит, то я тогда выложу свой доделанный вариант. Если вдруг забуду напомните.

alextard
Автор темы
Аватара
alextard
Автор темы
Репутация: 0
Сообщения: 12
С нами: 5 лет 9 месяцев

Сообщение #14 alextard » 22.02.2013, 20:50

Напоминание)

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 10 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Сообщение #15 Andrey » 22.02.2013, 20:58

Спасибо за напоминание. А то пришёл с работы и забыл.
Для начала исправлю ошибки в вашей реализации. Потом попробую быстро сделать аналог без использования set of.

vlad M
Супермодератор
Супермодератор
Аватара
vlad M
Супермодератор
Супермодератор
Репутация: 0
Сообщения: 233
С нами: 6 лет 10 месяцев

Сообщение #16 vlad » 24.02.2013, 11:08

Прошу прощения за задержку с ответом, меня не было в городе. К огромному сожалению класс который был у меня предназначен для delphi и он совершенно не подходит к старому Borland Pascal (как минимум из-за динамических массивов).
При написании своего класса столкнулся с проблемой - не смог решить в каком формате сделать вывод, т.к. если это учебная задача то set of использовать нельзя.

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 10 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Сообщение #17 Andrey » 24.02.2013, 11:16

У меня тоже ничего хорошего не получилось. За время работы с delphi и другими IDE уже отвык от стандартного паскаля и всё реализовать к сожалению не удалось.

alextard
Автор темы
Аватара
alextard
Автор темы
Репутация: 0
Сообщения: 12
С нами: 5 лет 9 месяцев

Сообщение #18 alextard » 25.02.2013, 16:29

Ну а почему вы думаете, что через set of нельзя это реализовать?

Добавлено спустя 7 минут 32 секунды:
Ну а можете тогда просто как раз через set of это реализовать? если не трудно. даже просто можно то, что я скинул отредактировать...

Andrey M
Администратор
Администратор
Аватара
Andrey M
Администратор
Администратор
Репутация: 0
Сообщения: 2345
С нами: 6 лет 10 месяцев
Откуда: Воронеж
ICQ Сайт Skype

Сообщение #19 Andrey » 25.02.2013, 17:52

Хорошо, подождите около часа. Но не гарантирую что это действительно соответствует заданию.

alextard
Автор темы
Аватара
alextard
Автор темы
Репутация: 0
Сообщения: 12
С нами: 5 лет 9 месяцев

Сообщение #20 alextard » 25.02.2013, 19:53

Хорошо . Сталкивался уже и не раз с проблемой понимания задания. обычно ( у нас) говорят делайте , как поняли...


Вернуться в «Delphi/Pascal»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 7 гостей